package sync import ( "testing" ) func TestTick_StrictlyMonotonic(t *testing.T) { // Reset global state. clock.mu.Lock() clock.last = 0 clock.mu.Unlock() prev := int64(0) for i := 0; i < 1000; i++ { v := Tick(0) if v <= prev { t.Fatalf("iteration %d: Tick() = %d, want > %d", i, v, prev) } prev = v } } func TestTick_CausalOrdering(t *testing.T) { clock.mu.Lock() clock.last = 0 clock.mu.Unlock() // Simulate a client HLC far in the future. future := int64(9_999_999_999) << counterBits v := Tick(future) if !After(v, future) { t.Fatalf("Tick(future) = %d, want > %d", v, future) } } func TestTick_NoDuplicates(t *testing.T) { clock.mu.Lock() clock.last = 0 clock.mu.Unlock() seen := make(map[int64]bool) for i := 0; i < 10_000; i++ { v := Tick(0) if seen[v] { t.Fatalf("duplicate HLC value %d at iteration %d", v, i) } seen[v] = true } } func TestAfter(t *testing.T) { if !After(2, 1) { t.Fatal("After(2,1) must be true") } if After(1, 2) { t.Fatal("After(1,2) must be false") } if After(1, 1) { t.Fatal("After(1,1) must be false") } }