tagged release 0.6.4
[parrot.git] / languages / tcl / t / cmd_exprOld.t
blob0cc7f036aa792d518c0feb008d0dd3d0bfaed346
1 #!perl
3 # Copyright (C) 2004-2006, The Perl Foundation.
4 # $Id$
6 use strict;
7 use warnings;
8 use lib qw(tcl/lib ./lib ../lib ../../lib ../../../lib);
10 use Parrot::Test tests => 80;
11 use Test::More;
13 language_output_is( "tcl", <<'TCL', <<OUT, "lt, numeric, not alpha, with vars" );
14  set a 10
15  puts [expr $a < 9]
16 TCL
18 OUT
20 language_output_is( "tcl", <<'TCL', <<OUT, "lt, numeric, not alpha, with vars and braces" );
21  set a 10
22  puts [expr {$a < 9}]
23 TCL
25 OUT
27 language_output_is( "tcl", <<TCL, <<OUT, "&&, both sides" );
28  proc true {} {puts T; return 1}
29  proc false {} {puts F; return 0}
30  puts [expr {[true] && [false]}]
31 TCL
35 OUT
37 language_output_is( "tcl", <<TCL, <<OUT, "||, both sides" );
38  proc true {} {puts T; return 1}
39  proc false {} {puts F; return 0}
40  puts [expr {[false] || [true]}]
41 TCL
45 OUT
47 language_output_is( "tcl", <<TCL, <<OUT, "&&, short circuited" );
48  proc true {} {puts T; return 1}
49  proc false {} {puts F; return 0}
50  puts [expr {[false] && [true]}]
51 TCL
54 OUT
56 language_output_is( "tcl", <<TCL, <<OUT, "||, short circuited" );
57  proc true {} {puts T; return 1}
58  proc false {} {puts F; return 0}
59  puts [expr {[true] || [false]}]
60 TCL
63 OUT
65 language_output_is( "tcl", <<'TCL', <<'OUT', 'atan2(3, "a")' );
66   expr atan2(3,"a")
67 TCL
68 argument to math function didn't have numeric value
69 OUT
71 language_output_is( "tcl", <<'TCL', <<'OUT', 'atan2("a", 3)' );
72   expr atan2("a",3)
73 TCL
74 argument to math function didn't have numeric value
75 OUT
77 language_output_is( "tcl", <<'TCL', <<'OUT', 'atan2("a")' );
78   expr atan2("a")
79 TCL
80 too few arguments for math function
81 OUT
83 language_output_is( "tcl", <<'TCL', <<'OUT', "ceil(a)" );
84   expr ceil(a)
85 TCL
86 syntax error in expression "ceil(a)": the word "ceil(a)" requires a preceding $ if it's a variable or function arguments if it's a function
87 OUT
89 language_output_is( 'tcl', <<'TCL', <<'OUT', 'ceil("a")' );
90   expr ceil("a")
91 TCL
92 argument to math function didn't have numeric value
93 OUT
95 language_output_is( 'tcl', <<'TCL', <<'OUT', 'double("a")' );
96   expr double("a")
97 TCL
98 argument to math function didn't have numeric value
99 OUT
101 language_output_is( "tcl", <<'TCL', <<'OUT', "fmod(3,0) - domain error" );
102   expr fmod(3,0)
104 domain error: argument not in valid range
107 language_output_is( 'tcl', <<'TCL', <<'OUT', 'fmod(-4,"a")' );
108   expr fmod(-4,"a")
110 argument to math function didn't have numeric value
113 language_output_is( 'tcl', <<'TCL', <<'OUT', 'fmod("a",-4)' );
114   expr fmod("a",-4)
116 argument to math function didn't have numeric value
119 language_output_is( "tcl", <<'TCL', <<'OUT', 'hypot(-3,"a")' );
120   expr hypot(-3,"a")
122 argument to math function didn't have numeric value
125 language_output_is( "tcl", <<'TCL', <<'OUT', 'hypot("a",-3)' );
126   expr hypot("a",-3)
128 argument to math function didn't have numeric value
131 language_output_is( "tcl", <<'TCL', <<'OUT', 'int("a")' );
132   expr int("a")
134 argument to math function didn't have numeric value
137 language_output_is( "tcl", <<'TCL', <<'OUT', "log(-4) - domain error" );
138   expr log(-4)
140 domain error: argument not in valid range
143 language_output_is( 'tcl', <<'TCL', <<'OUT', 'pow(2,"a")' );
144   expr pow(2,"a")
146 argument to math function didn't have numeric value
149 language_output_is( 'tcl', <<'TCL', <<'OUT', 'pow("a",2)' );
150   expr pow("a",2)
152 argument to math function didn't have numeric value
155 language_output_is( 'tcl', <<'TCL', <<'OUT', 'round("a")' );
156   expr round("a")
158 argument to math function didn't have numeric value
161 language_output_is( "tcl", <<'TCL', <<'OUT', "sqrt(-49) - domain error" );
162   expr sqrt(-49)
164 domain error: argument not in valid range
167 language_output_is( 'tcl', <<'TCL', <<'OUT', 'abs(1,2) - too many args' );
168   expr abs(1,2)
170 too many arguments for math function
173 language_output_is( 'tcl', <<'TCL', <<'OUT', 'hypot(1) - too few args' );
174   expr hypot(1)
176 too few arguments for math function
179 # misc.
181 language_output_is( "tcl", <<TCL, <<OUT, "simple precedence" );
182  puts [expr 2*3+4*2]
187 language_output_is( "tcl", <<TCL, <<OUT, "parens" );
188  puts [expr 2*(3+4)*2]
193 language_output_is( "tcl", <<'TCL', <<'OUT', "premature end of expr '('" );
194   puts [expr "("]
196 syntax error in expression "(": premature end of expression
199 language_output_is( "tcl", <<'TCL', <<'OUT', "float division" );
200 puts [expr 1 / 3.0]
202 0.3333333333333333
205 language_output_is( "tcl", <<'TCL', <<'OUT', "nested expr (braces)" );
206  puts [expr {2 * [expr {2 - 1}]}];
211 language_output_is( "tcl", <<'TCL', <<'OUT', "braced operands." );
212  set n 1
213  puts [expr {$n * 1}]
218 language_output_is( "tcl", <<'TCL', <<'OUT', "puts inside an expr" );
219   puts [expr {[puts 2]}]
225 language_output_is( "tcl", <<'TCL', <<'OUT', "eq, extra characters after quotes" );
226   puts [expr {"foo"eq{foo}}]
231 language_output_is( "tcl", <<'TCL', <<'OUT', "eq, extra characters after brace" );
232   puts [expr {{foo}eq"foo"}]
237 language_output_is( "tcl", <<'TCL', <<'OUT', "eq (false)" );
238   puts [expr {"foo"eq{baz}}]
243 language_output_is( "tcl", <<'TCL', <<'OUT', "ne (true)" );
244   puts [expr {{foo}ne{baz}}]
249 language_output_is( "tcl", <<'TCL', <<'OUT', "ne (false)" );
250   puts [expr {{foo}ne{foo}}]
255 language_output_is( "tcl", <<'TCL', <<'OUT', "string == (true)" );
256   puts [expr {"foo"=="foo"}]
261 language_output_is( "tcl", <<'TCL', <<'OUT', "string == (false)" );
262   puts [expr {"foo"=="baz"}]
267 language_output_is( "tcl", <<'TCL', <<'OUT', "string != (true)" );
268   puts [expr {"foo" != "baz"}]
273 language_output_is( "tcl", <<'TCL', <<'OUT', "string != (false)" );
274   puts [expr {"foo"!="foo"}]
279 language_output_is( "tcl", <<'TCL', <<'OUT', "string <= (less)" );
280   puts [expr {"abb"<="abc"}]
285 language_output_is( "tcl", <<'TCL', <<'OUT', "string <= (greater)" );
286   puts [expr {"abc"<="abb"}]
291 language_output_is( "tcl", <<'TCL', <<'OUT', "string <= (equal)" );
292   puts [expr {"abc"<="abc"}]
297 language_output_is( "tcl", <<'TCL', <<'OUT', "string >= (less)" );
298   puts [expr {"abb" >= "abc"}]
303 language_output_is( "tcl", <<'TCL', <<'OUT', "string >= (greater)" );
304   puts [expr {"abc" >= "abb"}]
309 language_output_is( "tcl", <<'TCL', <<'OUT', "string >= (equal)" );
310   puts [expr {"abc" >= "abc"}]
315 language_output_is( "tcl", <<'TCL', <<'OUT', "string < (less)" );
316   puts [expr {"abb" < "abc"}]
321 language_output_is( "tcl", <<'TCL', <<'OUT', "string < (greater)" );
322   puts [expr {"abc" < "abb"}]
327 language_output_is( "tcl", <<'TCL', <<'OUT', "string < (equal)" );
328   puts [expr {"abc" < "abc"}]
333 language_output_is( "tcl", <<'TCL', <<'OUT', "string > (less)" );
334   puts [expr {"abb" > "abc"}]
339 language_output_is( "tcl", <<'TCL', <<'OUT', "string > (greater)" );
340   puts [expr {"abc" > "abb"}]
345 language_output_is( "tcl", <<'TCL', <<'OUT', "string > (equal)" );
346   puts [expr {"abc" > "abc"}]
351 language_output_is( "tcl", <<'TCL', <<'OUT', "unknown math function" );
352   puts [expr fink()]
354 unknown math function "fink"
357 language_output_is( "tcl", <<TCL, <<OUT, "float remainder" );
358  puts [expr 3.2 % 2]
360 can't use floating-point value as operand of "%"
363 language_output_is( "tcl", <<TCL, <<OUT, "float left shift" );
364  puts [expr 3.2 << 2]
366 can't use floating-point value as operand of "<<"
369 language_output_is( "tcl", <<TCL, <<OUT, "float right shift" );
370  puts [expr 3.2 >> 2]
372 can't use floating-point value as operand of ">>"
375 language_output_is( "tcl", <<TCL, <<OUT, "float &" );
376  puts [expr 3.2 & 2]
378 can't use floating-point value as operand of "&"
381 language_output_is( "tcl", <<TCL, <<OUT, "float |" );
382  puts [expr 3.2 | 2]
384 can't use floating-point value as operand of "|"
387 language_output_is( "tcl", <<TCL, <<OUT, "float ^" );
388  puts [expr 3.2 ^ 2]
390 can't use floating-point value as operand of "^"
393 language_output_is( "tcl", <<TCL, <<OUT, "octal" );
394  puts [expr 000012345]
396 5349
399 language_output_is( "tcl", <<TCL, <<OUT, "neg octal" );
400  puts [expr -000012345]
402 -5349
405 language_output_is( "tcl", <<TCL, <<OUT, "pos octal" );
406  puts [expr +000012345]
408 5349
411 language_output_is( "tcl", <<TCL, <<OUT, "bad octal" );
412  puts [expr 0000912345]
414 expected integer but got "0000912345" (looks like invalid octal number)
417 language_output_is( "tcl", <<TCL, <<OUT, "floats aren't octal" );
418  puts [expr 000012345.0]
420 12345.0
423 language_output_is( "tcl", <<'TCL', <<'OUT', "string > int" );
424  puts [expr {"a" > 10}]
429 language_output_is( "tcl", <<'TCL', <<'OUT', "string int < int" );
430  puts [expr {"2" < 10}]
435 language_output_is( "tcl", <<'TCL', <<'OUT', "string int < string int" );
436  puts [expr {"2" < "10"}]
441 language_output_is( "tcl", <<'TCL', <<'OUT', "in - true" );
442   set list {b c d f}
443   puts [expr {"b" in $list}]
448 language_output_is( "tcl", <<'TCL', <<'OUT', "in - false" );
449   set list {b c d f}
450   puts [expr {"e" in $list}]
455 language_output_is( "tcl", <<'TCL', <<'OUT', "ni - true" );
456   set list {b c d f}
457   puts [expr {"e" ni $list}]
462 language_output_is( "tcl", <<'TCL', <<'OUT', "ni - false" );
463   set list {b c d f}
464   puts [expr {"b" ni $list}]
469 language_output_is( "tcl", <<'TCL', <<'OUT', "hex number" );
470   puts [expr {0xf}]
475 language_output_is( "tcl", <<'TCL', <<'OUT', "hex multiplication" );
476   puts [expr {0xf*0xa}]
481 language_output_is( "tcl", <<'TCL', <<'OUT', 'bad hex' );
482   expr 0xg
484 syntax error in expression "0xg": extra tokens at end of expression
487 language_output_is( "tcl", <<'TCL', <<'OUT', 'simple ternary' );
488   puts [ expr 1?"whee":"cry"]
490 whee
493 language_output_is( "tcl", <<'TCL', <<'OUT', 'ternary, true, short circuit' );
494   expr {1?[puts ok]:[puts nok]}
499 language_output_is( "tcl", <<'TCL', <<'OUT', 'ternary, false, short circuit' );
500   expr {0?[puts true]:[puts false]}
502 false
505 language_output_is( "tcl", <<'TCL', <<'OUT', "string mul - don't confuse variables for strings." );
506   set a 1; puts [expr {$a * 10}]
511 language_output_is( "tcl", <<'TCL', <<'OUT', 'complicated expression required for test_more.tcl' );
512   puts [expr {"[eval {set a "aok"}]" ne "bork"}]
517 # Local Variables:
518 #   mode: cperl
519 #   cperl-indent-level: 4
520 #   fill-column: 100
521 # End:
522 # vim: expandtab shiftwidth=4: