diff options
author | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
---|---|---|
committer | Tianon Gravi <admwiggin@gmail.com> | 2015-01-15 11:54:00 -0700 |
commit | f154da9e12608589e8d5f0508f908a0c3e88a1bb (patch) | |
tree | f8255d51e10c6f1e0ed69702200b966c9556a431 /src/pkg/container/ring/ring_test.go | |
parent | 8d8329ed5dfb9622c82a9fbec6fd99a580f9c9f6 (diff) | |
download | golang-upstream/1.4.tar.gz |
Imported Upstream version 1.4upstream/1.4
Diffstat (limited to 'src/pkg/container/ring/ring_test.go')
-rw-r--r-- | src/pkg/container/ring/ring_test.go | 228 |
1 files changed, 0 insertions, 228 deletions
diff --git a/src/pkg/container/ring/ring_test.go b/src/pkg/container/ring/ring_test.go deleted file mode 100644 index 552f0e24b..000000000 --- a/src/pkg/container/ring/ring_test.go +++ /dev/null @@ -1,228 +0,0 @@ -// Copyright 2009 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 ring - -import ( - "fmt" - "testing" -) - -// For debugging - keep around. -func dump(r *Ring) { - if r == nil { - fmt.Println("empty") - return - } - i, n := 0, r.Len() - for p := r; i < n; p = p.next { - fmt.Printf("%4d: %p = {<- %p | %p ->}\n", i, p, p.prev, p.next) - i++ - } - fmt.Println() -} - -func verify(t *testing.T, r *Ring, N int, sum int) { - // Len - n := r.Len() - if n != N { - t.Errorf("r.Len() == %d; expected %d", n, N) - } - - // iteration - n = 0 - s := 0 - r.Do(func(p interface{}) { - n++ - if p != nil { - s += p.(int) - } - }) - if n != N { - t.Errorf("number of forward iterations == %d; expected %d", n, N) - } - if sum >= 0 && s != sum { - t.Errorf("forward ring sum = %d; expected %d", s, sum) - } - - if r == nil { - return - } - - // connections - if r.next != nil { - var p *Ring // previous element - for q := r; p == nil || q != r; q = q.next { - if p != nil && p != q.prev { - t.Errorf("prev = %p, expected q.prev = %p\n", p, q.prev) - } - p = q - } - if p != r.prev { - t.Errorf("prev = %p, expected r.prev = %p\n", p, r.prev) - } - } - - // Next, Prev - if r.Next() != r.next { - t.Errorf("r.Next() != r.next") - } - if r.Prev() != r.prev { - t.Errorf("r.Prev() != r.prev") - } - - // Move - if r.Move(0) != r { - t.Errorf("r.Move(0) != r") - } - if r.Move(N) != r { - t.Errorf("r.Move(%d) != r", N) - } - if r.Move(-N) != r { - t.Errorf("r.Move(%d) != r", -N) - } - for i := 0; i < 10; i++ { - ni := N + i - mi := ni % N - if r.Move(ni) != r.Move(mi) { - t.Errorf("r.Move(%d) != r.Move(%d)", ni, mi) - } - if r.Move(-ni) != r.Move(-mi) { - t.Errorf("r.Move(%d) != r.Move(%d)", -ni, -mi) - } - } -} - -func TestCornerCases(t *testing.T) { - var ( - r0 *Ring - r1 Ring - ) - // Basics - verify(t, r0, 0, 0) - verify(t, &r1, 1, 0) - // Insert - r1.Link(r0) - verify(t, r0, 0, 0) - verify(t, &r1, 1, 0) - // Insert - r1.Link(r0) - verify(t, r0, 0, 0) - verify(t, &r1, 1, 0) - // Unlink - r1.Unlink(0) - verify(t, &r1, 1, 0) -} - -func makeN(n int) *Ring { - r := New(n) - for i := 1; i <= n; i++ { - r.Value = i - r = r.Next() - } - return r -} - -func sumN(n int) int { return (n*n + n) / 2 } - -func TestNew(t *testing.T) { - for i := 0; i < 10; i++ { - r := New(i) - verify(t, r, i, -1) - } - for i := 0; i < 10; i++ { - r := makeN(i) - verify(t, r, i, sumN(i)) - } -} - -func TestLink1(t *testing.T) { - r1a := makeN(1) - var r1b Ring - r2a := r1a.Link(&r1b) - verify(t, r2a, 2, 1) - if r2a != r1a { - t.Errorf("a) 2-element link failed") - } - - r2b := r2a.Link(r2a.Next()) - verify(t, r2b, 2, 1) - if r2b != r2a.Next() { - t.Errorf("b) 2-element link failed") - } - - r1c := r2b.Link(r2b) - verify(t, r1c, 1, 1) - verify(t, r2b, 1, 0) -} - -func TestLink2(t *testing.T) { - var r0 *Ring - r1a := &Ring{Value: 42} - r1b := &Ring{Value: 77} - r10 := makeN(10) - - r1a.Link(r0) - verify(t, r1a, 1, 42) - - r1a.Link(r1b) - verify(t, r1a, 2, 42+77) - - r10.Link(r0) - verify(t, r10, 10, sumN(10)) - - r10.Link(r1a) - verify(t, r10, 12, sumN(10)+42+77) -} - -func TestLink3(t *testing.T) { - var r Ring - n := 1 - for i := 1; i < 100; i++ { - n += i - verify(t, r.Link(New(i)), n, -1) - } -} - -func TestUnlink(t *testing.T) { - r10 := makeN(10) - s10 := r10.Move(6) - - sum10 := sumN(10) - - verify(t, r10, 10, sum10) - verify(t, s10, 10, sum10) - - r0 := r10.Unlink(0) - verify(t, r0, 0, 0) - - r1 := r10.Unlink(1) - verify(t, r1, 1, 2) - verify(t, r10, 9, sum10-2) - - r9 := r10.Unlink(9) - verify(t, r9, 9, sum10-2) - verify(t, r10, 9, sum10-2) -} - -func TestLinkUnlink(t *testing.T) { - for i := 1; i < 4; i++ { - ri := New(i) - for j := 0; j < i; j++ { - rj := ri.Unlink(j) - verify(t, rj, j, -1) - verify(t, ri, i-j, -1) - ri.Link(rj) - verify(t, ri, i, -1) - } - } -} - -// Test that calling Move() on an empty Ring initializes it. -func TestMoveEmptyRing(t *testing.T) { - var r Ring - - r.Move(1) - verify(t, &r, 1, 0) -} |