summaryrefslogtreecommitdiff
path: root/go/reverse-string/reverse_string_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/reverse-string/reverse_string_test.go')
-rw-r--r--go/reverse-string/reverse_string_test.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/go/reverse-string/reverse_string_test.go b/go/reverse-string/reverse_string_test.go
new file mode 100644
index 0000000..70c1e77
--- /dev/null
+++ b/go/reverse-string/reverse_string_test.go
@@ -0,0 +1,44 @@
+package reverse
+
+import (
+ "testing"
+ "testing/quick"
+)
+
+func TestReverse(t *testing.T) {
+ for _, testCase := range append(testCases, multiByteCases...) {
+ if res := String(testCase.input); res != testCase.expected {
+ t.Fatalf("FAIL: %s(%s)\nExpected: %q\nActual: %q",
+ testCase.description, testCase.input, testCase.expected, res)
+ }
+ t.Logf("PASS: %s", testCase.description)
+ }
+}
+
+func TestReverseOfReverse(t *testing.T) {
+ assertion := func(s string) bool {
+ return s == String(String(s))
+ }
+ if err := quick.Check(assertion, nil); err != nil {
+ t.Fatal(err)
+ }
+}
+
+func BenchmarkReverse(b *testing.B) {
+ for i := 0; i < b.N; i++ {
+ for _, test := range testCases {
+ String(test.input)
+ }
+ }
+}
+
+// mutiByteCases adds UTF-8 multi-byte case,
+// since the canonical-data.json (generator data source for cases_test.go)
+// doesn't have any such cases.
+var multiByteCases = []reverseTestCase{
+ {
+ description: "a multi-byte test case",
+ input: "Hello, 世界",
+ expected: "界世 ,olleH",
+ },
+}