From eeb2ad8daea56ac3cc4f44626d4e71abbaed4b25 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Thu, 14 Aug 2025 14:37:39 +0800 Subject: [PATCH] chore: add more test for TypedValue --- common/atomic/value_test.go | 106 ++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/common/atomic/value_test.go b/common/atomic/value_test.go index d6bc28b4..1697309d 100644 --- a/common/atomic/value_test.go +++ b/common/atomic/value_test.go @@ -44,20 +44,126 @@ func TestTypedValue(t *testing.T) { } } + { + e1, e2, e3 := io.EOF, &os.PathError{}, &os.PathError{} + var v TypedValue[error] + if v.CompareAndSwap(e1, e2) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != nil { + t.Fatalf("Load = (%v), want (%v)", value, nil) + } + if v.CompareAndSwap(nil, e1) != true { + t.Fatalf("CompareAndSwap = false, want true") + } + if value := v.Load(); value != e1 { + t.Fatalf("Load = (%v), want (%v)", value, e1) + } + if v.CompareAndSwap(e2, e3) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != e1 { + t.Fatalf("Load = (%v), want (%v)", value, e1) + } + if v.CompareAndSwap(e1, e2) != true { + t.Fatalf("CompareAndSwap = false, want true") + } + if value := v.Load(); value != e2 { + t.Fatalf("Load = (%v), want (%v)", value, e2) + } + if v.CompareAndSwap(e3, e2) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != e2 { + t.Fatalf("Load = (%v), want (%v)", value, e2) + } + if v.CompareAndSwap(nil, e3) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != e2 { + t.Fatalf("Load = (%v), want (%v)", value, e2) + } + } + { c1, c2, c3 := make(chan struct{}), make(chan struct{}), make(chan struct{}) var v TypedValue[chan struct{}] if v.CompareAndSwap(c1, c2) != false { t.Fatalf("CompareAndSwap = true, want false") } + if value := v.Load(); value != nil { + t.Fatalf("Load = (%v), want (%v)", value, nil) + } if v.CompareAndSwap(nil, c1) != true { t.Fatalf("CompareAndSwap = false, want true") } + if value := v.Load(); value != c1 { + t.Fatalf("Load = (%v), want (%v)", value, c1) + } if v.CompareAndSwap(c2, c3) != false { t.Fatalf("CompareAndSwap = true, want false") } + if value := v.Load(); value != c1 { + t.Fatalf("Load = (%v), want (%v)", value, c1) + } if v.CompareAndSwap(c1, c2) != true { t.Fatalf("CompareAndSwap = false, want true") } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } + if v.CompareAndSwap(c3, c2) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } + if v.CompareAndSwap(nil, c3) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } + } + + { + c1, c2, c3 := &io.LimitedReader{}, &io.SectionReader{}, &io.SectionReader{} + var v TypedValue[io.Reader] + if v.CompareAndSwap(c1, c2) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != nil { + t.Fatalf("Load = (%v), want (%v)", value, nil) + } + if v.CompareAndSwap(nil, c1) != true { + t.Fatalf("CompareAndSwap = false, want true") + } + if value := v.Load(); value != c1 { + t.Fatalf("Load = (%v), want (%v)", value, c1) + } + if v.CompareAndSwap(c2, c3) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != c1 { + t.Fatalf("Load = (%v), want (%v)", value, c1) + } + if v.CompareAndSwap(c1, c2) != true { + t.Fatalf("CompareAndSwap = false, want true") + } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } + if v.CompareAndSwap(c3, c2) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } + if v.CompareAndSwap(nil, c3) != false { + t.Fatalf("CompareAndSwap = true, want false") + } + if value := v.Load(); value != c2 { + t.Fatalf("Load = (%v), want (%v)", value, c2) + } } }