github.com/olivere/camlistore@v0.0.0-20140121221811-1b7ac2da0199/third_party/labix.org/v2/mgo/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 "camlistore.org/third_party/launchpad.net/gocheck" 31 ) 32 33 type QS struct{} 34 35 var _ = gocheck.Suite(&QS{}) 36 37 func (s *QS) TestSequentialGrowth(c *gocheck.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(), gocheck.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 *gocheck.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(), gocheck.Equals, pop(), 89 gocheck.Commentf("With list %#v", list)) 90 } else { 91 q.Push(n) 92 push(n) 93 } 94 } 95 96 for n := pop(); n != -1; n = pop() { 97 c.Assert(q.Pop(), gocheck.Equals, n, 98 gocheck.Commentf("With list %#v", list)) 99 } 100 101 c.Assert(q.Pop(), gocheck.Equals, nil, 102 gocheck.Commentf("With list %#v", list)) 103 } 104 }