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 / cmd / stringer / util_test.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/stringer/util_test.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/cmd/stringer/util_test.go
new file mode 100644 (file)
index 0000000..2e304c1
--- /dev/null
@@ -0,0 +1,77 @@
+// 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.
+
+// This file contains tests for some of the internal functions.
+
+package main
+
+import (
+       "fmt"
+       "testing"
+)
+
+// Helpers to save typing in the test cases.
+type u []uint64
+type uu [][]uint64
+
+type SplitTest struct {
+       input  u
+       output uu
+       signed bool
+}
+
+var (
+       m2  = uint64(2)
+       m1  = uint64(1)
+       m0  = uint64(0)
+       m_1 = ^uint64(0)     // -1 when signed.
+       m_2 = ^uint64(0) - 1 // -2 when signed.
+)
+
+var splitTests = []SplitTest{
+       // No need for a test for the empty case; that's picked off before splitIntoRuns.
+       // Single value.
+       {u{1}, uu{u{1}}, false},
+       // Out of order.
+       {u{3, 2, 1}, uu{u{1, 2, 3}}, true},
+       // Out of order.
+       {u{3, 2, 1}, uu{u{1, 2, 3}}, false},
+       // A gap at the beginning.
+       {u{1, 33, 32, 31}, uu{u{1}, u{31, 32, 33}}, true},
+       // A gap in the middle, in mixed order.
+       {u{33, 7, 32, 31, 9, 8}, uu{u{7, 8, 9}, u{31, 32, 33}}, true},
+       // Gaps throughout
+       {u{33, 44, 1, 32, 45, 31}, uu{u{1}, u{31, 32, 33}, u{44, 45}}, true},
+       // Unsigned values spanning 0.
+       {u{m1, m0, m_1, m2, m_2}, uu{u{m0, m1, m2}, u{m_2, m_1}}, false},
+       // Signed values spanning 0
+       {u{m1, m0, m_1, m2, m_2}, uu{u{m_2, m_1, m0, m1, m2}}, true},
+}
+
+func TestSplitIntoRuns(t *testing.T) {
+Outer:
+       for n, test := range splitTests {
+               values := make([]Value, len(test.input))
+               for i, v := range test.input {
+                       values[i] = Value{"", "", v, test.signed, fmt.Sprint(v)}
+               }
+               runs := splitIntoRuns(values)
+               if len(runs) != len(test.output) {
+                       t.Errorf("#%d: %v: got %d runs; expected %d", n, test.input, len(runs), len(test.output))
+                       continue
+               }
+               for i, run := range runs {
+                       if len(run) != len(test.output[i]) {
+                               t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
+                               continue Outer
+                       }
+                       for j, v := range run {
+                               if v.value != test.output[i][j] {
+                                       t.Errorf("#%d: got %v; expected %v", n, runs, test.output)
+                                       continue Outer
+                               }
+                       }
+               }
+       }
+}