Move the imported perl-based test file our of the way.
[dbm-dynpmcs:dbm-dynpmcs.git] / t / old / gdbmhash.t
1 #! perl
2 # Copyright (C) 2005-2008, Parrot Foundation.
3 # $Id: gdbmhash.t 37201 2009-03-08 12:07:48Z fperrad $
4
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test;
10 use Parrot::Config;
11
12 =head1 NAME
13
14 t/dynpmc/gdbmhash.t - test the GDBMHash PMC
15
16 =head1 SYNOPSIS
17
18     % prove t/dynpmc/gdbmhash.t
19
20 =head1 DESCRIPTION
21
22 Tests the C<GDBMHash> PMC.
23
24 =cut
25
26 if ( $PConfig{has_gdbm} ) {
27     plan tests => 13;
28 }
29 else {
30     plan skip_all => "No gdbm library available";
31 }
32
33 # PIR fragment for setting up a GDBM Hash
34 my $new_hash_1 = << 'CODE';
35 .sub test :main
36     .local pmc gdbmhash_lib
37     gdbmhash_lib = loadlib "gdbmhash"
38     .local pmc hash_1
39     hash_1 = new "GDBMHash"
40 CODE
41
42 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "typeof" );
43
44     .local string type
45     type = typeof hash_1
46     print type
47     print "\n"
48 .end
49 CODE
50 GDBMHash
51 OUTPUT
52 unlink('gdbm_hash_1');
53
54 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "check whether interface is done" );
55     .local int bool1
56     does bool1, hash_1, "scalar"
57     print bool1
58     print "\n"
59     does bool1, hash_1, "hash"
60     print bool1
61     print "\n"
62     does bool1, hash_1, "no_interface"
63     print bool1
64     print "\n"
65 .end
66 CODE
67 0
68 1
69 0
70 OUTPUT
71 unlink('gdbm_hash_1');
72
73 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "get_integer" );
74     .local int hash_size
75     hash_size = hash_1
76     print "An unitialized GDBMHash has size "
77     print hash_size
78     print ".\n"
79
80     hash_1 = "gdbm_hash_1"
81     hash_size = hash_1
82     print "An GDBMHash for a new file has size "
83     print hash_size
84     print ".\n"
85
86     hash_1["key1"] = "val1"
87     hash_size = hash_1
88     print "After one assignment GDBMHash has size "
89     print hash_size
90     print ".\n"
91
92     hash_1["key2"] = "val2"
93     hash_size = hash_1
94     print "After two assignments GDBMHash has size "
95     print hash_size
96     print ".\n"
97
98     hash_1["key3"] = "val3"
99     hash_1["key4"] = "val4"
100     hash_1["key5"] = "val5"
101     hash_1["key6"] = "val6"
102     hash_1["key7"] = "val7"
103     hash_1["key8"] = "val8"
104     hash_1["key9"] = "val9"
105     hash_1["key10"] = "val10"
106     hash_1["key11"] = "val11"
107     hash_1["key12"] = "val12"
108     hash_1["key13"] = "val13"
109     hash_1["key14"] = "val14"
110     hash_1["key15"] = "val15"
111     hash_size = hash_1
112     print "After 15 assignments GDBMHash has size "
113     print hash_size
114     print ".\n"
115
116     delete hash_1["key7"]
117     delete hash_1["key9"]
118
119     hash_size = hash_1
120     print "After 15 assignments and 2 deletes GDBMHash has size "
121     print hash_size
122     print ".\n"
123
124
125 .end
126 CODE
127 An unitialized GDBMHash has size 0.
128 An GDBMHash for a new file has size 0.
129 After one assignment GDBMHash has size 1.
130 After two assignments GDBMHash has size 2.
131 After 15 assignments GDBMHash has size 15.
132 After 15 assignments and 2 deletes GDBMHash has size 13.
133 OUTPUT
134 unlink('gdbm_hash_1');
135
136 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "get_bool" );
137     print "An uninitialized GDBMHash is"
138     if hash_1 goto HASH1_IS_1
139     print " not"
140 HASH1_IS_1:
141     print ".\n"
142
143     hash_1 = "gdbm_hash_1"
144     print "An GDBMHash for a new file is"
145     if hash_1 goto HASH1_IS_2
146     print " not"
147 HASH1_IS_2:
148     print ".\n"
149
150     hash_1["key1"] = "val1"
151     print "After one insert the GDBMHash is"
152     if hash_1 goto HASH1_IS_3
153     print " not"
154 HASH1_IS_3:
155     print ".\n"
156
157 .end
158 CODE
159 An uninitialized GDBMHash is not.
160 An GDBMHash for a new file is not.
161 After one insert the GDBMHash is.
162 OUTPUT
163 unlink('gdbm_hash_1');
164
165 # The value is a STRING, with umlaut
166 # The key used for insertion is a STRING.
167 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "modify an entry" );
168     hash_1 = "gdbm_hash_1"
169
170     .local pmc    val_pmc
171
172     hash_1["Schluessel"] = "Wert urspruenglich\n"
173     val_pmc = hash_1["Schluessel"]
174     print val_pmc
175     hash_1["Schluessel"] = "Wert geaendert\n"
176     val_pmc = hash_1["Schluessel"]
177     print val_pmc
178     hash_1["Schluessel"] = "Wert nocheinmal geaendert\n"
179     val_pmc = hash_1["Schluessel"]
180     print val_pmc
181     hash_1["Schluessel"] = "Wert urspruenglich\n"
182     val_pmc = hash_1["Schluessel"]
183     print val_pmc
184 .end
185 CODE
186 Wert urspruenglich
187 Wert geaendert
188 Wert nocheinmal geaendert
189 Wert urspruenglich
190 OUTPUT
191 unlink('gdbm_hash_1');
192
193 # The value is a STRING.
194 # The key used for insertion is a STRING.
195 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "exists_keyed" );
196     hash_1 = "gdbm_hash_1"
197
198     hash_1["Schluessel"] = "Wert\n"
199
200     .local int exist_flag
201     exist_flag = exists hash_1["a"]
202     print exist_flag
203     print "\n"
204     exist_flag = exists hash_1["Schluessel"]
205     print exist_flag
206     print "\n"
207
208     .local pmc key_out
209     key_out = new 'String'
210     key_out = "b"
211     exist_flag = exists hash_1[key_out]
212     print exist_flag
213     print "\n"
214     key_out = "Schluessel"
215     exist_flag = exists hash_1[key_out]
216     print exist_flag
217     print "\n"
218 .end
219 CODE
220 0
221 1
222 0
223 1
224 OUTPUT
225 unlink('gdbm_hash_1');
226
227 # The value is a STRING.
228 # The key used for insertion is a STRING.
229 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set STRING with STRING key" );
230     hash_1 = "gdbm_hash_1"
231
232     hash_1["Schluessel"] = "Wert\n"
233
234     .local pmc    val_pmc
235     .local string val_string
236
237     val_string = hash_1["Schluessel"]
238     print val_string
239     val_pmc = hash_1["Schluessel"]
240     print val_pmc
241     .local pmc key_out
242     key_out = new 'String'
243     key_out = "Schluessel"
244     val_string = hash_1[key_out]
245     print val_string
246     val_pmc = hash_1[key_out]
247     print val_pmc
248 .end
249 CODE
250 Wert
251 Wert
252 Wert
253 Wert
254 OUTPUT
255 unlink('gdbm_hash_1');
256
257 # The value is a STRING.
258 # The key used for insertion is a PMC.
259 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set STRING with a PMC key" );
260     hash_1 = "gdbm_hash_1"
261
262     .local pmc key_pmc
263     key_pmc = new 'String'
264     key_pmc = "Schluessel"
265     hash_1[key_pmc] = "Wert\n"
266
267     .local pmc    val_pmc
268     .local string val_string
269
270     val_string = hash_1["Schluessel"]
271     print val_string
272     val_pmc = hash_1["Schluessel"]
273     print val_pmc
274     .local pmc key2
275     key2 = new 'String'
276     key2 = "Schluessel"
277     val_string = hash_1[key2]
278     print val_string
279     val_pmc = hash_1[key2]
280     print val_pmc
281 .end
282 CODE
283 Wert
284 Wert
285 Wert
286 Wert
287 OUTPUT
288 unlink('gdbm_hash_1');
289
290 # The value is a PMC.
291 # The key used for insertion is a STRING.
292 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set PMC with STRING key" );
293     hash_1 = "gdbm_hash_1"
294
295     .local pmc val
296     val = new 'String'
297     val = "Wert\n"
298     hash_1["Schluessel"] = val
299
300     .local pmc    val_pmc
301     .local string val_string
302
303     val_string = hash_1["Schluessel"]
304     print val_string
305     val_pmc = hash_1["Schluessel"]
306     print val_pmc
307     .local pmc key_out
308     key_out = new 'String'
309     key_out = "Schluessel"
310     val_string = hash_1[key_out]
311     print val_string
312     val_pmc = hash_1[key_out]
313     print val_pmc
314 .end
315 CODE
316 Wert
317 Wert
318 Wert
319 Wert
320 OUTPUT
321 unlink('gdbm_hash_1');
322
323 # The value is a PMC.
324 # The key used for insertion is a PMC.
325 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set PMC with a PMC key" );
326     hash_1 = "gdbm_hash_1"
327
328     .local pmc val
329     val = new 'String'
330     val = "Wert\n"
331     .local pmc key_pmc
332     key_pmc = new 'String'
333     key_pmc = "Schluessel"
334     hash_1[key_pmc] = val
335
336     .local pmc    val_pmc
337     .local string val_string
338
339     val_string = hash_1["Schluessel"]
340     print val_string
341     val_pmc = hash_1["Schluessel"]
342     print val_pmc
343     .local pmc key2
344     key2 = new 'String'
345     key2 = "Schluessel"
346     val_string = hash_1[key2]
347     print val_string
348     val_pmc = hash_1[key2]
349     print val_pmc
350 .end
351 CODE
352 Wert
353 Wert
354 Wert
355 Wert
356 OUTPUT
357 unlink('gdbm_hash_1');
358
359 # The value is an INTVAL
360 # The key used for insertion is a STRING.
361 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set INTVAL with STRING key" );
362     hash_1 = "gdbm_hash_1"
363
364     hash_1["Schluessel"] = -11012005
365
366     .local pmc    val_pmc
367     .local string val_string
368
369     val_string = hash_1["Schluessel"]
370     print val_string
371     print "\n"
372     val_pmc = hash_1["Schluessel"]
373     print val_pmc
374     print "\n"
375     .local pmc key_out
376     key_out = new 'String'
377     key_out = "Schluessel"
378     val_string = hash_1[key_out]
379     print val_string
380     print "\n"
381     val_pmc = hash_1[key_out]
382     print val_pmc
383     print "\n"
384 .end
385 CODE
386 -11012005
387 -11012005
388 -11012005
389 -11012005
390 OUTPUT
391 unlink('gdbm_hash_1');
392
393 # The value is a FLOATVAL.
394 # The key used for insertion is a PMC.
395 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "set FLOATVAL with a PMC key" );
396     hash_1 = "gdbm_hash_1"
397
398     .local pmc key_pmc
399     key_pmc = new 'String'
400     key_pmc = "Schluessel"
401     hash_1[key_pmc] = -1101.2005
402
403     .local pmc    val_pmc
404     .local string val_string
405
406     val_string = hash_1["Schluessel"]
407     print val_string
408     print "\n"
409     val_pmc = hash_1["Schluessel"]
410     print val_pmc
411     print "\n"
412     .local pmc key2
413     key2 = new 'String'
414     key2 = "Schluessel"
415     val_string = hash_1[key2]
416     print val_string
417     print "\n"
418     val_pmc = hash_1[key2]
419     print val_pmc
420     print "\n"
421 .end
422 CODE
423 -1101.2005
424 -1101.2005
425 -1101.2005
426 -1101.2005
427 OUTPUT
428 unlink('gdbm_hash_1');
429
430 pir_output_is( $new_hash_1 . << 'CODE', << 'OUTPUT', "delete_keyed" );
431     hash_1 = "gdbm_hash_1"
432
433     .local int exist_flag
434     .local int hash_size
435
436     exist_flag = exists hash_1["a"]
437     print '"a" exists: '
438     print exist_flag
439     print "\n"
440
441     hash_1["a"] = "A"
442     exist_flag = exists hash_1["a"]
443     print '"a" exists: '
444     print exist_flag
445     print "\n"
446
447     delete hash_1["a"]
448     exist_flag = exists hash_1["a"]
449     print '"a" exists: '
450     print exist_flag
451     print "\n"
452 .end
453 CODE
454 "a" exists: 0
455 "a" exists: 1
456 "a" exists: 0
457 OUTPUT
458 unlink('gdbm_hash_1');
459
460 # Local Variables:
461 #   mode: cperl
462 #   cperl-indent-level: 4
463 #   fill-column: 100
464 # End:
465 # vim: expandtab shiftwidth=4: