/[webpac]/openisis/current/tcl/test/testrec.tcl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /openisis/current/tcl/test/testrec.tcl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 237 - (hide annotations)
Mon Mar 8 17:43:12 2004 UTC (20 years, 1 month ago) by dpavlin
File MIME type: application/x-tcl
File size: 7887 byte(s)
initial import of openisis 0.9.0 vendor drop

1 dpavlin 237 #!/opt/openisis/tcl/bin/isish
2     #
3     # openisis - an open implementation of the ISIS database
4     # Version 0.8.x (microversion see file Version)
5     # Copyright (C) 2003 by Erik Grziwotz, erik@openisis.org
6     #
7     # This library is free software; you can redistribute it and/or
8     # modify it under the terms of the GNU Lesser General Public
9     # License as published by the Free Software Foundation; either
10     # version 2.1 of the License, or (at your option) any later version.
11     #
12     # This library is distributed in the hope that it will be useful,
13     # but WITHOUT ANY WARRANTY; without even the implied warranty of
14     # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15     # Lesser General Public License for more details.
16     #
17     # You should have received a copy of the GNU Lesser General Public
18     # License along with this library; if not, write to the Free Software
19     # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     #
21     # This software is dedicated to the memory of Eckart Dietrich.
22     #
23     # This software is inspired by (but contains no code of) the iAPI
24     # Copyright (C) 2000 by Robert Janusz, rj@jezuici.krakow.pl.
25     # See iAPI.txt for what it contains.
26     #
27     # $Id: testrec.tcl,v 1.9 2003/06/24 10:54:32 mawag Exp $
28     # test script for record commands
29    
30     proc checklst {msg exp got} {
31     if [catch {
32     set len1 [llength $exp]
33     set len2 [llength $got]
34     if {$len1 != $len2} {
35     puts "ERR $msg: length != $len1"
36     puts "REC = $got"
37     exit 1
38     }
39     for {set j 0} {$len1 > $j} {incr j} {
40     set gg [lindex $got $j]
41     set ee [lindex $exp $j]
42     if {! [string equal $gg $ee]} {
43     puts "ERR $msg: got\[$j] = $gg, exp = $ee"
44     puts "REC = $got"
45     exit 1
46     }
47     }
48     }] {
49     global errorInfo
50     puts $errorInfo
51     puts "REC = $got"
52     exit 1
53     }
54     }
55    
56     proc checkrec {msg cmd tag val} {
57     set lst ""
58     set tlst ""
59     if [catch {
60     set lst [$cmd get]
61     set tlst [$cmd get -tags]
62     set len [llength $val]
63     if {[llength $lst] != $len} {
64     puts "ERR $msg: got len = [llength $lst], exp = $len"
65     puts "REC = $tlst"
66     exit 1
67     }
68     for {set j 0} {$len > $j} {incr j} {
69     set got [lindex $lst $j]
70     set exp [lindex $val $j]
71     if {! [string equal $got $exp]} {
72     puts "ERR $msg: rec\[$j] = $got, exp = $exp"
73     puts "REC = $tlst"
74     exit 1
75     }
76     set fld [lindex $tag $j]
77     set got [$cmd get $fld]
78     if {! [string equal $got $exp]} {
79     puts "ERR $msg: tag $fld = $got, exp = $exp"
80     puts "REC = $tlst"
81     exit 1
82     }
83     }
84     }] {
85     global errorInfo
86     puts $errorInfo
87     puts "REC = $tlst"
88     exit 1
89     }
90     }
91    
92     set nn 1
93     set mm 1
94     switch $argc {
95     0 {}
96     1 { set nn [lindex $argv 0] }
97     default { set nn [lindex $argv 0]; set mm [lindex $argv 1] }
98     }
99    
100     for {set n $nn} {0 != $n} {incr n -1} {
101     # -fdt option
102     set fd [openIsisRec {} add 860 1 862 0 866 name 867 desc]
103     set fdt [openIsisRec {} wrap -done -tag 881 $fd]
104     $fdt add 880 1
105     set cmd [openIsisRec -fdt $fdt]
106     set len [$cmd fdt get 880]
107     if {1 != $len} {
108     puts "ERR fdt len = $len"
109     puts "FDT = [$cmd fdt get -tags]"
110     exit 1
111     }
112     set fd2 [$cmd fdt .881]
113     checkrec fd $fd2 {860 862 863 865 866 867} {1 0 0 0 name desc}
114     $fd2 done
115     $fdt done
116     $cmd done
117    
118     set cmd [openIsisRec]
119     checkrec "ctor1" $cmd {} {}
120     for {set m $mm} {0 != $m} {incr m -1} {
121    
122     # add field value ?field value ...?
123     $cmd add 11 22
124     checkrec add1 $cmd 11 22
125     $cmd add 33 44 55 66 77 88
126     checkrec add2 $cmd {11 33 55 77} {22 44 66 88}
127     $cmd add 33 333 77 777 33 3333
128     checkrec add3 $cmd {11 33\[0] 55 77\[0] 33\[1] 77\[1] 33\[2]} \
129     {22 44 66 88 333 777 3333}
130    
131     # clone ?options? newname ?field value ...?
132     set clone [$cmd clone]
133     checkrec clone1 $clone {11 33\[0] 55 77\[0] 33\[1] 77\[1] 33\[2]} \
134     {22 44 66 88 333 777 3333}
135     $clone done
136     set clone [$cmd clone -empty]
137     checkrec clone2 $clone {} {}
138     $clone done
139     set clone [$cmd clone - 99 999 77\[1\] 7171]
140     if [string compare -length 11 $clone openIsisRec] {
141     puts "ERR clone3: recname = $clone"
142     exit 1
143     }
144     checkrec clone3 $clone {11 33\[0] 55 77\[0] 33\[1] 77\[1] 33\[2] 99} \
145     {22 44 66 88 333 7171 3333 999}
146     $clone done
147     set clone [$cmd clone -empty bla 99 999 77\[0\] 7171]
148     if ![string equal $clone bla] {
149     puts "ERR clone4: recname = $clone"
150     exit 1
151     }
152     checkrec clone4 $clone {99 77} {999 7171}
153     $clone done
154    
155     # copy source
156     # db ?options?
157     # fdt ?options?
158     # see teststb.tcl
159    
160     # delete ?field ...?
161     $cmd dele 77\[0] 33\[1]
162     checkrec del1 $cmd {11 33\[0] 55 77 33\[1]} \
163     {22 44 66 777 3333}
164     $cmd delete
165     checkrec del2 $cmd {} {}
166    
167     $cmd add 11 22 33 44 55 66 33 333 33 3333 11 111
168     checkrec add4 $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1]} \
169     {22 44 66 333 3333 111}
170    
171     # deserialize line, serialize
172     set ser [$cmd seri]
173     $cmd dele
174     checkrec del3 $cmd {} {}
175     $cmd deser $ser
176     checkrec deser $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1]} \
177     {22 44 66 333 3333 111}
178    
179     # do ?tagvar? valvar body
180     $cmd do t v {
181     set t1 [string range $t 0 1]
182     if {11 == $t1 || 55 == $t1} {
183     $cmd add $t1 $v$v
184     }
185     }
186     checkrec do $cmd {11\[0] 33\[0] 55\[0] 33\[1] 33\[2] 11\[1]
187     11\[2] 55\[1] 11\[3]} \
188     {22 44 66 333 3333 111 2222 6666 111111}
189    
190     # get ?field ...?
191     set third [$cmd get 33]
192     if ![string equal {44 333 3333} "$third"] {
193     puts "ERR get1: rec\[33] = $third"
194     exit 1
195     }
196     set got [$cmd get {888 8181}]
197     if ![string equal 8181 $got] {
198     puts "ERR getdflt: rec\[888] = $got"
199     exit 1
200     }
201     set got [$cmd get]
202     checklst get2 {22 44 66 333 3333 111 2222 6666 111111} $got
203     set got [$cmd get -tag]
204     checklst get3 {
205     11 22
206     33 44
207     55 66
208     33 333
209     33 3333
210     11 111
211     11 2222
212     55 6666
213     11 111111
214     } $got
215    
216     # set field ?value field value ...?
217     $cmd set 55 5555 77 88 33\[1] 3131
218     checkrec set $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1]
219     11\[2] 11\[3] 77} \
220     {22 44 5555 3131 3333 111 2222 111111 88}
221    
222     # wrap ?options? recname
223     set emb [openIsisRec emb set 111 aaa 112 bbb 111 ccc]
224     if ![string equal $emb emb] {
225     puts "ERR emb: recname = $emb"
226     exit 1
227     }
228     checkrec ctor2 $emb {111\[0] 112 111\[1]} {aaa bbb ccc}
229     $cmd wrap -tag 999 $emb
230     checkrec wrap1 $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1]
231     11\[2] 11\[3] 77 999 111\[0] 112 111\[1]} \
232     {22 44 5555 3131 3333 111 2222 111111 88 3 aaa bbb ccc}
233     $cmd wrap -tag 888 -num 42 $emb
234     checkrec wrap2 $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1]
235     11\[2] 11\[3] 77 999 111\[0] 112\[0] 111\[1] 888
236     111\[2] 112\[1] 111\[3]} {22 44 5555 3131 3333 111 2222 111111 88
237     3 aaa bbb ccc 42 aaa bbb ccc}
238     $emb set 112 ddd
239     $cmd wrap -done -tag 999 $emb
240     checkrec wrap3 $cmd {11\[0] 33\[0] 55 33\[1] 33\[2] 11\[1] 11\[2]
241     11\[3] 77 999\[0] 111\[0] 112\[0] 111\[1] 888 111\[2] 112\[1]
242     111\[3] 999\[1] 111\[4] 112\[2] 111\[5]} {
243     22 44 5555 3131 3333 111 2222 111111 88
244     3 aaa bbb ccc 42 aaa bbb ccc 3 aaa ddd ccc}
245     if [catch {$emb get}] {} {
246     puts "ERR done1"
247     exit 1
248     }
249    
250     # .path ?option arg ...?
251     set emb [$cmd .999]
252     checkrec path1 $emb {111\[0] 112 111\[1]} {aaa bbb ccc}
253     $emb done
254     set emb [$cmd .999\[1\]]
255     checkrec path2 $emb {111\[0] 112 111\[1]} {aaa ddd ccc}
256     $emb done
257     set emb [$cmd .999\[1\] get 112]
258     if ![string equal ddd $emb] {
259     puts "ERR path2: got = $emb"
260     exit 1
261     }
262     $cmd .999\[1\] do t v { set x $v }
263     $cmd .999\[1\] add 42 43 44 45
264     set emb [$cmd .999\[1\] clone emb]
265     if ![string equal $emb emb] {
266     puts "ERR path3: recname = $emb"
267     exit 1
268     }
269     checkrec path3 $emb {111\[0] 112 111\[1]} {aaa ddd ccc}
270     $emb done
271    
272     if {! [expr $m % 1000]} {
273     puts "$n $m ..."
274     }
275     $cmd dele
276    
277     # large argc
278     set tag [list]
279     set val [list]
280     for {set j 0} {529 >= $j} {incr j} {
281     $cmd add 433 blabla$j
282     lappend tag 433\[$j]
283     lappend val blabla$j
284     }
285     set cmd2 [openIsisRec]
286     eval $cmd2 add [$cmd get -tags]
287     checkrec argc $cmd2 $tag $val
288     $cmd dele
289     $cmd2 done
290     unset tag val
291     }
292    
293     # done
294     $cmd done
295     if [catch {$cmd get}] {} {
296     puts "ERR done2"
297     exit 1
298     }
299    
300     if {1000 > $mm && ! [expr $n % 1000]} {
301     puts "$n ..."
302     }
303     }
304    
305     puts "ok."
306    

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.26