@@ -6,29 +6,11 @@ import (
6
6
"github.com/markus-wa/demoinfocs-golang/events"
7
7
"os"
8
8
"reflect"
9
- "runtime"
10
9
"testing"
11
10
"time"
12
11
)
13
12
14
- var cancel bool = false
15
- var tsc * dem.TeamState
16
- var tix int = 0
17
- var oldScore int
18
-
19
- func handleTickDone (events.TickDoneEvent ) {
20
- tix ++
21
- if tix > 100 {
22
- //cancel = true
23
- }
24
- if tsc != nil && oldScore != tsc .Score () {
25
- fmt .Println (tsc .Score ())
26
- oldScore = tsc .Score ()
27
- }
28
-
29
- }
30
-
31
- func handle (interface {}) {}
13
+ const demPath = "test/demo.dem"
32
14
33
15
func handleDetails (e interface {}) {
34
16
n := reflect .TypeOf (e ).Name ()
@@ -37,72 +19,83 @@ func handleDetails(e interface{}) {
37
19
}
38
20
}
39
21
40
- var started bool = false
41
-
42
- func handleStart (events.MatchStartedEvent ) {
43
- started = true
44
- }
45
- func handleKill (events.PlayerKilledEvent ) {
46
- if started {
47
- //k := e.(events.PlayerKilledEvent)
48
- //fmt.Println(k.Killer, "&", k.Assister, "killed", k.Victim)
49
- //fmt.Println(*k.Killer, "&", k.Assister, "killed", *k.Victim)
50
- }
51
- }
52
-
53
22
func TestDemoInfoCs (t * testing.T ) {
54
- var demPath string
55
- if runtime .GOOS == "windows" {
56
- demPath = "C:\\ Dev\\ demo.dem"
57
- } else {
58
- demPath = "/home/markus/Downloads/demo.dem"
59
- }
60
23
f , _ := os .Open (demPath )
61
24
defer f .Close ()
62
25
63
26
p := dem .NewParser (f )
27
+
28
+ fmt .Println ("Parsing header" )
64
29
p .ParseHeader ()
65
30
66
- fmt .Println ("go" )
67
- if true {
68
- p .EventDispatcher ().RegisterHandler (handleTickDone )
69
- p .EventDispatcher ().RegisterHandler (handle )
70
- //p.EventDispatcher().RegisterHandler(reflect.TypeOf((*interface{})(nil)).Elem(), handleDetails)
71
- //p.EventDispatcher().RegisterHandler(reflect.TypeOf((*events.BombEventIf)(nil)).Elem(), handleDetails)
72
- //p.EventDispatcher().RegisterHandler(reflect.TypeOf((*events.NadeEventIf)(nil)).Elem(), handleDetails)
73
- //p.EventDispatcher().RegisterHandler(reflect.TypeOf((*events.PlayerJumpEvent)(nil)).Elem(), handleDetails)
74
- //p.EventDispatcher().RegisterHandler(reflect.TypeOf((*events.PlayerDisconnectEvent)(nil)).Elem(), handleDetails)
75
- p .EventDispatcher ().RegisterHandler (handleKill )
76
- p .EventDispatcher ().RegisterHandler (handleStart )
77
- }
78
- tsc = p .TState ()
31
+ fmt .Println ("Registering handlers" )
32
+ var tState * dem.TeamState
33
+ var oldScore int
34
+ p .RegisterEventHandler (func (events.TickDoneEvent ) {
35
+ if tState != nil && oldScore != tState .Score () {
36
+ fmt .Println ("T-side score: " , tState .Score ())
37
+ oldScore = tState .Score ()
38
+ }
39
+ })
40
+ tState = p .TState ()
41
+
79
42
ts := time .Now ()
43
+ cancel := false
44
+ go func () {
45
+ timer := time .NewTimer (time .Second * 8 )
46
+ <- timer .C
47
+ cancel = true
48
+ timer = time .NewTimer (time .Second * 2 )
49
+ <- timer .C
50
+ t .Fatal ("Parsing timeout" )
51
+ }()
52
+
53
+ fmt .Println ("Parsing to end" )
80
54
p .ParseToEnd (& cancel )
81
- duration := time .Since (ts )
82
- fmt .Println ("took" , duration .Nanoseconds ()/ 1000 / 1000 , "ms" )
55
+
56
+ fmt .Println ("Took" , time .Since (ts ).Nanoseconds ()/ 1000 / 1000 , "ms" )
57
+ }
58
+
59
+ func TestCancelParseToEnd (t * testing.T ) {
60
+ runTest (func (p * dem.Parser ) {
61
+ p .ParseHeader ()
62
+ var tix int = 0
63
+ var cancel bool
64
+ p .RegisterEventHandler (func (events.TickDoneEvent ) {
65
+ tix ++
66
+ if tix == 100 {
67
+ cancel = true
68
+ } else if tix > 100 {
69
+ t .Fatal ("Parsing continued after cancellation" )
70
+ }
71
+ })
72
+ defer func () { recover () }()
73
+ p .ParseToEnd (& cancel )
74
+ })
75
+ }
76
+
77
+ func runTest (test func (* dem.Parser )) {
78
+ f , _ := os .Open (demPath )
79
+ defer f .Close ()
80
+
81
+ test (dem .NewParser (f ))
83
82
}
84
83
85
84
func BenchmarkDemoInfoCs (b * testing.B ) {
86
85
fmt .Println ("Parsing sample demo" , b .N , "times" )
87
- var demPath string
88
- if runtime .GOOS == "windows" {
89
- demPath = "C:\\ Dev\\ demo.dem"
90
- } else {
91
- demPath = "/home/markus/Downloads/demo.dem"
92
- }
93
86
for i := 0 ; i < b .N ; i ++ {
94
- runDemoInfoCsBenchmark (demPath )
87
+ runDemoInfoCsBenchmark ()
95
88
}
96
89
}
97
90
98
- func runDemoInfoCsBenchmark (path string ) {
99
- f , _ := os .Open (path )
91
+ func runDemoInfoCsBenchmark () {
92
+ f , _ := os .Open (demPath )
100
93
defer f .Close ()
101
94
102
95
p := dem .NewParser (f )
103
96
p .ParseHeader ()
97
+
104
98
ts := time .Now ()
105
99
p .ParseToEnd (nil )
106
- duration := time .Since (ts )
107
- fmt .Println ("took" , duration .Nanoseconds ()/ 1000 / 1000 , "ms" )
100
+ fmt .Println ("Took" , time .Since (ts ).Nanoseconds ()/ 1000 / 1000 , "ms" )
108
101
}
0 commit comments