From 16939dafc37a38d2743810a8bdf60fdad6a0f3a3 Mon Sep 17 00:00:00 2001 From: MikeWang Date: Tue, 16 Jan 2024 23:12:18 +0800 Subject: [PATCH] chore(tests): add strict monotonicity test case for uuid v7. (#154) * TestVersion7MonotonicityStrict * reset timeNow and rand --- uuid_test.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/uuid_test.go b/uuid_test.go index 21118cf..c1c6001 100644 --- a/uuid_test.go +++ b/uuid_test.go @@ -896,3 +896,35 @@ func TestVersion7Monotonicity(t *testing.T) { u1 = u2 } } + +type fakeRand struct{} + +func (g fakeRand) Read(bs []byte) (int, error) { + for i, _ := range bs { + bs[i] = 0x88 + } + return len(bs), nil +} + +func TestVersion7MonotonicityStrict(t *testing.T) { + timeNow = func() time.Time { + return time.Date(2008, 8, 8, 8, 8, 8, 8, time.UTC) + } + defer func() { + timeNow = time.Now + }() + + SetRand(fakeRand{}) + defer SetRand(nil) + + length := 100000 // > 3906 + u1 := Must(NewV7()).String() + for i := 0; i < length; i++ { + u2 := Must(NewV7()).String() + if u2 <= u1 { + t.Errorf("monotonicity failed at #%d: %s(next) < %s(before)", i, u2, u1) + break + } + u1 = u2 + } +}