Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / container / intsets / util_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/container/intsets/util_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/container/intsets/util_test.go
new file mode 100644 (file)
index 0000000..e4cc659
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package intsets
+
+import (
+       "math/rand"
+       "testing"
+)
+
+func TestNLZ(t *testing.T) {
+       // Test the platform-specific edge case.
+       // NB: v must be a var (not const) so that the word() conversion is dynamic.
+       // Otherwise the compiler will report an error.
+       v := uint64(0x0000801000000000)
+       n := nlz(word(v))
+       want := 32 // (on 32-bit)
+       if bitsPerWord == 64 {
+               want = 16
+       }
+       if n != want {
+               t.Errorf("%d-bit nlz(%d) = %d, want %d", bitsPerWord, v, n, want)
+       }
+}
+
+// Backdoor for testing.
+func (s *Sparse) Check() error { return s.check() }
+
+func dumbPopcount(x word) int {
+       var popcnt int
+       for i := uint(0); i < bitsPerWord; i++ {
+               if x&(1<<i) != 0 {
+                       popcnt++
+               }
+       }
+       return popcnt
+}
+
+func TestPopcount(t *testing.T) {
+       for i := 0; i < 1e5; i++ {
+               x := word(rand.Uint32())
+               if bitsPerWord == 64 {
+                       x = x | (word(rand.Uint32()) << 32)
+               }
+               want := dumbPopcount(x)
+               got := popcount(x)
+               if got != want {
+                       t.Errorf("popcount(%d) = %d, want %d", x, got, want)
+               }
+       }
+}
+
+func BenchmarkPopcount(b *testing.B) {
+       for i := 0; i < b.N; i++ {
+               popcount(word(i))
+       }
+}