-
Notifications
You must be signed in to change notification settings - Fork 5
/
papi_test.go
73 lines (66 loc) · 2.14 KB
/
papi_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// This file tests miscellaneous features of the PAPI library.
package papi
import "testing"
// Prevent SomeValue from being optimized away by exporting it.
var SomeValue float64 = 123.456
// Peform a given number of floating-point operations, just to burn cycle.
func performWork(numFlops int) {
for i := 0; i < numFlops; i++ {
// This should do one floating-point instruction and
// one floating-point operation per iteration and be
// unlikely for the compiler to optimize away.
SomeValue = SomeValue * float64(i%7)
}
}
// Ensure that we can map back-and-forth between event names and event codes.
func TestEventNames(t *testing.T) {
eventCodes := []Event{
BR_INS,
CA_INV,
CSR_SUC,
FMA_INS,
HW_INT,
L1_DCA,
RES_STL,
TLB_TL,
}
for _, ecode1 := range eventCodes {
ename := ecode1.String()
ecode2, err := StringToEvent(ename)
if err != nil {
t.Fatal(err)
}
if ecode1 != ecode2 {
t.Fatalf("Event code got mangled: %d --> %s --> %d",
int(ecode1), ename, int(ecode2))
}
}
}
// Ensure that we can map event modifiers to strings.
func TestEventModifiers(t *testing.T) {
// papi.go makes some assumptions about a couple of PAPI's
// event-modifier values. Verify that these assumptions are
// correct.
if int(ENUM_EVENTS) != 0 {
t.Fatalf("Expected ENUM_EVENTS to be 0, but it's actually %d", int(ENUM_EVENTS))
}
if int(ENUM_FIRST) != 1 {
t.Fatalf("Expected ENUM_FIRST to be 1, but it's actually %d", int(ENUM_FIRST))
}
if int(PRESET_ENUM_AVAIL) != 2 {
t.Fatalf("Expected PRESET_ENUM_AVAIL to be 2, but it's actually %d", int(PRESET_ENUM_AVAIL))
}
// Try mapping a few names to strings and verifying that we
// get what we expected to get.
expectedToActual := map[EventModifier]string{
ENUM_EVENTS: "PAPI_ENUM_EVENTS",
ENUM_FIRST: "PAPI_ENUM_FIRST",
PRESET_ENUM_AVAIL: "PAPI_PRESET_ENUM_AVAIL",
PRESET_BIT_CACH | PRESET_BIT_L3: "PAPI_PRESET_BIT_CACH|PAPI_PRESET_BIT_L3"}
for emod, str := range expectedToActual {
if emod.String() != str {
t.Fatalf("Expected to map %d to \"%s\" but instead got \"%s\"",
int32(emod), str, emod.String())
}
}
}