xref: /aosp_15_r20/external/golang-protobuf/internal/strs/strings_test.go (revision 1c12ee1efe575feb122dbf939ff15148a3b3e8f2)
1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved.
2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style
3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file.
4*1c12ee1eSDan Willemsen
5*1c12ee1eSDan Willemsenpackage strs
6*1c12ee1eSDan Willemsen
7*1c12ee1eSDan Willemsenimport (
8*1c12ee1eSDan Willemsen	"strconv"
9*1c12ee1eSDan Willemsen	"testing"
10*1c12ee1eSDan Willemsen)
11*1c12ee1eSDan Willemsen
12*1c12ee1eSDan Willemsenfunc TestGoCamelCase(t *testing.T) {
13*1c12ee1eSDan Willemsen	tests := []struct {
14*1c12ee1eSDan Willemsen		in, want string
15*1c12ee1eSDan Willemsen	}{
16*1c12ee1eSDan Willemsen		{"", ""},
17*1c12ee1eSDan Willemsen		{"one", "One"},
18*1c12ee1eSDan Willemsen		{"one_two", "OneTwo"},
19*1c12ee1eSDan Willemsen		{"_my_field_name_2", "XMyFieldName_2"},
20*1c12ee1eSDan Willemsen		{"Something_Capped", "Something_Capped"},
21*1c12ee1eSDan Willemsen		{"my_Name", "My_Name"},
22*1c12ee1eSDan Willemsen		{"OneTwo", "OneTwo"},
23*1c12ee1eSDan Willemsen		{"_", "X"},
24*1c12ee1eSDan Willemsen		{"_a_", "XA_"},
25*1c12ee1eSDan Willemsen		{"one.two", "OneTwo"},
26*1c12ee1eSDan Willemsen		{"one.Two", "One_Two"},
27*1c12ee1eSDan Willemsen		{"one_two.three_four", "OneTwoThreeFour"},
28*1c12ee1eSDan Willemsen		{"one_two.Three_four", "OneTwo_ThreeFour"},
29*1c12ee1eSDan Willemsen		{"_one._two", "XOne_XTwo"},
30*1c12ee1eSDan Willemsen		{"SCREAMING_SNAKE_CASE", "SCREAMING_SNAKE_CASE"},
31*1c12ee1eSDan Willemsen		{"double__underscore", "Double_Underscore"},
32*1c12ee1eSDan Willemsen		{"camelCase", "CamelCase"},
33*1c12ee1eSDan Willemsen		{"go2proto", "Go2Proto"},
34*1c12ee1eSDan Willemsen		{"世界", "世界"},
35*1c12ee1eSDan Willemsen		{"x世界", "X世界"},
36*1c12ee1eSDan Willemsen		{"foo_bar世界", "FooBar世界"},
37*1c12ee1eSDan Willemsen	}
38*1c12ee1eSDan Willemsen	for _, tc := range tests {
39*1c12ee1eSDan Willemsen		if got := GoCamelCase(tc.in); got != tc.want {
40*1c12ee1eSDan Willemsen			t.Errorf("GoCamelCase(%q) = %q, want %q", tc.in, got, tc.want)
41*1c12ee1eSDan Willemsen		}
42*1c12ee1eSDan Willemsen	}
43*1c12ee1eSDan Willemsen}
44*1c12ee1eSDan Willemsen
45*1c12ee1eSDan Willemsenfunc TestGoSanitized(t *testing.T) {
46*1c12ee1eSDan Willemsen	tests := []struct {
47*1c12ee1eSDan Willemsen		in, want string
48*1c12ee1eSDan Willemsen	}{
49*1c12ee1eSDan Willemsen		{"", "_"},
50*1c12ee1eSDan Willemsen		{"boo", "boo"},
51*1c12ee1eSDan Willemsen		{"Boo", "Boo"},
52*1c12ee1eSDan Willemsen		{"ßoo", "ßoo"},
53*1c12ee1eSDan Willemsen		{"default", "_default"},
54*1c12ee1eSDan Willemsen		{"hello", "hello"},
55*1c12ee1eSDan Willemsen		{"hello-world!!", "hello_world__"},
56*1c12ee1eSDan Willemsen		{"hello-\xde\xad\xbe\xef\x00", "hello_____"},
57*1c12ee1eSDan Willemsen		{"hello 世界", "hello_世界"},
58*1c12ee1eSDan Willemsen		{"世界", "世界"},
59*1c12ee1eSDan Willemsen	}
60*1c12ee1eSDan Willemsen	for _, tc := range tests {
61*1c12ee1eSDan Willemsen		if got := GoSanitized(tc.in); got != tc.want {
62*1c12ee1eSDan Willemsen			t.Errorf("GoSanitized(%q) = %q, want %q", tc.in, got, tc.want)
63*1c12ee1eSDan Willemsen		}
64*1c12ee1eSDan Willemsen	}
65*1c12ee1eSDan Willemsen}
66*1c12ee1eSDan Willemsen
67*1c12ee1eSDan Willemsenfunc TestName(t *testing.T) {
68*1c12ee1eSDan Willemsen	tests := []struct {
69*1c12ee1eSDan Willemsen		in                string
70*1c12ee1eSDan Willemsen		inEnumPrefix      string
71*1c12ee1eSDan Willemsen		wantMapEntry      string
72*1c12ee1eSDan Willemsen		wantEnumValue     string
73*1c12ee1eSDan Willemsen		wantTrimValue     string
74*1c12ee1eSDan Willemsen		wantJSONCamelCase string
75*1c12ee1eSDan Willemsen		wantJSONSnakeCase string
76*1c12ee1eSDan Willemsen	}{{
77*1c12ee1eSDan Willemsen		in:                "abc",
78*1c12ee1eSDan Willemsen		inEnumPrefix:      "",
79*1c12ee1eSDan Willemsen		wantMapEntry:      "AbcEntry",
80*1c12ee1eSDan Willemsen		wantEnumValue:     "Abc",
81*1c12ee1eSDan Willemsen		wantTrimValue:     "abc",
82*1c12ee1eSDan Willemsen		wantJSONCamelCase: "abc",
83*1c12ee1eSDan Willemsen		wantJSONSnakeCase: "abc",
84*1c12ee1eSDan Willemsen	}, {
85*1c12ee1eSDan Willemsen		in:                "foo_baR_",
86*1c12ee1eSDan Willemsen		inEnumPrefix:      "foo_bar",
87*1c12ee1eSDan Willemsen		wantMapEntry:      "FooBaREntry",
88*1c12ee1eSDan Willemsen		wantEnumValue:     "FooBar",
89*1c12ee1eSDan Willemsen		wantTrimValue:     "foo_baR_",
90*1c12ee1eSDan Willemsen		wantJSONCamelCase: "fooBaR",
91*1c12ee1eSDan Willemsen		wantJSONSnakeCase: "foo_ba_r_",
92*1c12ee1eSDan Willemsen	}, {
93*1c12ee1eSDan Willemsen		in:                "snake_caseCamelCase",
94*1c12ee1eSDan Willemsen		inEnumPrefix:      "snakecasecamel",
95*1c12ee1eSDan Willemsen		wantMapEntry:      "SnakeCaseCamelCaseEntry",
96*1c12ee1eSDan Willemsen		wantEnumValue:     "SnakeCasecamelcase",
97*1c12ee1eSDan Willemsen		wantTrimValue:     "Case",
98*1c12ee1eSDan Willemsen		wantJSONCamelCase: "snakeCaseCamelCase",
99*1c12ee1eSDan Willemsen		wantJSONSnakeCase: "snake_case_camel_case",
100*1c12ee1eSDan Willemsen	}, {
101*1c12ee1eSDan Willemsen		in:                "FiZz_BuZz",
102*1c12ee1eSDan Willemsen		inEnumPrefix:      "fizz",
103*1c12ee1eSDan Willemsen		wantMapEntry:      "FiZzBuZzEntry",
104*1c12ee1eSDan Willemsen		wantEnumValue:     "FizzBuzz",
105*1c12ee1eSDan Willemsen		wantTrimValue:     "BuZz",
106*1c12ee1eSDan Willemsen		wantJSONCamelCase: "FiZzBuZz",
107*1c12ee1eSDan Willemsen		wantJSONSnakeCase: "_fi_zz__bu_zz",
108*1c12ee1eSDan Willemsen	}}
109*1c12ee1eSDan Willemsen
110*1c12ee1eSDan Willemsen	for _, tt := range tests {
111*1c12ee1eSDan Willemsen		if got := MapEntryName(tt.in); got != tt.wantMapEntry {
112*1c12ee1eSDan Willemsen			t.Errorf("MapEntryName(%q) = %q, want %q", tt.in, got, tt.wantMapEntry)
113*1c12ee1eSDan Willemsen		}
114*1c12ee1eSDan Willemsen		if got := EnumValueName(tt.in); got != tt.wantEnumValue {
115*1c12ee1eSDan Willemsen			t.Errorf("EnumValueName(%q) = %q, want %q", tt.in, got, tt.wantEnumValue)
116*1c12ee1eSDan Willemsen		}
117*1c12ee1eSDan Willemsen		if got := TrimEnumPrefix(tt.in, tt.inEnumPrefix); got != tt.wantTrimValue {
118*1c12ee1eSDan Willemsen			t.Errorf("ErimEnumPrefix(%q, %q) = %q, want %q", tt.in, tt.inEnumPrefix, got, tt.wantTrimValue)
119*1c12ee1eSDan Willemsen		}
120*1c12ee1eSDan Willemsen		if got := JSONCamelCase(tt.in); got != tt.wantJSONCamelCase {
121*1c12ee1eSDan Willemsen			t.Errorf("JSONCamelCase(%q) = %q, want %q", tt.in, got, tt.wantJSONCamelCase)
122*1c12ee1eSDan Willemsen		}
123*1c12ee1eSDan Willemsen		if got := JSONSnakeCase(tt.in); got != tt.wantJSONSnakeCase {
124*1c12ee1eSDan Willemsen			t.Errorf("JSONSnakeCase(%q) = %q, want %q", tt.in, got, tt.wantJSONSnakeCase)
125*1c12ee1eSDan Willemsen		}
126*1c12ee1eSDan Willemsen	}
127*1c12ee1eSDan Willemsen}
128*1c12ee1eSDan Willemsen
129*1c12ee1eSDan Willemsenvar (
130*1c12ee1eSDan Willemsen	srcString = "1234"
131*1c12ee1eSDan Willemsen	srcBytes  = []byte(srcString)
132*1c12ee1eSDan Willemsen	dst       uint64
133*1c12ee1eSDan Willemsen)
134*1c12ee1eSDan Willemsen
135*1c12ee1eSDan Willemsenfunc BenchmarkCast(b *testing.B) {
136*1c12ee1eSDan Willemsen	b.Run("Ideal", func(b *testing.B) {
137*1c12ee1eSDan Willemsen		b.ReportAllocs()
138*1c12ee1eSDan Willemsen		for i := 0; i < b.N; i++ {
139*1c12ee1eSDan Willemsen			dst, _ = strconv.ParseUint(srcString, 0, 64)
140*1c12ee1eSDan Willemsen		}
141*1c12ee1eSDan Willemsen		if dst != 1234 {
142*1c12ee1eSDan Willemsen			b.Errorf("got %d, want %s", dst, srcString)
143*1c12ee1eSDan Willemsen		}
144*1c12ee1eSDan Willemsen	})
145*1c12ee1eSDan Willemsen	b.Run("Copy", func(b *testing.B) {
146*1c12ee1eSDan Willemsen		b.ReportAllocs()
147*1c12ee1eSDan Willemsen		for i := 0; i < b.N; i++ {
148*1c12ee1eSDan Willemsen			dst, _ = strconv.ParseUint(string(srcBytes), 0, 64)
149*1c12ee1eSDan Willemsen		}
150*1c12ee1eSDan Willemsen		if dst != 1234 {
151*1c12ee1eSDan Willemsen			b.Errorf("got %d, want %s", dst, srcString)
152*1c12ee1eSDan Willemsen		}
153*1c12ee1eSDan Willemsen	})
154*1c12ee1eSDan Willemsen	b.Run("Cast", func(b *testing.B) {
155*1c12ee1eSDan Willemsen		b.ReportAllocs()
156*1c12ee1eSDan Willemsen		for i := 0; i < b.N; i++ {
157*1c12ee1eSDan Willemsen			dst, _ = strconv.ParseUint(UnsafeString(srcBytes), 0, 64)
158*1c12ee1eSDan Willemsen		}
159*1c12ee1eSDan Willemsen		if dst != 1234 {
160*1c12ee1eSDan Willemsen			b.Errorf("got %d, want %s", dst, srcString)
161*1c12ee1eSDan Willemsen		}
162*1c12ee1eSDan Willemsen	})
163*1c12ee1eSDan Willemsen}
164