blob: 2c4c2adf55957fe9b9947eca692b1734baaea48a [file] [log] [blame]
Joe Tsai97a87392019-07-07 01:49:59 -07001// Copyright 2019 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package strs
6
7import (
8 "strconv"
9 "testing"
10)
11
12func TestName(t *testing.T) {
13 tests := []struct {
14 in string
15 inEnumPrefix string
16 wantMapEntry string
17 wantEnumValue string
18 wantTrimValue string
19 wantJSONCamelCase string
20 wantJSONSnakeCase string
21 }{{
22 in: "abc",
23 inEnumPrefix: "",
24 wantMapEntry: "AbcEntry",
25 wantEnumValue: "Abc",
26 wantTrimValue: "abc",
27 wantJSONCamelCase: "abc",
28 wantJSONSnakeCase: "abc",
29 }, {
30 in: "foo_baR_",
31 inEnumPrefix: "foo_bar",
32 wantMapEntry: "FooBaREntry",
33 wantEnumValue: "FooBar",
34 wantTrimValue: "foo_baR_",
35 wantJSONCamelCase: "fooBaR",
36 wantJSONSnakeCase: "foo_ba_r_",
37 }, {
38 in: "snake_caseCamelCase",
39 inEnumPrefix: "snakecasecamel",
40 wantMapEntry: "SnakeCaseCamelCaseEntry",
41 wantEnumValue: "SnakeCasecamelcase",
42 wantTrimValue: "Case",
43 wantJSONCamelCase: "snakeCaseCamelCase",
44 wantJSONSnakeCase: "snake_case_camel_case",
45 }, {
46 in: "FiZz_BuZz",
47 inEnumPrefix: "fizz",
48 wantMapEntry: "FiZzBuZzEntry",
49 wantEnumValue: "FizzBuzz",
50 wantTrimValue: "BuZz",
51 wantJSONCamelCase: "FiZzBuZz",
52 wantJSONSnakeCase: "_fi_zz__bu_zz",
53 }}
54
55 for _, tt := range tests {
56 if got := MapEntryName(tt.in); got != tt.wantMapEntry {
57 t.Errorf("MapEntryName(%q) = %q, want %q", tt.in, got, tt.wantMapEntry)
58 }
59 if got := EnumValueName(tt.in); got != tt.wantEnumValue {
60 t.Errorf("EnumValueName(%q) = %q, want %q", tt.in, got, tt.wantEnumValue)
61 }
62 if got := TrimEnumPrefix(tt.in, tt.inEnumPrefix); got != tt.wantTrimValue {
63 t.Errorf("ErimEnumPrefix(%q, %q) = %q, want %q", tt.in, tt.inEnumPrefix, got, tt.wantTrimValue)
64 }
65 if got := JSONCamelCase(tt.in); got != tt.wantJSONCamelCase {
66 t.Errorf("JSONCamelCase(%q) = %q, want %q", tt.in, got, tt.wantJSONCamelCase)
67 }
68 if got := JSONSnakeCase(tt.in); got != tt.wantJSONSnakeCase {
69 t.Errorf("JSONSnakeCase(%q) = %q, want %q", tt.in, got, tt.wantJSONSnakeCase)
70 }
71 }
72}
73
74var (
75 srcString = "1234"
76 srcBytes = []byte(srcString)
77 dst uint64
78)
79
80func BenchmarkCast(b *testing.B) {
81 b.Run("Ideal", func(b *testing.B) {
82 b.ReportAllocs()
83 for i := 0; i < b.N; i++ {
84 dst, _ = strconv.ParseUint(srcString, 0, 64)
85 }
86 if dst != 1234 {
87 b.Errorf("got %d, want %s", dst, srcString)
88 }
89 })
90 b.Run("Copy", func(b *testing.B) {
91 b.ReportAllocs()
92 for i := 0; i < b.N; i++ {
93 dst, _ = strconv.ParseUint(string(srcBytes), 0, 64)
94 }
95 if dst != 1234 {
96 b.Errorf("got %d, want %s", dst, srcString)
97 }
98 })
99 b.Run("Cast", func(b *testing.B) {
100 b.ReportAllocs()
101 for i := 0; i < b.N; i++ {
102 dst, _ = strconv.ParseUint(UnsafeString(srcBytes), 0, 64)
103 }
104 if dst != 1234 {
105 b.Errorf("got %d, want %s", dst, srcString)
106 }
107 })
108}