summaryrefslogtreecommitdiff
path: root/src/lib/fmt/fmt_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/fmt/fmt_test.go')
-rw-r--r--src/lib/fmt/fmt_test.go164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/lib/fmt/fmt_test.go b/src/lib/fmt/fmt_test.go
new file mode 100644
index 000000000..ec1e9951b
--- /dev/null
+++ b/src/lib/fmt/fmt_test.go
@@ -0,0 +1,164 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package fmt
+
+import (
+ "fmt";
+ "syscall";
+ "testing";
+)
+
+export func TestFmtInterface(t *testing.T) {
+ var i1 interface{};
+ i1 = "abc";
+ s := fmt.sprintf("%s", i1);
+ if s != "abc" {
+ t.Errorf(`fmt.sprintf("%%s", empty("abc")) = %q want %q`, s, "abc");
+ }
+}
+
+type FmtTest struct {
+ fmt string;
+ val interface { };
+ out string;
+}
+
+func Bytes(s string) *[]byte {
+ b := new([]byte, len(s)+1);
+ syscall.StringToBytes(b, s);
+ return b[0:len(s)];
+}
+
+const B32 uint32 = 1<<32 - 1
+const B64 uint64 = 1<<64 - 1
+
+var fmttests = []FmtTest{
+ // basic string
+ FmtTest{ "%s", "abc", "abc" },
+ FmtTest{ "%x", "abc", "616263" },
+ FmtTest{ "%x", "xyz", "78797a" },
+ FmtTest{ "%X", "xyz", "78797A" },
+ FmtTest{ "%q", "abc", `"abc"` },
+
+ // basic bytes
+ FmtTest{ "%s", Bytes("abc"), "abc" },
+ FmtTest{ "%x", Bytes("abc"), "616263" },
+ FmtTest{ "%x", Bytes("xyz"), "78797a" },
+ FmtTest{ "%X", Bytes("xyz"), "78797A" },
+ FmtTest{ "%q", Bytes("abc"), `"abc"` },
+
+ // escaped strings
+ FmtTest{ "%#q", `abc`, "`abc`" },
+ FmtTest{ "%#q", `"`, "`\"`" },
+ FmtTest{ "1 %#q", `\n`, "1 `\\n`" },
+ FmtTest{ "2 %#q", "\n", `2 "\n"` },
+ FmtTest{ "%q", `"`, `"\""` },
+ FmtTest{ "%q", "\a\b\f\r\n\t\v", `"\a\b\f\r\n\t\v"` },
+ FmtTest{ "%q", "abc\xffdef", `"abc\xffdef"` },
+ FmtTest{ "%q", "\u263a", `"\u263a"` },
+ FmtTest{ "%q", "\U0010ffff", `"\U0010ffff"` },
+
+ // width
+ FmtTest{ "%5s", "abc", " abc" },
+ FmtTest{ "%-5s", "abc", "abc " },
+ FmtTest{ "%05s", "abc", "00abc" },
+
+ // integers
+ FmtTest{ "%d", 12345, "12345" },
+ FmtTest{ "%d", -12345, "-12345" },
+ FmtTest{ "%10d", 12345, " 12345" },
+ FmtTest{ "%10d", -12345, " -12345" },
+ FmtTest{ "%+10d", 12345, " +12345" },
+ FmtTest{ "%010d", 12345, "0000012345" },
+ FmtTest{ "%010d", -12345, "-000012345" },
+ FmtTest{ "%-10d", 12345, "12345 " },
+ FmtTest{ "%010.3d", 1, " 001" },
+ FmtTest{ "%010.3d", -1, " -001" },
+ FmtTest{ "%+d", 12345, "+12345" },
+ FmtTest{ "%+d", -12345, "-12345" },
+ FmtTest{ "% d", 12345, " 12345" },
+ FmtTest{ "% d", -12345, "-12345" },
+
+ // old test/fmt_test.go
+ FmtTest{ "%d", 1234, "1234" },
+ FmtTest{ "%d", -1234, "-1234" },
+ FmtTest{ "%d", uint(1234), "1234" },
+ FmtTest{ "%d", uint32(B32), "4294967295" },
+ FmtTest{ "%d", uint64(B64), "18446744073709551615" },
+ FmtTest{ "%o", 01234, "1234" },
+ FmtTest{ "%o", uint32(B32), "37777777777" },
+ FmtTest{ "%o", uint64(B64), "1777777777777777777777" },
+ FmtTest{ "%x", 0x1234abcd, "1234abcd" },
+ FmtTest{ "%x", B32-0x1234567, "fedcba98" },
+ FmtTest{ "%X", 0x1234abcd, "1234ABCD" },
+ FmtTest{ "%X", B32-0x1234567, "FEDCBA98" },
+ FmtTest{ "%x", B64, "ffffffffffffffff" },
+ FmtTest{ "%b", 7, "111" },
+ FmtTest{ "%b", B64, "1111111111111111111111111111111111111111111111111111111111111111" },
+ FmtTest{ "%e", float64(1), "1.000000e+00" },
+ FmtTest{ "%e", float64(1234.5678e3), "1.234568e+06" },
+ FmtTest{ "%e", float64(1234.5678e-8), "1.234568e-05" },
+ FmtTest{ "%e", float64(-7), "-7.000000e+00" },
+ FmtTest{ "%e", float64(-1e-9), "-1.000000e-09" },
+ FmtTest{ "%f", float64(1234.5678e3), "1234567.800000" },
+ FmtTest{ "%f", float64(1234.5678e-8), "0.000012" },
+ FmtTest{ "%f", float64(-7), "-7.000000" },
+ FmtTest{ "%f", float64(-1e-9), "-0.000000" },
+ FmtTest{ "%g", float64(1234.5678e3), "1.2345678e+06" },
+ FmtTest{ "%g", float32(1234.5678e3), "1.2345678e+06" },
+ FmtTest{ "%g", float64(1234.5678e-8), "1.2345678e-05" },
+ FmtTest{ "%g", float64(-7), "-7" },
+ FmtTest{ "%g", float64(-1e-9), "-1e-09", },
+ FmtTest{ "%g", float32(-1e-9), "-1e-09" },
+ FmtTest{ "%c", 'x', "x" },
+ FmtTest{ "%c", 0xe4, "ä" },
+ FmtTest{ "%c", 0x672c, "本" },
+ FmtTest{ "%c", '日', "日" },
+ FmtTest{ "%20.8d", 1234, " 00001234" },
+ FmtTest{ "%20.8d", -1234, " -00001234" },
+ FmtTest{ "%20d", 1234, " 1234" },
+ FmtTest{ "%-20.8d", 1234, "00001234 " },
+ FmtTest{ "%-20.8d", -1234, "-00001234 " },
+ FmtTest{ "%.20b", 7, "00000000000000000111" },
+ FmtTest{ "%20.5s", "qwertyuiop", " qwert" },
+ FmtTest{ "%.5s", "qwertyuiop", "qwert" },
+ FmtTest{ "%-20.5s", "qwertyuiop", "qwert " },
+ FmtTest{ "%20c", 'x', " x" },
+ FmtTest{ "%-20c", 'x', "x " },
+ FmtTest{ "%20.6e", 1.2345e3, " 1.234500e+03" },
+ FmtTest{ "%20.6e", 1.2345e-3, " 1.234500e-03" },
+ FmtTest{ "%20e", 1.2345e3, " 1.234500e+03" },
+ FmtTest{ "%20e", 1.2345e-3, " 1.234500e-03" },
+ FmtTest{ "%20.8e", 1.2345e3, " 1.23450000e+03" },
+ FmtTest{ "%20f", float64(1.23456789e3), " 1234.567890" },
+ FmtTest{ "%20f", float64(1.23456789e-3), " 0.001235" },
+ FmtTest{ "%20f", float64(12345678901.23456789), " 12345678901.234568" },
+ FmtTest{ "%-20f", float64(1.23456789e3), "1234.567890 " },
+ FmtTest{ "%20.8f", float64(1.23456789e3), " 1234.56789000" },
+ FmtTest{ "%20.8f", float64(1.23456789e-3), " 0.00123457" },
+ FmtTest{ "%g", float64(1.23456789e3), "1234.56789" },
+ FmtTest{ "%g", float64(1.23456789e-3), "0.00123456789" },
+ FmtTest{ "%g", float64(1.23456789e20), "1.23456789e+20" },
+ FmtTest{ "%20e", sys.Inf(1), " +Inf" },
+ FmtTest{ "%-20f", sys.Inf(-1), "-Inf " },
+ FmtTest{ "%20g", sys.NaN(), " NaN" },
+}
+
+export func TestSprintf(t *testing.T) {
+ for i := 0; i < len(fmttests); i++ {
+ tt := fmttests[i];
+ s := fmt.sprintf(tt.fmt, tt.val);
+ if s != tt.out {
+ if ss, ok := tt.val.(string); ok {
+ // Don't requote the already-quoted strings.
+ // It's too confusing to read the errors.
+ t.Errorf("fmt.sprintf(%q, %q) = %s want %s", tt.fmt, tt.val, s, tt.out);
+ } else {
+ t.Errorf("fmt.sprintf(%q, %v) = %q want %q", tt.fmt, tt.val, s, tt.out);
+ }
+ }
+ }
+}
+