From: Jason Wangsadinata Date: Tue, 24 Oct 2017 19:26:46 +0000 (+0700) Subject: container/ring: add examples for various Ring functions X-Git-Tag: go1.10beta1~602 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=bbafa21b37f6e857bfde9e4221a1e2d0fa71e74d;p=gostls13.git container/ring: add examples for various Ring functions Change-Id: I6b16cfcbe824f999c9b64df539deea567e327db7 Reviewed-on: https://go-review.googlesource.com/73090 Reviewed-by: Gabriel Aszalos Reviewed-by: Jason Wangsadinata Reviewed-by: Ian Lance Taylor Run-TryBot: Gabriel Aszalos --- diff --git a/src/container/ring/example_test.go b/src/container/ring/example_test.go new file mode 100644 index 0000000000..ebea1e2713 --- /dev/null +++ b/src/container/ring/example_test.go @@ -0,0 +1,174 @@ +// Copyright 2017 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_test + +import ( + "container/ring" + "fmt" +) + +func ExampleRing_Len() { + // Create a new ring of size 4 + r := ring.New(4) + + // Print out its length + fmt.Println(r.Len()) + + // Output: + // 4 +} + +func ExampleRing_Next() { + // Create a new ring of size 5 + r := ring.New(5) + + // Initialize the ring with some integer values + for i := 0; i < r.Len(); i++ { + r.Value = i + r = r.Next() + } + + // Iterate through the ring and print its contents + for j := 0; j < r.Len(); j++ { + fmt.Println(r.Value) + r = r.Next() + } + + // Output: + // 0 + // 1 + // 2 + // 3 + // 4 +} + +func ExampleRing_Prev() { + // Create a new ring of size 5 + r := ring.New(5) + + // Initialize the ring with some integer values + for i := 0; i < r.Len(); i++ { + r.Value = i + r = r.Next() + } + + // Iterate through the ring backwards and print its contents + for j := 0; j < r.Len(); j++ { + r = r.Prev() + fmt.Println(r.Value) + } + + // Output: + // 4 + // 3 + // 2 + // 1 + // 0 +} + +func ExampleRing_Do() { + // Create a new ring of size 5 + r := ring.New(5) + + // Initialize the ring with some integer values + for i := 0; i < r.Len(); i++ { + r.Value = i + r = r.Next() + } + + // Iterate through the ring and print its contents + r.Do(func(p interface{}) { + fmt.Println(p.(int)) + }) + + // Output: + // 0 + // 1 + // 2 + // 3 + // 4 +} + +func ExampleRing_Move() { + // Create a new ring of size 5 + r := ring.New(5) + + // Initialize the ring with some integer values + for i := 0; i < r.Len(); i++ { + r.Value = i + r = r.Next() + } + + // Move the pointer forward by three steps + r = r.Move(3) + + // Iterate through the ring and print its contents + r.Do(func(p interface{}) { + fmt.Println(p.(int)) + }) + + // Output: + // 3 + // 4 + // 0 + // 1 + // 2 +} + +func ExampleRing_Link() { + // Create two rings, r and s, of size 2 + r := ring.New(2) + s := ring.New(2) + + // Initialize r with 0s + for i := 0; i < r.Len(); i++ { + r.Value = 0 + r = r.Next() + } + + // Initialize s with 1s + for j := 0; j < s.Len(); j++ { + s.Value = 1 + s = s.Next() + } + + // Link ring r and ring s + rs := r.Link(s) + + // Iterate through the combined ring and print its contents + rs.Do(func(p interface{}) { + fmt.Println(p.(int)) + }) + + // Output: + // 0 + // 0 + // 1 + // 1 +} + +func ExampleRing_Unlink() { + // Create a new ring of size 6 + r := ring.New(6) + + // Initialize the ring with some integer values + for i := 0; i < r.Len(); i++ { + r.Value = i + r = r.Next() + } + + // Unlink three elements from r, starting from r.Next() + r.Unlink(3) + + // Iterate through the remaining ring and print its contents + r.Do(func(p interface{}) { + fmt.Println(p.(int)) + }) + + // Output: + // 0 + // 4 + // 5 +}