1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
12 // For debugging - keep around.
19 for p
:= r
; i
< n
; p
= p
.next
{
20 fmt
.Printf("%4d: %p = {<- %p | %p ->}\n", i
, p
, p
.prev
, p
.next
)
26 func verify(t
*testing
.T
, r
*Ring
, N
int, sum
int) {
30 t
.Errorf("r.Len() == %d; expected %d", n
, N
)
36 r
.Do(func(p
interface{}) {
43 t
.Errorf("number of forward iterations == %d; expected %d", n
, N
)
45 if sum
>= 0 && s
!= sum
{
46 t
.Errorf("forward ring sum = %d; expected %d", s
, sum
)
55 var p
*Ring
// previous element
56 for q
:= r
; p
== nil || q
!= r
; q
= q
.next
{
57 if p
!= nil && p
!= q
.prev
{
58 t
.Errorf("prev = %p, expected q.prev = %p\n", p
, q
.prev
)
63 t
.Errorf("prev = %p, expected r.prev = %p\n", p
, r
.prev
)
68 if r
.Next() != r
.next
{
69 t
.Errorf("r.Next() != r.next")
71 if r
.Prev() != r
.prev
{
72 t
.Errorf("r.Prev() != r.prev")
77 t
.Errorf("r.Move(0) != r")
80 t
.Errorf("r.Move(%d) != r", N
)
83 t
.Errorf("r.Move(%d) != r", -N
)
85 for i
:= 0; i
< 10; i
++ {
88 if r
.Move(ni
) != r
.Move(mi
) {
89 t
.Errorf("r.Move(%d) != r.Move(%d)", ni
, mi
)
91 if r
.Move(-ni
) != r
.Move(-mi
) {
92 t
.Errorf("r.Move(%d) != r.Move(%d)", -ni
, -mi
)
97 func TestCornerCases(t
*testing
.T
) {
118 func makeN(n
int) *Ring
{
120 for i
:= 1; i
<= n
; i
++ {
127 func sumN(n
int) int { return (n
*n
+ n
) / 2 }
129 func TestNew(t
*testing
.T
) {
130 for i
:= 0; i
< 10; i
++ {
134 for i
:= 0; i
< 10; i
++ {
136 verify(t
, r
, i
, sumN(i
))
140 func TestLink1(t
*testing
.T
) {
143 r2a
:= r1a
.Link(&r1b
)
146 t
.Errorf("a) 2-element link failed")
149 r2b
:= r2a
.Link(r2a
.Next())
151 if r2b
!= r2a
.Next() {
152 t
.Errorf("b) 2-element link failed")
160 func TestLink2(t
*testing
.T
) {
162 r1a
:= &Ring
{Value
: 42}
163 r1b
:= &Ring
{Value
: 77}
167 verify(t
, r1a
, 1, 42)
170 verify(t
, r1a
, 2, 42+77)
173 verify(t
, r10
, 10, sumN(10))
176 verify(t
, r10
, 12, sumN(10)+42+77)
179 func TestLink3(t
*testing
.T
) {
182 for i
:= 1; i
< 100; i
++ {
184 verify(t
, r
.Link(New(i
)), n
, -1)
188 func TestUnlink(t
*testing
.T
) {
194 verify(t
, r10
, 10, sum10
)
195 verify(t
, s10
, 10, sum10
)
202 verify(t
, r10
, 9, sum10
-2)
205 verify(t
, r9
, 9, sum10
-2)
206 verify(t
, r10
, 9, sum10
-2)
209 func TestLinkUnlink(t
*testing
.T
) {
210 for i
:= 1; i
< 4; i
++ {
212 for j
:= 0; j
< i
; j
++ {
215 verify(t
, ri
, i
-j
, -1)