# New Ticket Created by  Alberto Simoes 
# Please include the string:  [perl #38072]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38072 >


Note that this patch does not fixes the failing tests added by Coke on 
last commit, as I'm not sure I agree with his changes.
-- 
Alberto Simões - Departamento de Informática - Universidade do Minho
                  Campus de Gualtar - 4710-057 Braga - Portugal
Index: languages/tcl/t/cmd_string.t
===================================================================
--- languages/tcl/t/cmd_string.t        (revision 10785)
+++ languages/tcl/t/cmd_string.t        (working copy)
@@ -3,10 +3,11 @@
 use strict;
 use lib qw(tcl/t t . ../lib ../../lib ../../../lib);
 
-use Parrot::Test tests => 115;
+use Parrot::Test tests => 133;
 use Parrot::Config;
 use Test::More;
 
+
 language_output_is("tcl",<<TCL,<<OUT,"first, initial");
  string
 TCL
@@ -690,3 +691,115 @@
 OUT
 
 }
+
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, bad args (1)");
+   string compare
+TCL
+wrong # args: should be "string compare ?-nocase? ?-length int? string1 
string2"
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, bad args (2)");
+   string compare -length "aaa" "bbb"
+TCL
+wrong # args: should be "string compare ?-nocase? ?-length int? string1 
string2"
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, bad args (3)");
+   string compare -length 4 -length 8 "aaa" "bbb"
+TCL
+wrong # args: should be "string compare ?-nocase? ?-length int? string1 
string2"
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, same string");
+   puts [string compare aaa aaa]
+TCL
+0
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, \"lower\" string");
+   puts [string compare aaa aab]
+TCL
+-1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, \"higher\" string");
+   puts [string compare aab aaa]
+TCL
+1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, bigger string");
+   puts [string compare aaaa aaa]
+TCL
+1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, smaller string");
+   puts [string compare aaa aaaa]
+TCL
+-1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, different sizes, len 
specified");
+   puts [string compare -length 3 aaa aaaa]
+TCL
+0
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, different strings, len 
specified");
+   puts [string compare -length 4 aaabc aaabb]
+TCL
+0
+OUT
+
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, same string, different 
case");
+   puts [string compare -nocase AAA aaa]
+TCL
+0
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, \"lower\" string, 
different case");
+   puts [string compare -nocase aaa AAB]
+TCL
+-1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, \"higher\" string, 
different case");
+   puts [string compare -nocase AAB aaa]
+TCL
+1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, bigger string, 
different case");
+   puts [string compare -nocase AAAA aaa]
+TCL
+1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, smaller string, 
different case");
+   puts [string compare -nocase AAA aaaa]
+TCL
+-1
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, different sizes, len 
specified, different case");
+   puts [string compare -length 3 -nocase aaa AAAA]
+TCL
+0
+OUT
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, different strings, len 
specified, different case");
+   puts [string compare -length 4 -nocase AAABC aaabb]
+TCL
+0
+OUT
+
+
+language_output_is("tcl",<<'TCL',<<OUT,"string compare, same string, different 
case");
+   puts [string compare AAAA aaaa]
+TCL
+-1
+OUT
+
Index: languages/tcl/lib/commands/string.pir
===================================================================
--- languages/tcl/lib/commands/string.pir       (revision 10785)
+++ languages/tcl/lib/commands/string.pir       (working copy)
@@ -886,3 +886,60 @@
 .end
          
 
+                  
+.sub "compare"
+  .param pmc argv
+
+  .local int argc
+  .local pmc retval
+  .local int size
+
+  size = -1
+  argc = argv
+
+  if argc < 1 goto bad_args
+  
+  $S2 = pop argv
+  $S1 = pop argv
+
+args_processment:       
+  argc = argv
+  if argc == 0 goto args_processed
+  $S4 = shift argv
+  if $S4 == "-nocase" goto arg_nocase
+  if $S4 == "-length" goto arg_length
+  goto bad_args
+
+args_processed:
+  if $S1 == $S2 goto equal         
+  if $S1 < $S2 goto smaller
+  .return(1)
+
+smaller:        
+  .return(-1)
+
+equal:
+  .return(0)         
+         
+arg_nocase:
+  downcase $S1
+  downcase $S2
+  goto args_processment
+
+arg_length:
+  if size != -1 goto bad_args         
+  argc = argv
+  if argc == 0 goto bad_args
+  $S4 = shift argv
+  ### TODO:         
+  ### Here I should check that $S4 is really an integer
+  ### and if not, say something like: expected integer but got "5.4"
+  size = $S4
+  $S1 = substr $S1, 0, size
+  $S2 = substr $S2, 0, size
+  goto args_processment
+         
+bad_args:
+  .throw ("wrong # args: should be \"string compare ?-nocase? ?-length int? 
string1 string2\"")
+
+.end

Reply via email to