ref: 6aab6b7b0d8fb0e37f7021f17714efbe02a227bb
parent: 76fc43acecea75b362d7e56557a0466cbda94572
author: S. Gilles <sgilles@math.umd.edu>
date: Thu Nov 9 14:51:58 EST 2017
Allow sleq to read far enough into the array to compare wide types
--- a/lib/std/sleq.myr
+++ b/lib/std/sleq.myr
@@ -7,7 +7,7 @@
generic sleq = {a, b
if a.len == b.len
- -> memeq((a : byte#), (b : byte#), a.len)
+ -> memeq((a : byte#), (b : byte#), a.len * sizeof(@a))
else
-> false
;;
--- /dev/null
+++ b/lib/std/test/sleq.myr
@@ -1,0 +1,25 @@
+use std
+
+use testr
+
+const main = {
+ testr.run([
+ [.name = "wider-than-byte", .fn = wide],
+ [.name = "slices", .fn = slices],
+ ][:])
+}
+
+const wide = {c
+ var a : uint[3] = [ 0, 1, 2]
+ var b : uint[3] = [ 0, 1, 3]
+ testr.check(c, !std.sleq(a[:], b[:]), "expected {} != {} as uint[:]", a, b)
+}
+
+const slices = {c
+ var a : int8[8] = [ 0, 0, 3, 1, 0, 3, 1, 2 ]
+ var b : int8[3] = [ 1, 0, 3]
+ testr.check(c, std.sleq(a[1:4], a[4:7]), "expected {} = {}", a[1:4], a[4:7])
+ testr.check(c, !std.sleq(a[0:4], a[3:7]), "expected {} = {}", a[0:4], a[3:7])
+ testr.check(c, !std.sleq(a[:], b[:]), "expected {} = {}", a, b)
+ testr.check(c, !std.sleq(a[3:7], b[:]), "expected {} = {}", a[3:7], b)
+}