@@ -17,45 +17,45 @@ private static TeamInfoSnapshot Team(ulong leader, params TeamMemberSnapshot[] m
1717 public void First_snapshot_primes_silently ( )
1818 {
1919 var tracker = new TeamStateTracker ( ) ;
20- var result = tracker . Diff ( Team ( 1 , Member ( 1 ) ) ) ;
20+ var result = tracker . Diff ( Team ( 1 , Member ( 1 ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
2121 Assert . Empty ( result ) ;
2222 }
2323
2424 [ Fact ]
2525 public void Null_snapshot_emits_nothing_and_keeps_baseline ( )
2626 {
2727 var tracker = new TeamStateTracker ( ) ;
28- tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) ) ;
29- Assert . Empty ( tracker . Diff ( null ) ) ;
28+ tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
29+ Assert . Empty ( tracker . Diff ( null , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ) ;
3030 // After the null, an offline flip is still detected against the original baseline.
31- var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) ) ;
31+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
3232 Assert . Single ( result , t => t . Kind == PlayerTransitionKind . Disconnect ) ;
3333 }
3434
3535 [ Fact ]
3636 public void Brand_new_member_is_primed_silently ( )
3737 {
3838 var tracker = new TeamStateTracker ( ) ;
39- tracker . Diff ( Team ( 1 , Member ( 1 ) ) ) ;
40- var result = tracker . Diff ( Team ( 1 , Member ( 1 ) , Member ( 2 , online : true ) ) ) ;
39+ tracker . Diff ( Team ( 1 , Member ( 1 ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
40+ var result = tracker . Diff ( Team ( 1 , Member ( 1 ) , Member ( 2 , online : true ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
4141 Assert . DoesNotContain ( result , t => t . SteamId == 2 ) ;
4242 }
4343
4444 [ Fact ]
4545 public void Connect_detected_on_offline_to_online ( )
4646 {
4747 var tracker = new TeamStateTracker ( ) ;
48- tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) ) ;
49- var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) ) ;
48+ tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
49+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
5050 Assert . Single ( result , t => t . Kind == PlayerTransitionKind . Connect && t . SteamId == 1 ) ;
5151 }
5252
5353 [ Fact ]
5454 public void Disconnect_detected_on_online_to_offline ( )
5555 {
5656 var tracker = new TeamStateTracker ( ) ;
57- tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) ) ;
58- var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) ) ;
57+ tracker . Diff ( Team ( 1 , Member ( 1 , online : true ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
58+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
5959 Assert . Single ( result , t => t . Kind == PlayerTransitionKind . Disconnect && t . SteamId == 1 ) ;
6060 }
6161
@@ -64,9 +64,9 @@ public void Death_detected_on_deathtime_advance_even_if_alive_again()
6464 {
6565 var t0 = DateTimeOffset . UnixEpoch ;
6666 var tracker = new TeamStateTracker ( ) ;
67- tracker . Diff ( Team ( 1 , Member ( 1 , alive : true , death : t0 ) ) ) ;
67+ tracker . Diff ( Team ( 1 , Member ( 1 , alive : true , death : t0 ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
6868 // Died and already respawned: IsAlive true both times, but LastDeathTime advanced.
69- var result = tracker . Diff ( Team ( 1 , Member ( 1 , alive : true , death : t0 . AddMinutes ( 1 ) ) ) ) ;
69+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , alive : true , death : t0 . AddMinutes ( 1 ) ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
7070 Assert . Contains ( result , t => t . Kind == PlayerTransitionKind . Death && t . SteamId == 1 ) ;
7171 }
7272
@@ -75,8 +75,8 @@ public void Respawn_detected_on_spawntime_advance_with_current_location()
7575 {
7676 var t0 = DateTimeOffset . UnixEpoch ;
7777 var tracker = new TeamStateTracker ( ) ;
78- tracker . Diff ( Team ( 1 , Member ( 1 , spawn : t0 ) ) ) ;
79- var result = tracker . Diff ( Team ( 1 , Member ( 1 , x : 50 , y : 60 , spawn : t0 . AddMinutes ( 1 ) ) ) ) ;
78+ tracker . Diff ( Team ( 1 , Member ( 1 , spawn : t0 ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
79+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , x : 50 , y : 60 , spawn : t0 . AddMinutes ( 1 ) ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
8080 var respawn = Assert . Single ( result , t => t . Kind == PlayerTransitionKind . Respawn ) ;
8181 Assert . Equal ( ( 50f , 60f ) , respawn . Location ) ;
8282 }
@@ -86,16 +86,16 @@ public void Unchanged_snapshot_emits_nothing()
8686 {
8787 var tracker = new TeamStateTracker ( ) ;
8888 var m = Member ( 1 , spawn : DateTimeOffset . UnixEpoch , death : DateTimeOffset . UnixEpoch ) ;
89- tracker . Diff ( new TeamInfoSnapshot ( 1 , [ m ] ) ) ;
90- Assert . Empty ( tracker . Diff ( new TeamInfoSnapshot ( 1 , [ m ] ) ) ) ;
89+ tracker . Diff ( new TeamInfoSnapshot ( 1 , [ m ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
90+ Assert . Empty ( tracker . Diff ( new TeamInfoSnapshot ( 1 , [ m ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ) ;
9191 }
9292
9393 [ Fact ]
9494 public void Connect_and_disconnect_have_no_location ( )
9595 {
9696 var tracker = new TeamStateTracker ( ) ;
97- tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) ) ;
98- var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : true , x : 9 , y : 9 ) ) ) ;
97+ tracker . Diff ( Team ( 1 , Member ( 1 , online : false ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
98+ var result = tracker . Diff ( Team ( 1 , Member ( 1 , online : true , x : 9 , y : 9 ) ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
9999 Assert . Null ( Assert . Single ( result ) . Location ) ;
100100 }
101101
@@ -104,9 +104,9 @@ public void Leader_death_uses_deathnote_location()
104104 {
105105 var t0 = DateTimeOffset . UnixEpoch ;
106106 var tracker = new TeamStateTracker ( ) ;
107- tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 , death : t0 ) ] ) ) ;
107+ tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 , death : t0 ) ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
108108 var snap = new TeamInfoSnapshot ( 1 , [ Member ( 1 , x : 1 , y : 1 , death : t0 . AddMinutes ( 1 ) ) ] , ( 700f , 800f ) ) ;
109- var death = Assert . Single ( tracker . Diff ( snap ) , t => t . Kind == PlayerTransitionKind . Death ) ;
109+ var death = Assert . Single ( tracker . Diff ( snap , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) , t => t . Kind == PlayerTransitionKind . Death ) ;
110110 Assert . Equal ( ( 700f , 800f ) , death . Location ) ;
111111 }
112112
@@ -116,10 +116,10 @@ public void Nonleader_death_uses_previous_poll_position_not_current()
116116 var t0 = DateTimeOffset . UnixEpoch ;
117117 var tracker = new TeamStateTracker ( ) ;
118118 // Member 2 is alive at (10,10) on the baseline poll...
119- tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) , Member ( 2 , x : 10 , y : 10 , death : t0 ) ] ) ) ;
119+ tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) , Member ( 2 , x : 10 , y : 10 , death : t0 ) ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
120120 // ...then dies and respawns at (999,999); death must report the PRE-death (10,10).
121121 var snap = new TeamInfoSnapshot ( 1 , [ Member ( 1 ) , Member ( 2 , x : 999 , y : 999 , death : t0 . AddMinutes ( 1 ) ) ] , ( 5f , 5f ) ) ;
122- var death = Assert . Single ( tracker . Diff ( snap ) , t => t . Kind == PlayerTransitionKind . Death ) ;
122+ var death = Assert . Single ( tracker . Diff ( snap , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) , t => t . Kind == PlayerTransitionKind . Death ) ;
123123 Assert . Equal ( ( 10f , 10f ) , death . Location ) ; // leader DeathNote (5,5) must NOT apply to a non-leader
124124 }
125125
@@ -129,9 +129,9 @@ public void Death_with_no_prior_position_and_no_deathnote_has_null_location()
129129 var t0 = DateTimeOffset . UnixEpoch ;
130130 var tracker = new TeamStateTracker ( ) ;
131131 // Prime member 1 only.
132- tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) ] ) ) ;
132+ tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
133133 // Member 2 appears already-dead-advanced in the same poll it is first seen → primed silently, no death.
134- var first = tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) , Member ( 2 , death : t0 ) ] ) ) ;
134+ var first = tracker . Diff ( new TeamInfoSnapshot ( 1 , [ Member ( 1 ) , Member ( 2 , death : t0 ) ] ) , DateTimeOffset . UnixEpoch , TimeSpan . FromMinutes ( 5 ) , 1f ) ;
135135 Assert . DoesNotContain ( first , t => t . SteamId == 2 ) ;
136136 }
137137}
0 commit comments