2014-08-04 23:02:08 +00:00
|
|
|
package frame
|
|
|
|
|
|
|
|
import (
|
2014-09-19 04:00:41 +00:00
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
2014-08-04 23:02:08 +00:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestFDEForPC(t *testing.T) {
|
2015-02-05 00:14:08 +00:00
|
|
|
fde1 := &FrameDescriptionEntry{begin: 0, end: 49}
|
2014-10-11 06:05:27 +00:00
|
|
|
fde2 := &FrameDescriptionEntry{begin: 50, end: 99}
|
2015-02-05 00:14:08 +00:00
|
|
|
fde3 := &FrameDescriptionEntry{begin: 100, end: 200}
|
2014-10-11 06:05:27 +00:00
|
|
|
fde4 := &FrameDescriptionEntry{begin: 201, end: 245}
|
2014-08-04 23:02:08 +00:00
|
|
|
|
2015-02-05 00:14:08 +00:00
|
|
|
frames := NewFrameIndex()
|
|
|
|
frames = append(frames, fde1)
|
|
|
|
frames = append(frames, fde2)
|
|
|
|
frames = append(frames, fde3)
|
|
|
|
frames = append(frames, fde4)
|
2014-08-04 23:02:08 +00:00
|
|
|
|
2015-02-05 00:14:08 +00:00
|
|
|
node, err := frames.FDEForPC(35)
|
|
|
|
if err != nil {
|
2015-01-14 02:37:10 +00:00
|
|
|
t.Fatal(err)
|
2014-08-04 23:02:08 +00:00
|
|
|
}
|
|
|
|
|
2015-02-05 00:14:08 +00:00
|
|
|
if node != fde1 {
|
2014-08-04 23:02:08 +00:00
|
|
|
t.Fatal("Got incorrect fde")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func BenchmarkFDEForPC(b *testing.B) {
|
2014-09-19 04:00:41 +00:00
|
|
|
f, err := os.Open("testdata/frame")
|
|
|
|
if err != nil {
|
|
|
|
b.Fatal(err)
|
|
|
|
}
|
|
|
|
defer f.Close()
|
2014-08-04 23:02:08 +00:00
|
|
|
|
2014-09-19 04:00:41 +00:00
|
|
|
data, err := ioutil.ReadAll(f)
|
|
|
|
if err != nil {
|
|
|
|
b.Fatal(err)
|
|
|
|
}
|
|
|
|
fdes := Parse(data)
|
2014-08-04 23:02:08 +00:00
|
|
|
|
|
|
|
for i := 0; i < b.N; i++ {
|
2014-09-19 04:00:41 +00:00
|
|
|
// bench worst case, exhaustive search
|
|
|
|
_, _ = fdes.FDEForPC(0x455555555)
|
2014-08-04 23:02:08 +00:00
|
|
|
}
|
|
|
|
}
|