github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/gopkg.in/mgo.v2/queue_test.go (about) 1 // mgo - MongoDB driver for Go 2 // 3 // Copyright (c) 2010-2012 - Gustavo Niemeyer <gustavo@niemeyer.net> 4 // 5 // All rights reserved. 6 // 7 // Redistribution and use in source and binary forms, with or without 8 // modification, are permitted provided that the following conditions are met: 9 // 10 // 1. Redistributions of source code must retain the above copyright notice, this 11 // list of conditions and the following disclaimer. 12 // 2. Redistributions in binary form must reproduce the above copyright notice, 13 // this list of conditions and the following disclaimer in the documentation 14 // and/or other materials provided with the distribution. 15 // 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 20 // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 27 package mgo 28 29 import ( 30 . "gopkg.in/check.v1" 31 ) 32 33 type QS struct{} 34 35 var _ = Suite(&QS{}) 36 37 func (s *QS) TestSequentialGrowth(c *C) { 38 q := queue{} 39 n := 2048 40 for i := 0; i != n; i++ { 41 q.Push(i) 42 } 43 for i := 0; i != n; i++ { 44 c.Assert(q.Pop(), Equals, i) 45 } 46 } 47 48 var queueTestLists = [][]int{ 49 // {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 50 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, 51 52 // {8, 9, 10, 11, ... 2, 3, 4, 5, 6, 7} 53 {0, 1, 2, 3, 4, 5, 6, 7, -1, -1, 8, 9, 10, 11}, 54 55 // {8, 9, 10, 11, ... 2, 3, 4, 5, 6, 7} 56 {0, 1, 2, 3, -1, -1, 4, 5, 6, 7, 8, 9, 10, 11}, 57 58 // {0, 1, 2, 3, 4, 5, 6, 7, 8} 59 {0, 1, 2, 3, 4, 5, 6, 7, 8, 60 -1, -1, -1, -1, -1, -1, -1, -1, -1, 61 0, 1, 2, 3, 4, 5, 6, 7, 8}, 62 } 63 64 func (s *QS) TestQueueTestLists(c *C) { 65 test := []int{} 66 testi := 0 67 reset := func() { 68 test = test[0:0] 69 testi = 0 70 } 71 push := func(i int) { 72 test = append(test, i) 73 } 74 pop := func() (i int) { 75 if testi == len(test) { 76 return -1 77 } 78 i = test[testi] 79 testi++ 80 return 81 } 82 83 for _, list := range queueTestLists { 84 reset() 85 q := queue{} 86 for _, n := range list { 87 if n == -1 { 88 c.Assert(q.Pop(), Equals, pop(), Commentf("With list %#v", list)) 89 } else { 90 q.Push(n) 91 push(n) 92 } 93 } 94 95 for n := pop(); n != -1; n = pop() { 96 c.Assert(q.Pop(), Equals, n, Commentf("With list %#v", list)) 97 } 98 99 c.Assert(q.Pop(), Equals, nil, Commentf("With list %#v", list)) 100 } 101 }