xref: /sqlite-3.40.0/test/bitvec.test (revision f5e7bb51)
1# 2008 February 18
2#
3# The author disclaims copyright to this source code.  In place of
4# a legal notice, here is a blessing:
5#
6#    May you do good and not evil.
7#    May you find forgiveness for yourself and forgive others.
8#    May you share freely, never taking more than you give.
9#
10#***********************************************************************
11#
12# Unit testing of the Bitvec object.
13#
14# $Id: bitvec.test,v 1.1 2008/02/18 14:47:34 drh Exp $
15#
16
17set testdir [file dirname $argv0]
18source $testdir/tester.tcl
19
20#ifcapable !subquery {
21#  finish_test
22#  return
23#}
24
25do_test bitvec-1.1 {
26  set PTR [sqlite3BitvecCreate 4000]
27  for {set i 1} {$i<=4000} {incr i} {
28    if {$i%1000==999} continue
29    sqlite3BitvecSet $PTR $i
30  }
31  set r {}
32  for {set i 1} {$i<=4000} {incr i} {
33    if {![sqlite3BitvecTest $PTR $i]} {lappend r $i}
34  }
35  sqlite3BitvecDestroy $PTR
36  set r
37} {999 1999 2999 3999}
38do_test bitvec-1.2 {
39  set PTR [sqlite3BitvecCreate 4001]
40  for {set i 1} {$i<=4001} {incr i} {
41    if {$i%1000==999} continue
42    sqlite3BitvecSet $PTR $i
43  }
44  set r {}
45  for {set i 1} {$i<=4001} {incr i} {
46    if {![sqlite3BitvecTest $PTR $i]} {lappend r $i}
47  }
48  sqlite3BitvecDestroy $PTR
49  set r
50} {999 1999 2999 3999}
51do_test bitvec-1.3 {
52  set PTR [sqlite3BitvecCreate 40000]
53  for {set i 1} {$i<=40000} {incr i} {
54    if {$i%10000==9999} continue
55    sqlite3BitvecSet $PTR $i
56  }
57  set r {}
58  for {set i 1} {$i<=40000} {incr i} {
59    if {![sqlite3BitvecTest $PTR $i]} {lappend r $i}
60  }
61  sqlite3BitvecDestroy $PTR
62  set r
63} {9999 19999 29999 39999}
64do_test bitvec-1.4 {
65  set PTR [sqlite3BitvecCreate 2000000000]
66  for {set i 1000000} {$i<=1001000} {incr i} {
67    if {$i%1000==789} continue
68    sqlite3BitvecSet $PTR $i
69  }
70  set r {}
71  for {set i 1000000} {$i<=1001000} {incr i} {
72    if {![sqlite3BitvecTest $PTR $i]} {lappend r $i}
73  }
74  sqlite3BitvecDestroy $PTR
75  set r
76} {1000789}
77
78do_test bitvec-2.1 {
79  set PTR [sqlite3BitvecCreate 4000]
80  for {set i 1} {$i<=4000} {incr i 2} {
81    sqlite3BitvecSet $PTR $i
82  }
83  for {set i 1} {$i<=4000} {incr i} {
84    sqlite3BitvecClear $PTR $i
85  }
86  set r {}
87  for {set i 1} {$i<=4000} {incr i} {
88    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
89  }
90  sqlite3BitvecDestroy $PTR
91  set r
92} {}
93do_test bitvec-2.2 {
94  set PTR [sqlite3BitvecCreate 4001]
95  for {set i 1} {$i<=101} {incr i 2} {
96    sqlite3BitvecSet $PTR $i
97  }
98  for {set i 1} {$i<=99} {incr i} {
99    sqlite3BitvecClear $PTR $i
100  }
101  set r {}
102  for {set i 1} {$i<=4000} {incr i} {
103    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
104  }
105  sqlite3BitvecDestroy $PTR
106  set r
107} {101}
108do_test bitvec-2.3 {
109  set PTR [sqlite3BitvecCreate 4001]
110  for {set i 1} {$i<=101} {incr i} {
111    sqlite3BitvecSet $PTR $i
112  }
113  for {set i 1} {$i<=99} {incr i} {
114    sqlite3BitvecClear $PTR $i
115  }
116  set r {}
117  for {set i 1} {$i<=4000} {incr i} {
118    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
119  }
120  sqlite3BitvecDestroy $PTR
121  set r
122} {100 101}
123do_test bitvec-2.4 {
124  set PTR [sqlite3BitvecCreate 5000]
125  for {set i 1} {$i<=5000} {incr i} {
126    sqlite3BitvecSet $PTR $i
127    if {$i%1000!=456} {sqlite3BitvecClear $PTR $i}
128  }
129  set r {}
130  for {set i 1} {$i<=5000} {incr i} {
131    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
132  }
133  sqlite3BitvecDestroy $PTR
134  set r
135} {456 1456 2456 3456 4456}
136
137do_test bitvec-3.1 {
138  set PTR [sqlite3BitvecCreate 2000000000]
139  for {set i 2000000} {$i<=3000000} {incr i 100000} {
140    for {set j $i} {$j<=$i+50} {incr j} {
141      sqlite3BitvecSet $PTR $i
142    }
143    for {set j $i} {$j<=$i+50} {incr j} {
144      sqlite3BitvecClear $PTR $i
145    }
146  }
147  set r {}
148  for {set i 2000000} {$i<=3000000} {incr i} {
149    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
150  }
151  sqlite3BitvecDestroy $PTR
152  set r
153} {}
154do_test bitvec-3.2 {
155  set PTR [sqlite3BitvecCreate 200000]
156  for {set i 1000} {$i<=190000} {incr i 10000} {
157    for {set j $i} {$j<=$i+50} {incr j} {
158      sqlite3BitvecSet $PTR $i
159    }
160    for {set j $i} {$j<=$i+50} {incr j} {
161      sqlite3BitvecClear $PTR $i
162    }
163  }
164  set r {}
165  for {set i 1} {$i<=200000} {incr i} {
166    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
167  }
168  sqlite3BitvecDestroy $PTR
169  set r
170} {}
171do_test bitvec-3.3 {
172  set PTR [sqlite3BitvecCreate 200000]
173  for {set i 1000} {$i<=190000} {incr i 10000} {
174    for {set j $i} {$j<=$i+500} {incr j} {
175      sqlite3BitvecSet $PTR $i
176    }
177    for {set j $i} {$j<=$i+500} {incr j} {
178      sqlite3BitvecClear $PTR $i
179    }
180  }
181  set r {}
182  for {set i 1} {$i<=200000} {incr i} {
183    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
184  }
185  sqlite3BitvecDestroy $PTR
186  set r
187} {}
188do_test bitvec-3.4 {
189  set PTR [sqlite3BitvecCreate 2000]
190  for {set i 10} {$i<=1900} {incr i 100} {
191    for {set j $i} {$j<=$i+50} {incr j} {
192      sqlite3BitvecSet $PTR $i
193    }
194    for {set j $i} {$j<=$i+50} {incr j} {
195      sqlite3BitvecClear $PTR $i
196    }
197  }
198  set r {}
199  for {set i 1} {$i<=2000} {incr i} {
200    if {[sqlite3BitvecTest $PTR $i]} {lappend r $i}
201  }
202  sqlite3BitvecDestroy $PTR
203  set r
204} {}
205
206
207finish_test
208