ref: 03ef9a246d5f6f8013c19285224323e64206c415
parent: 0113cd12d5ce3faae500772c76018f0ad4dd776a
author: S. Gilles <sgilles@umd.edu>
date: Sun Nov 24 13:20:50 EST 2019
Convert lib/test/fmt.myr to use testr
diff -u a/lib/std/test/fmt.myr b/lib/std/test/fmt.myr
--- a/lib/std/test/fmt.myr
+++ b/lib/std/test/fmt.myr
@@ -1,5 +1,14 @@
use std
+use testr
+
+const main = {
+ testr.run([
+ [.name="builtins", .fn=builtins ],
+ [.name="installed", .fn=installed],
+ ][:])
+}
+
type blah
type blah = struct
a : byte[:]
@@ -15,7 +24,7 @@
y : int32
;;
-const check = {expected, fmt, args : ...
+const check = {c, expected, fmt, args : ...
var buf : byte[2048]
var sl, ap
@@ -22,7 +31,7 @@
ap = std.vastart(&args)
sl = std.bfmtv(buf[:], fmt, &ap)
if !std.eq(expected, sl)
- std.fatal("mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
+ testr.fail(c, "mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
;;
}
@@ -31,87 +40,82 @@
`Bar int64
;;
-const main = {
- builtins()
- installed()
-}
-
-const builtins = {
+const builtins = {c
var s : blah
var m : u
var v = [void, void][:]
/* basic types */
- check(" abcd", "{w=10}", "abcd")
- check("00000bdcae", "{p=0,w=10}", "bdcae")
- check("abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
- check("a", "{w=0,p=1}", "a")
- check(" 10", "{w=10}", 10)
- check("0000000010", "{p=0,w=10}", 10)
- check("4294967295", "{p=0,w=10}", (-1 : uint))
- check("-000000001", "{p=0,w=10}", -1)
- check("xxxxxxxx-1", "{p=x,w=10}", -1)
- check(" -1", "{w=10}", -1)
- check("100000" , "{w=3}", 100000)
- check("foobarbaz", "{}bar{}", "foo", "baz")
- check("\\n\\r\\xff", "{e}", "\n\r\xff")
- check("{}barbaz", "{{}}bar{}", "baz")
- check("{barbaz}", "{{bar{}}}", "baz")
- check(" Tlön", "{w=10}", "Tlön")
- check(" háček", "{w=10}", "háček")
- check("_____即是多多即", "{w=15,p=_}", "即是多多即")
- check(" τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
- check("abcd", "{}", "abcd")
- check("123", "{}", 123)
- check("7b", "{x}", 123)
- check("0x7b", "0x{x}", 123)
- check("0.0", "{}", 0.0)
- check("-0.0", "{}", -0.0)
- check("0.3", "{}", 0.3)
- check("0.3", "{}", (0.3 : flt32))
- check("1.0", "{}", 1.0)
- check("100.0", "{}", 100.0)
- check("666.91972", "{}", 666.91972)
- check("1.0001", "{}", 1.0001)
- check("0.000101323461002", "{}", 0.000101323461002)
- check("(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
+ check(c, " abcd", "{w=10}", "abcd")
+ check(c, "00000bdcae", "{p=0,w=10}", "bdcae")
+ check(c, "abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
+ check(c, "a", "{w=0,p=1}", "a")
+ check(c, " 10", "{w=10}", 10)
+ check(c, "0000000010", "{p=0,w=10}", 10)
+ check(c, "4294967295", "{p=0,w=10}", (-1 : uint))
+ check(c, "-000000001", "{p=0,w=10}", -1)
+ check(c, "xxxxxxxx-1", "{p=x,w=10}", -1)
+ check(c, " -1", "{w=10}", -1)
+ check(c, "100000" , "{w=3}", 100000)
+ check(c, "foobarbaz", "{}bar{}", "foo", "baz")
+ check(c, "\\n\\r\\xff", "{e}", "\n\r\xff")
+ check(c, "{}barbaz", "{{}}bar{}", "baz")
+ check(c, "{barbaz}", "{{bar{}}}", "baz")
+ check(c, " Tlön", "{w=10}", "Tlön")
+ check(c, " háček", "{w=10}", "háček")
+ check(c, "_____即是多多即", "{w=15,p=_}", "即是多多即")
+ check(c, " τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
+ check(c, "abcd", "{}", "abcd")
+ check(c, "123", "{}", 123)
+ check(c, "7b", "{x}", 123)
+ check(c, "0x7b", "0x{x}", 123)
+ check(c, "0.0", "{}", 0.0)
+ check(c, "-0.0", "{}", -0.0)
+ check(c, "0.3", "{}", 0.3)
+ check(c, "0.3", "{}", (0.3 : flt32))
+ check(c, "1.0", "{}", 1.0)
+ check(c, "100.0", "{}", 100.0)
+ check(c, "666.91972", "{}", 666.91972)
+ check(c, "1.0001", "{}", 1.0001)
+ check(c, "0.000101323461002", "{}", 0.000101323461002)
+ check(c, "(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
/* tricky cases: min values for integers */
- check("-128", "{}", (-128 : int8))
- check("-32768", "{}", (-32768 : int16))
- check("-2147483648", "{}", (-2147483648 : int32))
- check("-9223372036854775808", "{}", -9223372036854775808l)
+ check(c, "-128", "{}", (-128 : int8))
+ check(c, "-32768", "{}", (-32768 : int16))
+ check(c, "-2147483648", "{}", (-2147483648 : int32))
+ check(c, "-9223372036854775808", "{}", -9223372036854775808l)
/*
compound types, followed by single value to make
sure we consume the right byte count.
*/
- check("(1, 2) true", "{} {}", (1, 2), true)
- check("(1,) true", "{} {}", (1,), true)
+ check(c, "(1, 2) true", "{} {}", (1, 2), true)
+ check(c, "(1,) true", "{} {}", (1,), true)
s = [.a="foo true", .b=123]
- /*check("[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
+ /*check(c, "[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
m = `First
- check("`First true", "{} {}", m, true)
+ check(c, "`First true", "{} {}", m, true)
m = `Second 123
- check("`Second 123 true", "{} {}", m, true)
+ check(c, "`Second 123 true", "{} {}", m, true)
m = `Third "foo"
- check("`Third foo true", "{} {}", m, true)
+ check(c, "`Third foo true", "{} {}", m, true)
- check("[1, 2, 3] true", "{} {}", [1,2,3], true)
- check("[1, 2, 3] true", "{} {}", [1,2,3][:], true)
- check("1:2:3 true", "{j=:} {}", [1,2,3][:], true)
- check("1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
- check("1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
- check("1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3][:], true)
+ check(c, "1:2:3 true", "{j=:} {}", [1,2,3][:], true)
+ check(c, "1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
+ check(c, "1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
+ check(c, "1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
- check("[]", "{}", v[:0])
- check("[void]", "{}", v[:1])
- check("[void, void]", "{}", v[:2])
+ check(c, "[]", "{}", v[:0])
+ check(c, "[void]", "{}", v[:1])
+ check(c, "[void, void]", "{}", v[:2])
}
-const installed = {
+const installed = {c
var x : int
var p : pair
@@ -121,32 +125,32 @@
std.fmtinstall(std.typeof(p), pairfmt)
/* single value */
- check("formatted an int: 0", "{}", 0)
- check("formatted an int: -10", "{}", -10)
+ check(c, "formatted an int: 0", "{}", 0)
+ check(c, "formatted an int: -10", "{}", -10)
/* multiple values */
- check("formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
- check("formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
+ check(c, "formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
+ check(c, "formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
/* single value, no options */
p = [.x=0, .y=0]
- check("formatted a pair: [0, 0]", "{}", p)
+ check(c, "formatted a pair: [0, 0]", "{}", p)
/* single value, option combos */
p = [.x=-10, .y=-10]
- check("formatted a pair: [-10, -10]", "{}", p)
- check("formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
- check("formatted a pair: [-10, -10] y present", "{y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10]", "{}", p)
+ check(c, "formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
+ check(c, "formatted a pair: [-10, -10] y present", "{y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
/* multiple values */
- check("formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
+ check(c, "formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
/* multiple values of different types */
- check("11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
+ check(c, "11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
/* in aggregates */
- check("[formatted a pair: [-10, -10]]", "{}", [p])
- check("[formatted a pair: [-10, -10]]", "{}", [p][:])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p][:])
}
diff -u a/lib/std/test/fmt.myr b/lib/std/test/fmt.myr
--- a/lib/std/test/fmt.myr
+++ b/lib/std/test/fmt.myr
@@ -1,5 +1,14 @@
use std
+use testr
+
+const main = {
+ testr.run([
+ [.name="builtins", .fn=builtins ],
+ [.name="installed", .fn=installed],
+ ][:])
+}
+
type blah
type blah = struct
a : byte[:]
@@ -15,7 +24,7 @@
y : int32
;;
-const check = {expected, fmt, args : ...
+const check = {c, expected, fmt, args : ...
var buf : byte[2048]
var sl, ap
@@ -22,7 +31,7 @@
ap = std.vastart(&args)
sl = std.bfmtv(buf[:], fmt, &ap)
if !std.eq(expected, sl)
- std.fatal("mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
+ testr.fail(c, "mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
;;
}
@@ -31,87 +40,82 @@
`Bar int64
;;
-const main = {
- builtins()
- installed()
-}
-
-const builtins = {
+const builtins = {c
var s : blah
var m : u
var v = [void, void][:]
/* basic types */
- check(" abcd", "{w=10}", "abcd")
- check("00000bdcae", "{p=0,w=10}", "bdcae")
- check("abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
- check("a", "{w=0,p=1}", "a")
- check(" 10", "{w=10}", 10)
- check("0000000010", "{p=0,w=10}", 10)
- check("4294967295", "{p=0,w=10}", (-1 : uint))
- check("-000000001", "{p=0,w=10}", -1)
- check("xxxxxxxx-1", "{p=x,w=10}", -1)
- check(" -1", "{w=10}", -1)
- check("100000" , "{w=3}", 100000)
- check("foobarbaz", "{}bar{}", "foo", "baz")
- check("\\n\\r\\xff", "{e}", "\n\r\xff")
- check("{}barbaz", "{{}}bar{}", "baz")
- check("{barbaz}", "{{bar{}}}", "baz")
- check(" Tlön", "{w=10}", "Tlön")
- check(" háček", "{w=10}", "háček")
- check("_____即是多多即", "{w=15,p=_}", "即是多多即")
- check(" τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
- check("abcd", "{}", "abcd")
- check("123", "{}", 123)
- check("7b", "{x}", 123)
- check("0x7b", "0x{x}", 123)
- check("0.0", "{}", 0.0)
- check("-0.0", "{}", -0.0)
- check("0.3", "{}", 0.3)
- check("0.3", "{}", (0.3 : flt32))
- check("1.0", "{}", 1.0)
- check("100.0", "{}", 100.0)
- check("666.91972", "{}", 666.91972)
- check("1.0001", "{}", 1.0001)
- check("0.000101323461002", "{}", 0.000101323461002)
- check("(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
+ check(c, " abcd", "{w=10}", "abcd")
+ check(c, "00000bdcae", "{p=0,w=10}", "bdcae")
+ check(c, "abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
+ check(c, "a", "{w=0,p=1}", "a")
+ check(c, " 10", "{w=10}", 10)
+ check(c, "0000000010", "{p=0,w=10}", 10)
+ check(c, "4294967295", "{p=0,w=10}", (-1 : uint))
+ check(c, "-000000001", "{p=0,w=10}", -1)
+ check(c, "xxxxxxxx-1", "{p=x,w=10}", -1)
+ check(c, " -1", "{w=10}", -1)
+ check(c, "100000" , "{w=3}", 100000)
+ check(c, "foobarbaz", "{}bar{}", "foo", "baz")
+ check(c, "\\n\\r\\xff", "{e}", "\n\r\xff")
+ check(c, "{}barbaz", "{{}}bar{}", "baz")
+ check(c, "{barbaz}", "{{bar{}}}", "baz")
+ check(c, " Tlön", "{w=10}", "Tlön")
+ check(c, " háček", "{w=10}", "háček")
+ check(c, "_____即是多多即", "{w=15,p=_}", "即是多多即")
+ check(c, " τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
+ check(c, "abcd", "{}", "abcd")
+ check(c, "123", "{}", 123)
+ check(c, "7b", "{x}", 123)
+ check(c, "0x7b", "0x{x}", 123)
+ check(c, "0.0", "{}", 0.0)
+ check(c, "-0.0", "{}", -0.0)
+ check(c, "0.3", "{}", 0.3)
+ check(c, "0.3", "{}", (0.3 : flt32))
+ check(c, "1.0", "{}", 1.0)
+ check(c, "100.0", "{}", 100.0)
+ check(c, "666.91972", "{}", 666.91972)
+ check(c, "1.0001", "{}", 1.0001)
+ check(c, "0.000101323461002", "{}", 0.000101323461002)
+ check(c, "(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
/* tricky cases: min values for integers */
- check("-128", "{}", (-128 : int8))
- check("-32768", "{}", (-32768 : int16))
- check("-2147483648", "{}", (-2147483648 : int32))
- check("-9223372036854775808", "{}", -9223372036854775808l)
+ check(c, "-128", "{}", (-128 : int8))
+ check(c, "-32768", "{}", (-32768 : int16))
+ check(c, "-2147483648", "{}", (-2147483648 : int32))
+ check(c, "-9223372036854775808", "{}", -9223372036854775808l)
/*
compound types, followed by single value to make
sure we consume the right byte count.
*/
- check("(1, 2) true", "{} {}", (1, 2), true)
- check("(1,) true", "{} {}", (1,), true)
+ check(c, "(1, 2) true", "{} {}", (1, 2), true)
+ check(c, "(1,) true", "{} {}", (1,), true)
s = [.a="foo true", .b=123]
- /*check("[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
+ /*check(c, "[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
m = `First
- check("`First true", "{} {}", m, true)
+ check(c, "`First true", "{} {}", m, true)
m = `Second 123
- check("`Second 123 true", "{} {}", m, true)
+ check(c, "`Second 123 true", "{} {}", m, true)
m = `Third "foo"
- check("`Third foo true", "{} {}", m, true)
+ check(c, "`Third foo true", "{} {}", m, true)
- check("[1, 2, 3] true", "{} {}", [1,2,3], true)
- check("[1, 2, 3] true", "{} {}", [1,2,3][:], true)
- check("1:2:3 true", "{j=:} {}", [1,2,3][:], true)
- check("1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
- check("1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
- check("1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3][:], true)
+ check(c, "1:2:3 true", "{j=:} {}", [1,2,3][:], true)
+ check(c, "1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
+ check(c, "1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
+ check(c, "1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
- check("[]", "{}", v[:0])
- check("[void]", "{}", v[:1])
- check("[void, void]", "{}", v[:2])
+ check(c, "[]", "{}", v[:0])
+ check(c, "[void]", "{}", v[:1])
+ check(c, "[void, void]", "{}", v[:2])
}
-const installed = {
+const installed = {c
var x : int
var p : pair
@@ -121,32 +125,32 @@
std.fmtinstall(std.typeof(p), pairfmt)
/* single value */
- check("formatted an int: 0", "{}", 0)
- check("formatted an int: -10", "{}", -10)
+ check(c, "formatted an int: 0", "{}", 0)
+ check(c, "formatted an int: -10", "{}", -10)
/* multiple values */
- check("formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
- check("formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
+ check(c, "formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
+ check(c, "formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
/* single value, no options */
p = [.x=0, .y=0]
- check("formatted a pair: [0, 0]", "{}", p)
+ check(c, "formatted a pair: [0, 0]", "{}", p)
/* single value, option combos */
p = [.x=-10, .y=-10]
- check("formatted a pair: [-10, -10]", "{}", p)
- check("formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
- check("formatted a pair: [-10, -10] y present", "{y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10]", "{}", p)
+ check(c, "formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
+ check(c, "formatted a pair: [-10, -10] y present", "{y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
/* multiple values */
- check("formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
+ check(c, "formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
/* multiple values of different types */
- check("11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
+ check(c, "11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
/* in aggregates */
- check("[formatted a pair: [-10, -10]]", "{}", [p])
- check("[formatted a pair: [-10, -10]]", "{}", [p][:])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p][:])
}
diff -u a/lib/std/test/fmt.myr b/lib/std/test/fmt.myr
--- a/lib/std/test/fmt.myr
+++ b/lib/std/test/fmt.myr
@@ -1,5 +1,14 @@
use std
+use testr
+
+const main = {
+ testr.run([
+ [.name="builtins", .fn=builtins ],
+ [.name="installed", .fn=installed],
+ ][:])
+}
+
type blah
type blah = struct
a : byte[:]
@@ -15,7 +24,7 @@
y : int32
;;
-const check = {expected, fmt, args : ...
+const check = {c, expected, fmt, args : ...
var buf : byte[2048]
var sl, ap
@@ -22,7 +31,7 @@
ap = std.vastart(&args)
sl = std.bfmtv(buf[:], fmt, &ap)
if !std.eq(expected, sl)
- std.fatal("mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
+ testr.fail(c, "mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
;;
}
@@ -31,87 +40,82 @@
`Bar int64
;;
-const main = {
- builtins()
- installed()
-}
-
-const builtins = {
+const builtins = {c
var s : blah
var m : u
var v = [void, void][:]
/* basic types */
- check(" abcd", "{w=10}", "abcd")
- check("00000bdcae", "{p=0,w=10}", "bdcae")
- check("abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
- check("a", "{w=0,p=1}", "a")
- check(" 10", "{w=10}", 10)
- check("0000000010", "{p=0,w=10}", 10)
- check("4294967295", "{p=0,w=10}", (-1 : uint))
- check("-000000001", "{p=0,w=10}", -1)
- check("xxxxxxxx-1", "{p=x,w=10}", -1)
- check(" -1", "{w=10}", -1)
- check("100000" , "{w=3}", 100000)
- check("foobarbaz", "{}bar{}", "foo", "baz")
- check("\\n\\r\\xff", "{e}", "\n\r\xff")
- check("{}barbaz", "{{}}bar{}", "baz")
- check("{barbaz}", "{{bar{}}}", "baz")
- check(" Tlön", "{w=10}", "Tlön")
- check(" háček", "{w=10}", "háček")
- check("_____即是多多即", "{w=15,p=_}", "即是多多即")
- check(" τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
- check("abcd", "{}", "abcd")
- check("123", "{}", 123)
- check("7b", "{x}", 123)
- check("0x7b", "0x{x}", 123)
- check("0.0", "{}", 0.0)
- check("-0.0", "{}", -0.0)
- check("0.3", "{}", 0.3)
- check("0.3", "{}", (0.3 : flt32))
- check("1.0", "{}", 1.0)
- check("100.0", "{}", 100.0)
- check("666.91972", "{}", 666.91972)
- check("1.0001", "{}", 1.0001)
- check("0.000101323461002", "{}", 0.000101323461002)
- check("(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
+ check(c, " abcd", "{w=10}", "abcd")
+ check(c, "00000bdcae", "{p=0,w=10}", "bdcae")
+ check(c, "abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
+ check(c, "a", "{w=0,p=1}", "a")
+ check(c, " 10", "{w=10}", 10)
+ check(c, "0000000010", "{p=0,w=10}", 10)
+ check(c, "4294967295", "{p=0,w=10}", (-1 : uint))
+ check(c, "-000000001", "{p=0,w=10}", -1)
+ check(c, "xxxxxxxx-1", "{p=x,w=10}", -1)
+ check(c, " -1", "{w=10}", -1)
+ check(c, "100000" , "{w=3}", 100000)
+ check(c, "foobarbaz", "{}bar{}", "foo", "baz")
+ check(c, "\\n\\r\\xff", "{e}", "\n\r\xff")
+ check(c, "{}barbaz", "{{}}bar{}", "baz")
+ check(c, "{barbaz}", "{{bar{}}}", "baz")
+ check(c, " Tlön", "{w=10}", "Tlön")
+ check(c, " háček", "{w=10}", "háček")
+ check(c, "_____即是多多即", "{w=15,p=_}", "即是多多即")
+ check(c, " τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
+ check(c, "abcd", "{}", "abcd")
+ check(c, "123", "{}", 123)
+ check(c, "7b", "{x}", 123)
+ check(c, "0x7b", "0x{x}", 123)
+ check(c, "0.0", "{}", 0.0)
+ check(c, "-0.0", "{}", -0.0)
+ check(c, "0.3", "{}", 0.3)
+ check(c, "0.3", "{}", (0.3 : flt32))
+ check(c, "1.0", "{}", 1.0)
+ check(c, "100.0", "{}", 100.0)
+ check(c, "666.91972", "{}", 666.91972)
+ check(c, "1.0001", "{}", 1.0001)
+ check(c, "0.000101323461002", "{}", 0.000101323461002)
+ check(c, "(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
/* tricky cases: min values for integers */
- check("-128", "{}", (-128 : int8))
- check("-32768", "{}", (-32768 : int16))
- check("-2147483648", "{}", (-2147483648 : int32))
- check("-9223372036854775808", "{}", -9223372036854775808l)
+ check(c, "-128", "{}", (-128 : int8))
+ check(c, "-32768", "{}", (-32768 : int16))
+ check(c, "-2147483648", "{}", (-2147483648 : int32))
+ check(c, "-9223372036854775808", "{}", -9223372036854775808l)
/*
compound types, followed by single value to make
sure we consume the right byte count.
*/
- check("(1, 2) true", "{} {}", (1, 2), true)
- check("(1,) true", "{} {}", (1,), true)
+ check(c, "(1, 2) true", "{} {}", (1, 2), true)
+ check(c, "(1,) true", "{} {}", (1,), true)
s = [.a="foo true", .b=123]
- /*check("[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
+ /*check(c, "[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
m = `First
- check("`First true", "{} {}", m, true)
+ check(c, "`First true", "{} {}", m, true)
m = `Second 123
- check("`Second 123 true", "{} {}", m, true)
+ check(c, "`Second 123 true", "{} {}", m, true)
m = `Third "foo"
- check("`Third foo true", "{} {}", m, true)
+ check(c, "`Third foo true", "{} {}", m, true)
- check("[1, 2, 3] true", "{} {}", [1,2,3], true)
- check("[1, 2, 3] true", "{} {}", [1,2,3][:], true)
- check("1:2:3 true", "{j=:} {}", [1,2,3][:], true)
- check("1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
- check("1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
- check("1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3][:], true)
+ check(c, "1:2:3 true", "{j=:} {}", [1,2,3][:], true)
+ check(c, "1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
+ check(c, "1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
+ check(c, "1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
- check("[]", "{}", v[:0])
- check("[void]", "{}", v[:1])
- check("[void, void]", "{}", v[:2])
+ check(c, "[]", "{}", v[:0])
+ check(c, "[void]", "{}", v[:1])
+ check(c, "[void, void]", "{}", v[:2])
}
-const installed = {
+const installed = {c
var x : int
var p : pair
@@ -121,32 +125,32 @@
std.fmtinstall(std.typeof(p), pairfmt)
/* single value */
- check("formatted an int: 0", "{}", 0)
- check("formatted an int: -10", "{}", -10)
+ check(c, "formatted an int: 0", "{}", 0)
+ check(c, "formatted an int: -10", "{}", -10)
/* multiple values */
- check("formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
- check("formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
+ check(c, "formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
+ check(c, "formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
/* single value, no options */
p = [.x=0, .y=0]
- check("formatted a pair: [0, 0]", "{}", p)
+ check(c, "formatted a pair: [0, 0]", "{}", p)
/* single value, option combos */
p = [.x=-10, .y=-10]
- check("formatted a pair: [-10, -10]", "{}", p)
- check("formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
- check("formatted a pair: [-10, -10] y present", "{y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10]", "{}", p)
+ check(c, "formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
+ check(c, "formatted a pair: [-10, -10] y present", "{y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
/* multiple values */
- check("formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
+ check(c, "formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
/* multiple values of different types */
- check("11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
+ check(c, "11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
/* in aggregates */
- check("[formatted a pair: [-10, -10]]", "{}", [p])
- check("[formatted a pair: [-10, -10]]", "{}", [p][:])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p][:])
}
--- a/lib/std/test/fmt.myr
+++ b/lib/std/test/fmt.myr
@@ -1,5 +1,14 @@
use std
+use testr
+
+const main = {
+ testr.run([
+ [.name="builtins", .fn=builtins ],
+ [.name="installed", .fn=installed],
+ ][:])
+}
+
type blah
type blah = struct
a : byte[:]
@@ -15,7 +24,7 @@
y : int32
;;
-const check = {expected, fmt, args : ...
+const check = {c, expected, fmt, args : ...
var buf : byte[2048]
var sl, ap
@@ -22,7 +31,7 @@
ap = std.vastart(&args)
sl = std.bfmtv(buf[:], fmt, &ap)
if !std.eq(expected, sl)
- std.fatal("mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
+ testr.fail(c, "mismatched fmt: got \"{}\", expected \"{}\"\n", sl, expected)
;;
}
@@ -31,87 +40,82 @@
`Bar int64
;;
-const main = {
- builtins()
- installed()
-}
-
-const builtins = {
+const builtins = {c
var s : blah
var m : u
var v = [void, void][:]
/* basic types */
- check(" abcd", "{w=10}", "abcd")
- check("00000bdcae", "{p=0,w=10}", "bdcae")
- check("abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
- check("a", "{w=0,p=1}", "a")
- check(" 10", "{w=10}", 10)
- check("0000000010", "{p=0,w=10}", 10)
- check("4294967295", "{p=0,w=10}", (-1 : uint))
- check("-000000001", "{p=0,w=10}", -1)
- check("xxxxxxxx-1", "{p=x,w=10}", -1)
- check(" -1", "{w=10}", -1)
- check("100000" , "{w=3}", 100000)
- check("foobarbaz", "{}bar{}", "foo", "baz")
- check("\\n\\r\\xff", "{e}", "\n\r\xff")
- check("{}barbaz", "{{}}bar{}", "baz")
- check("{barbaz}", "{{bar{}}}", "baz")
- check(" Tlön", "{w=10}", "Tlön")
- check(" háček", "{w=10}", "háček")
- check("_____即是多多即", "{w=15,p=_}", "即是多多即")
- check(" τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
- check("abcd", "{}", "abcd")
- check("123", "{}", 123)
- check("7b", "{x}", 123)
- check("0x7b", "0x{x}", 123)
- check("0.0", "{}", 0.0)
- check("-0.0", "{}", -0.0)
- check("0.3", "{}", 0.3)
- check("0.3", "{}", (0.3 : flt32))
- check("1.0", "{}", 1.0)
- check("100.0", "{}", 100.0)
- check("666.91972", "{}", 666.91972)
- check("1.0001", "{}", 1.0001)
- check("0.000101323461002", "{}", 0.000101323461002)
- check("(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
+ check(c, " abcd", "{w=10}", "abcd")
+ check(c, "00000bdcae", "{p=0,w=10}", "bdcae")
+ check(c, "abcdefghijkl", "{p=0,w=10}", "abcdefghijkl")
+ check(c, "a", "{w=0,p=1}", "a")
+ check(c, " 10", "{w=10}", 10)
+ check(c, "0000000010", "{p=0,w=10}", 10)
+ check(c, "4294967295", "{p=0,w=10}", (-1 : uint))
+ check(c, "-000000001", "{p=0,w=10}", -1)
+ check(c, "xxxxxxxx-1", "{p=x,w=10}", -1)
+ check(c, " -1", "{w=10}", -1)
+ check(c, "100000" , "{w=3}", 100000)
+ check(c, "foobarbaz", "{}bar{}", "foo", "baz")
+ check(c, "\\n\\r\\xff", "{e}", "\n\r\xff")
+ check(c, "{}barbaz", "{{}}bar{}", "baz")
+ check(c, "{barbaz}", "{{bar{}}}", "baz")
+ check(c, " Tlön", "{w=10}", "Tlön")
+ check(c, " háček", "{w=10}", "háček")
+ check(c, "_____即是多多即", "{w=15,p=_}", "即是多多即")
+ check(c, " τῶν ῾Ελλήνων", "{w=15}", "τῶν ῾Ελλήνων")
+ check(c, "abcd", "{}", "abcd")
+ check(c, "123", "{}", 123)
+ check(c, "7b", "{x}", 123)
+ check(c, "0x7b", "0x{x}", 123)
+ check(c, "0.0", "{}", 0.0)
+ check(c, "-0.0", "{}", -0.0)
+ check(c, "0.3", "{}", 0.3)
+ check(c, "0.3", "{}", (0.3 : flt32))
+ check(c, "1.0", "{}", 1.0)
+ check(c, "100.0", "{}", 100.0)
+ check(c, "666.91972", "{}", 666.91972)
+ check(c, "1.0001", "{}", 1.0001)
+ check(c, "0.000101323461002", "{}", 0.000101323461002)
+ check(c, "(1, `Bar 123, `Foo)", "{}", (1, `Bar 123, `Foo))
/* tricky cases: min values for integers */
- check("-128", "{}", (-128 : int8))
- check("-32768", "{}", (-32768 : int16))
- check("-2147483648", "{}", (-2147483648 : int32))
- check("-9223372036854775808", "{}", -9223372036854775808l)
+ check(c, "-128", "{}", (-128 : int8))
+ check(c, "-32768", "{}", (-32768 : int16))
+ check(c, "-2147483648", "{}", (-2147483648 : int32))
+ check(c, "-9223372036854775808", "{}", -9223372036854775808l)
/*
compound types, followed by single value to make
sure we consume the right byte count.
*/
- check("(1, 2) true", "{} {}", (1, 2), true)
- check("(1,) true", "{} {}", (1,), true)
+ check(c, "(1, 2) true", "{} {}", (1, 2), true)
+ check(c, "(1,) true", "{} {}", (1,), true)
s = [.a="foo true", .b=123]
- /*check("[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
+ /*check(c, "[.a=foo, .b=123] true", "{} {}", s, true) BUSTED */
m = `First
- check("`First true", "{} {}", m, true)
+ check(c, "`First true", "{} {}", m, true)
m = `Second 123
- check("`Second 123 true", "{} {}", m, true)
+ check(c, "`Second 123 true", "{} {}", m, true)
m = `Third "foo"
- check("`Third foo true", "{} {}", m, true)
+ check(c, "`Third foo true", "{} {}", m, true)
- check("[1, 2, 3] true", "{} {}", [1,2,3], true)
- check("[1, 2, 3] true", "{} {}", [1,2,3][:], true)
- check("1:2:3 true", "{j=:} {}", [1,2,3][:], true)
- check("1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
- check("1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
- check("1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3], true)
+ check(c, "[1, 2, 3] true", "{} {}", [1,2,3][:], true)
+ check(c, "1:2:3 true", "{j=:} {}", [1,2,3][:], true)
+ check(c, "1,2,3 true", "{j=\\,} {}", [1,2,3][:], true)
+ check(c, "1}2}3 true", "{j=\\}} {}", [1,2,3][:], true)
+ check(c, "1... 2... 3 true", "{j=... } {}", [1,2,3][:], true)
- check("[]", "{}", v[:0])
- check("[void]", "{}", v[:1])
- check("[void, void]", "{}", v[:2])
+ check(c, "[]", "{}", v[:0])
+ check(c, "[void]", "{}", v[:1])
+ check(c, "[void, void]", "{}", v[:2])
}
-const installed = {
+const installed = {c
var x : int
var p : pair
@@ -121,32 +125,32 @@
std.fmtinstall(std.typeof(p), pairfmt)
/* single value */
- check("formatted an int: 0", "{}", 0)
- check("formatted an int: -10", "{}", -10)
+ check(c, "formatted an int: 0", "{}", 0)
+ check(c, "formatted an int: -10", "{}", -10)
/* multiple values */
- check("formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
- check("formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
+ check(c, "formatted an int: 0, formatted an int: 10", "{}, {}", 0, 10)
+ check(c, "formatted an int: -10, formatted an int: 20", "{}, {}", -10, 20)
/* single value, no options */
p = [.x=0, .y=0]
- check("formatted a pair: [0, 0]", "{}", p)
+ check(c, "formatted a pair: [0, 0]", "{}", p)
/* single value, option combos */
p = [.x=-10, .y=-10]
- check("formatted a pair: [-10, -10]", "{}", p)
- check("formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
- check("formatted a pair: [-10, -10] y present", "{y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
- check("formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10]", "{}", p)
+ check(c, "formatted a pair: [-10, -10] x=foo", "{x=foo}", p)
+ check(c, "formatted a pair: [-10, -10] y present", "{y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
+ check(c, "formatted a pair: [-10, -10] x=bar y present", "{x=bar,y}", p)
/* multiple values */
- check("formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
+ check(c, "formatted a pair: [-10, -10], formatted a pair: [-10, -10]", "{}, {}", p, p)
/* multiple values of different types */
- check("11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
+ check(c, "11, formatted a pair: [-10, -10], formatted an int: 111", "{}, {}, {}", (11 : byte), p, 111)
/* in aggregates */
- check("[formatted a pair: [-10, -10]]", "{}", [p])
- check("[formatted a pair: [-10, -10]]", "{}", [p][:])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p])
+ check(c, "[formatted a pair: [-10, -10]]", "{}", [p][:])
}
--- /dev/null
+++ b/test/matchctup.myr
@@ -1,0 +1,32 @@
+use std
+
+const main = {
+ match (gen_a(), gen_b())
+ | (`std.Err _, _): std.put("error case 1")
+ | (_, `std.Err _): std.put("error case 2")
+ | (`std.Ok L, `std.Ok N):
+ std.put("l = {} n = {}\n", L, N)
+ ;;
+}
+
+var gen_a : (-> std.result(byte[:][:], void)) = {
+ var ret = [][:]
+
+ for var j = 0; j < 4; ++j
+ std.slpush(&ret, std.fmt("{}", j))
+ ;;
+
+ if 1 + 1 > 3
+ -> `std.Err void
+ ;;
+
+ -> `std.Ok ret
+}
+
+var gen_b : (-> std.result(int, void)) = {
+ if 1 + 1 > 3
+ -> `std.Err void
+ ;;
+
+ -> `std.Ok 5
+}