In message <[EMAIL PROTECTED]> Tom Hughes <[EMAIL PROTECTED]> wrote:
> In message <[EMAIL PROTECTED]> > Bryan C. Warnock <[EMAIL PROTECTED]> wrote: > > > Assignment, not comparison. (Plus formatted for coding standards) > > Committed. The tests should really have caught this, so I'm going to > do some work on them to make them more comprehensive... Attached is a patch to string.t to extend the testing of the comparison ops - there is now a list of pairs of strings and each of the twelve comparison ops is tried with each pair of strings from the list. I'll commit this tomorrow unless somebody spots a problem. Tom -- Tom Hughes ([EMAIL PROTECTED]) http://www.compton.nu/
Index: string.t =================================================================== RCS file: /home/perlcvs/parrot/t/op/string.t,v retrieving revision 1.9 diff -u -w -r1.9 string.t --- string.t 2001/10/10 18:21:05 1.9 +++ string.t 2001/10/11 23:07:03 @@ -150,320 +150,150 @@ done OUTPUT +my @strings = ( + "hello", "hello", + "hello", "world", + "world", "hello", + "hello", "hellooo", + "hellooo", "hello", + "hello", "hella", + "hella", "hello", + "hella", "hellooo", + "hellooo", "hella", + "hElLo", "HeLlO", + "hElLo", "hElLo" +); + output_is(<<CODE, <<OUTPUT, "eq_s_ic"); - set S0, "hello" - set S1, "hello" - set S2, "world" - eq S0, S1, ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - eq S0, S2, ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" +@{[ compare_strings( 0, "eq", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "eq_sc_ic"); - set S0, "hello" - eq S0, "hello", ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - eq S0, "world", ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" +@{[ compare_strings( 1, "eq", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "ne_s_ic"); - set S0, "Hello" - set S1, "Hello" - set S2, "World" - ne S0, S1, ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - ne S0, S2, TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" +@{[ compare_strings( 0, "ne", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "ne_sc_ic"); - set S0, "Hello" - ne S0, "Hello", ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - ne S0, "World", TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" +@{[ compare_strings( 1, "ne", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "lt_s_ic"); - set S0, "hElLo" - set S1, "hElLo" - set S2, "wOrLd" - lt S0, S2, ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - lt S2, S0, ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" - lt S0, S1, ERROR - branch THREE - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 0, "lt", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "lt_sc_ic"); - set S0, "hElLo" - set S1, "wOrLd" - lt S0, "wOrLd", ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - lt S1, "hElLo", ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" - lt S0, "hElLo", ERROR - branch THREE - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 1, "lt", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "le_s_ic"); - set S0, "hello" - set S1, "hello" - set S2, "planet" - le S0, S2, ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - le S2, S0, ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" - le S0, S1, THREE - branch ERROR - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 0, "le", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "le_sc_ic"); - set S0, "hello" - set S1, "planet" - le S0, "planet", ONE - branch ERROR - print "bad\\n" -ONE: - print "ok 1\\n" - le S1, "hello", ERROR - branch TWO - print "bad\\n" -TWO: - print "ok 2\\n" - le S0, "hello", THREE - branch ERROR - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 1, "le", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "gt_s_ic"); - set S0, "hello" - set S1, "hello" - set S2, "hellooo" - gt S0, S2, ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - gt S2, S0, TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" - gt S0, S1, ERROR - branch THREE - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 0, "gt", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "gt_sc_ic"); - set S0, "hello" - set S1, "hellooo" - gt S0, "hellooo", ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - gt S1, "hello", TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" - gt S0, "hello", ERROR - branch THREE - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 1, "gt", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "ge_s_ic"); - set S0, "hello" - set S1, "hello" - set S2, "world" - ge S0, S2, ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - ge S2, S0, TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" - ge S0, S1, THREE - branch ERROR - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 0, "ge", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT output_is(<<CODE, <<OUTPUT, "ge_sc_ic"); - set S0, "hello" - set S1, "world" - ge S0, "world", ERROR - branch ONE - print "bad\\n" -ONE: - print "ok 1\\n" - ge S1, "hello", TWO - branch ERROR - print "bad\\n" -TWO: - print "ok 2\\n" - ge S0, "hello", THREE - branch ERROR - print "bad\\n" -THREE: - print "ok 3\\n" +@{[ compare_strings( 1, "ge", @strings ) ]} + print "ok\\n" end ERROR: print "bad\\n" end CODE -ok 1 -ok 2 -ok 3 +ok OUTPUT # Set all string registers to values given by &$_[0](reg num) @@ -480,6 +310,37 @@ my $rt; for (0..31) { $rt .= "\tprint S$_\n"; + } + return $rt; +} +# Generate code to compare each pair of strings in a list +sub compare_strings { + my $const = shift; + my $op = shift; + my @strings = @_; + my $i = 1; + my $rt; + while (@strings) { + my $s1 = shift @strings; + my $s2 = shift @strings; + my $arg; + $rt .= " set S0, \"$s1\"\n"; + if ($const) { + $arg = "\"$s2\""; + } + else { + $rt .= " set S1, \"$s2\"\n"; + $arg = "S1"; + } + if (eval "\"$s1\" $op \"$s2\"") { + $rt .= " $op S0, $arg, OK$i\n"; + $rt .= " branch ERROR\n"; + } + else { + $rt .= " $op S0, $arg, ERROR\n"; + } + $rt .= "OK$i:\n"; + $i++; } return $rt; }