2 # Copyright (C) 2001-2005, The Perl Foundation.
7 use lib qw(lib . ../lib ../../lib);
8 use Parrot::Test tests => 14;
13 t/pmc/fixedpmcarray.t - FixedPMCArray PMC
17 % prove t/pmc/fixedpmcarray.t
21 Tests C<FixedPMCArray> PMC. Checks size, sets various elements, including
22 out-of-bounds test. Checks INT and PMC keys.
26 my $fp_equality_macro = <<'ENDOFMACRO';
27 .macro fp_eq ( J, K, L )
36 gt N2, 0.000001, .$FPEQNOK
56 lt N2, 0.000001, .$FPNENOK
69 pasm_output_is( <<'CODE', <<'OUTPUT', "Setting array size" );
89 pasm_output_like( <<'CODE', <<'OUTPUT', "Resetting array size (and getting an exception)" );
90 new P0, .FixedPMCArray
95 print "Should have gotten an exception\n "
100 /FixedPMCArray: Can't resize!
104 #VIM's syntax highlighter needs this line
106 pasm_output_is( <<'CODE', <<'OUTPUT', "Truth and falsehood" );
107 new P0, .FixedPMCArray
135 pasm_output_is( <<'CODE', <<'OUTPUT', "Setting first element" );
136 new P0, .FixedPMCArray
151 set P0[0],"muwhahaha"
153 eq S0,"muwhahaha",OK_3
164 pasm_output_is( <<'CODE', <<'OUTPUT', "Setting second element" );
165 new P0, .FixedPMCArray
193 # TODO: Rewrite these properly when we have exceptions
195 pasm_output_like( <<'CODE', <<'OUTPUT', "Setting out-of-bounds elements" );
196 new P0, .FixedPMCArray
203 /FixedPMCArray: index out of bounds!
207 pasm_output_like( <<'CODE', <<'OUTPUT', "Getting out-of-bounds elements" );
208 new P0, .FixedPMCArray
214 /FixedPMCArray: index out of bounds!
218 pasm_output_is( <<"CODE", <<'OUTPUT', "Set via PMC keys, access via INTs" );
219 @{[ $fp_equality_macro ]}
220 new P0, .FixedPMCArray
255 pasm_output_is( <<"CODE", <<'OUTPUT', "Set via INTs, access via PMC Keys" );
256 @{[ $fp_equality_macro ]}
257 new P0, .FixedPMCArray
276 .fp_eq(N0, 10.2, OK2)
305 .local pmc compares, cmp_fun
306 # XXX doesnt work wit prederef of JIT
308 compares = new .Integer
310 global "compares" = compares
311 cmp_fun = global "cmp_fun"
316 .param pmc cmp_fun :optional
318 compares = global "compares"
321 new ar, .FixedPMCArray
351 compares = global "compares"
364 compares: [1-9]\d*/, "sort"
367 pir_output_is( << 'CODE', << 'OUTPUT', "check whether interface is done" );
371 pmc1 = new FixedPMCArray
373 does bool1, pmc1, "scalar"
376 does bool1, pmc1, "array"
379 does bool1, pmc1, "no_interface"
390 pir_output_like( <<'CODE', <<'OUTPUT', "Getting unitialized elements" );
394 arr1 = new FixedPMCArray
397 elem_1956 = arr1[1956]
398 .local string type_1956
399 type_1956 = typeof elem_1956
403 /Null PMC access in name()/
406 pir_output_is( << 'CODE', << 'OUTPUT', "Multi keys" );
409 .local pmc matrix, row
410 .local pmc elem_in_pmc
411 .local pmc elem_out_pmc
412 .local int elem_out_int
413 .local num elem_out_num
414 .local string elem_out_string
416 matrix = new FixedPMCArray
418 row = new FixedPMCArray
419 row = 4 # assing with an integer, number, pmc, string
422 matrix[0;1] = 128.128
423 elem_in_pmc = new Integer
425 matrix[0;2] = elem_in_pmc
428 elem_out_int = matrix[0;0]
429 print "set_integer_keyed, get_integer_keyed: "
433 print "set_integer_keyed, get_pmc_keyed: "
434 elem_out_pmc = matrix[0;0]
438 print "set_integer_keyed, get_number_keyed: "
439 elem_out_num = matrix[0;0]
443 print "set_integer_keyed, get_string_keyed: "
444 elem_out_string = matrix[0;0]
445 print elem_out_string
448 print "set_number_keyed, get_pmc_keyed: "
449 elem_out_pmc = matrix[0;1]
453 print "set_number_keyed, get_number_keyed: "
454 elem_out_num = matrix[0;1]
458 print "set_number_keyed, get_string_keyed: "
459 elem_out_string = matrix[0;1]
460 print elem_out_string
463 elem_out_int = matrix[0;2]
464 print "set_pmc_keyed, get_integer_keyed: "
468 print "set_pmc_keyed, get_pmc_keyed: "
469 elem_out_pmc = matrix[0;2]
473 print "set_pmc_keyed, get_number_keyed: "
474 elem_out_num = matrix[0;2]
478 print "set_pmc_keyed, get_string_keyed: "
479 elem_out_string = matrix[0;2]
480 print elem_out_string
483 elem_out_int = matrix[0;0]
484 print "set_integer_keyed, get_integer_keyed: "
488 print "set_integer_keyed, get_pmc_keyed: "
489 elem_out_pmc = matrix[0;0]
493 print "set_integer_keyed, get_number_keyed: "
494 elem_out_num = matrix[0;0]
498 print "set_integer_keyed, get_string_keyed: "
499 elem_out_string = matrix[0;0]
500 print elem_out_string
505 set_integer_keyed, get_integer_keyed: 128
506 set_integer_keyed, get_pmc_keyed: 128
507 set_integer_keyed, get_number_keyed: 128.000000
508 set_integer_keyed, get_string_keyed: 128
509 set_number_keyed, get_pmc_keyed: 128.128
510 set_number_keyed, get_number_keyed: 128.128000
511 set_number_keyed, get_string_keyed: 128.128
512 set_pmc_keyed, get_integer_keyed: 256
513 set_pmc_keyed, get_pmc_keyed: 256
514 set_pmc_keyed, get_number_keyed: 256.000000
515 set_pmc_keyed, get_string_keyed: 256
516 set_integer_keyed, get_integer_keyed: 128
517 set_integer_keyed, get_pmc_keyed: 128
518 set_integer_keyed, get_number_keyed: 128.000000
519 set_integer_keyed, get_string_keyed: 128
522 pir_output_is( <<'CODE', <<'OUTPUT', "defined" );
525 arr1 = new FixedPMCArray
527 .local int defined_elem_1956
528 defined_elem_1956 = defined arr1[1956]
529 print defined_elem_1956
531 defined_elem_1956 = defined arr1[1956]
532 print defined_elem_1956
536 defined_elem_1956 = defined arr1[1956]
537 print defined_elem_1956
546 # cperl-indent-level: 4
549 # vim: expandtab shiftwidth=4: