@@ -902,8 +902,8 @@ var cmpTests = []cmpTest{
902
902
{"eq 1 2" , "false" , true },
903
903
{"eq `xy` `xy`" , "true" , true },
904
904
{"eq `xy` `xyz`" , "false" , true },
905
- {"eq .Xuint .Xuint " , "true" , true },
906
- {"eq .Xuint .Yuint " , "false" , true },
905
+ {"eq .Uthree .Uthree " , "true" , true },
906
+ {"eq .Uthree .Ufour " , "false" , true },
907
907
{"eq 3 4 5 6 3" , "true" , true },
908
908
{"eq 3 4 5 6 7" , "false" , true },
909
909
{"ne true true" , "false" , true },
@@ -916,16 +916,16 @@ var cmpTests = []cmpTest{
916
916
{"ne 1 2" , "true" , true },
917
917
{"ne `xy` `xy`" , "false" , true },
918
918
{"ne `xy` `xyz`" , "true" , true },
919
- {"ne .Xuint .Xuint " , "false" , true },
920
- {"ne .Xuint .Yuint " , "true" , true },
919
+ {"ne .Uthree .Uthree " , "false" , true },
920
+ {"ne .Uthree .Ufour " , "true" , true },
921
921
{"lt 1.5 1.5" , "false" , true },
922
922
{"lt 1.5 2.5" , "true" , true },
923
923
{"lt 1 1" , "false" , true },
924
924
{"lt 1 2" , "true" , true },
925
925
{"lt `xy` `xy`" , "false" , true },
926
926
{"lt `xy` `xyz`" , "true" , true },
927
- {"lt .Xuint .Xuint " , "false" , true },
928
- {"lt .Xuint .Yuint " , "true" , true },
927
+ {"lt .Uthree .Uthree " , "false" , true },
928
+ {"lt .Uthree .Ufour " , "true" , true },
929
929
{"le 1.5 1.5" , "true" , true },
930
930
{"le 1.5 2.5" , "true" , true },
931
931
{"le 2.5 1.5" , "false" , true },
@@ -935,19 +935,19 @@ var cmpTests = []cmpTest{
935
935
{"le `xy` `xy`" , "true" , true },
936
936
{"le `xy` `xyz`" , "true" , true },
937
937
{"le `xyz` `xy`" , "false" , true },
938
- {"le .Xuint .Xuint " , "true" , true },
939
- {"le .Xuint .Yuint " , "true" , true },
940
- {"le .Yuint .Xuint " , "false" , true },
938
+ {"le .Uthree .Uthree " , "true" , true },
939
+ {"le .Uthree .Ufour " , "true" , true },
940
+ {"le .Ufour .Uthree " , "false" , true },
941
941
{"gt 1.5 1.5" , "false" , true },
942
942
{"gt 1.5 2.5" , "false" , true },
943
943
{"gt 1 1" , "false" , true },
944
944
{"gt 2 1" , "true" , true },
945
945
{"gt 1 2" , "false" , true },
946
946
{"gt `xy` `xy`" , "false" , true },
947
947
{"gt `xy` `xyz`" , "false" , true },
948
- {"gt .Xuint .Xuint " , "false" , true },
949
- {"gt .Xuint .Yuint " , "false" , true },
950
- {"gt .Yuint .Xuint " , "true" , true },
948
+ {"gt .Uthree .Uthree " , "false" , true },
949
+ {"gt .Uthree .Ufour " , "false" , true },
950
+ {"gt .Ufour .Uthree " , "true" , true },
951
951
{"ge 1.5 1.5" , "true" , true },
952
952
{"ge 1.5 2.5" , "false" , true },
953
953
{"ge 2.5 1.5" , "true" , true },
@@ -957,25 +957,55 @@ var cmpTests = []cmpTest{
957
957
{"ge `xy` `xy`" , "true" , true },
958
958
{"ge `xy` `xyz`" , "false" , true },
959
959
{"ge `xyz` `xy`" , "true" , true },
960
- {"ge .Xuint .Xuint" , "true" , true },
961
- {"ge .Xuint .Yuint" , "false" , true },
962
- {"ge .Yuint .Xuint" , "true" , true },
960
+ {"ge .Uthree .Uthree" , "true" , true },
961
+ {"ge .Uthree .Ufour" , "false" , true },
962
+ {"ge .Ufour .Uthree" , "true" , true },
963
+ // Mixing signed and unsigned integers.
964
+ {"eq .Uthree .Three" , "true" , true },
965
+ {"eq .Three .Uthree" , "true" , true },
966
+ {"le .Uthree .Three" , "true" , true },
967
+ {"le .Three .Uthree" , "true" , true },
968
+ {"ge .Uthree .Three" , "true" , true },
969
+ {"ge .Three .Uthree" , "true" , true },
970
+ {"lt .Uthree .Three" , "false" , true },
971
+ {"lt .Three .Uthree" , "false" , true },
972
+ {"gt .Uthree .Three" , "false" , true },
973
+ {"gt .Three .Uthree" , "false" , true },
974
+ {"eq .Ufour .Three" , "false" , true },
975
+ {"lt .Ufour .Three" , "false" , true },
976
+ {"gt .Ufour .Three" , "true" , true },
977
+ {"eq .NegOne .Uthree" , "false" , true },
978
+ {"eq .Uthree .NegOne" , "false" , true },
979
+ {"ne .NegOne .Uthree" , "true" , true },
980
+ {"ne .Uthree .NegOne" , "true" , true },
981
+ {"lt .NegOne .Uthree" , "true" , true },
982
+ {"lt .Uthree .NegOne" , "false" , true },
983
+ {"le .NegOne .Uthree" , "true" , true },
984
+ {"le .Uthree .NegOne" , "false" , true },
985
+ {"gt .NegOne .Uthree" , "false" , true },
986
+ {"gt .Uthree .NegOne" , "true" , true },
987
+ {"ge .NegOne .Uthree" , "false" , true },
988
+ {"ge .Uthree .NegOne" , "true" , true },
989
+ {"eq (index `x` 0) 'x'" , "true" , true }, // The example that triggered this rule.
990
+ {"eq (index `x` 0) 'y'" , "false" , true },
963
991
// Errors
964
992
{"eq `xy` 1" , "" , false }, // Different types.
993
+ {"eq 2 2.0" , "" , false }, // Different types.
965
994
{"lt true true" , "" , false }, // Unordered types.
966
995
{"lt 1+0i 1+0i" , "" , false }, // Unordered types.
967
996
}
968
997
969
998
func TestComparison (t * testing.T ) {
970
999
b := new (bytes.Buffer )
971
1000
var cmpStruct = struct {
972
- Xuint , Yuint uint
973
- }{3 , 4 }
1001
+ Uthree , Ufour uint
1002
+ NegOne , Three int
1003
+ }{3 , 4 , - 1 , 3 }
974
1004
for _ , test := range cmpTests {
975
1005
text := fmt .Sprintf ("{{if %s}}true{{else}}false{{end}}" , test .expr )
976
1006
tmpl , err := New ("empty" ).Parse (text )
977
1007
if err != nil {
978
- t .Fatal ( err )
1008
+ t .Fatalf ( "%q: %s" , test . expr , err )
979
1009
}
980
1010
b .Reset ()
981
1011
err = tmpl .Execute (b , & cmpStruct )
0 commit comments