@@ -14,19 +14,42 @@ var benchSink int
14
14
func benchRuneWidth (b * testing.B , eastAsianWidth bool , start , stop rune , want int ) int {
15
15
b .Helper ()
16
16
n := 0
17
- got := - 1
18
- c := NewCondition ()
19
- c .EastAsianWidth = eastAsianWidth
20
- for i := 0 ; i < b .N ; i ++ {
21
- got = n
22
- for r := start ; r < stop ; r ++ {
23
- n += c .RuneWidth (r )
17
+ b .Run ("regular" , func (b * testing.B ) {
18
+ got := - 1
19
+ c := NewCondition ()
20
+ c .EastAsianWidth = eastAsianWidth
21
+ b .ReportAllocs ()
22
+ b .ResetTimer ()
23
+ for i := 0 ; i < b .N ; i ++ {
24
+ got = n
25
+ for r := start ; r < stop ; r ++ {
26
+ n += c .RuneWidth (r )
27
+ }
28
+ got = n - got
24
29
}
25
- got = n - got
26
- }
27
- if want != 0 && got != want { // some extra checks
28
- b .Errorf ("got %d, want %d\n " , got , want )
29
- }
30
+ if want != 0 && got != want { // some extra checks
31
+ b .Errorf ("got %d, want %d\n " , got , want )
32
+ }
33
+ })
34
+ b .Run ("lut" , func (b * testing.B ) {
35
+ got := - 1
36
+ n = 0
37
+ c := NewCondition ()
38
+ c .EastAsianWidth = eastAsianWidth
39
+ c .CreateLUT ()
40
+ b .ReportAllocs ()
41
+ b .ResetTimer ()
42
+ for i := 0 ; i < b .N ; i ++ {
43
+ got = n
44
+ for r := start ; r < stop ; r ++ {
45
+ n += c .RuneWidth (r )
46
+ }
47
+ got = n - got
48
+ }
49
+ if want != 0 && got != want { // some extra checks
50
+ b .Errorf ("got %d, want %d\n " , got , want )
51
+ }
52
+ })
30
53
return n
31
54
}
32
55
func BenchmarkRuneWidthAll (b * testing.B ) {
@@ -49,20 +72,44 @@ func BenchmarkRuneWidth768EastAsian(b *testing.B) {
49
72
func benchString1Width (b * testing.B , eastAsianWidth bool , start , stop rune , want int ) int {
50
73
b .Helper ()
51
74
n := 0
52
- got := - 1
53
- c := NewCondition ()
54
- c .EastAsianWidth = eastAsianWidth
55
- for i := 0 ; i < b .N ; i ++ {
56
- got = n
57
- for r := start ; r < stop ; r ++ {
58
- s := string (r )
59
- n += c .StringWidth (s )
75
+ b .Run ("regular" , func (b * testing.B ) {
76
+ got := - 1
77
+ c := NewCondition ()
78
+ c .EastAsianWidth = eastAsianWidth
79
+ b .ResetTimer ()
80
+ b .ReportAllocs ()
81
+ for i := 0 ; i < b .N ; i ++ {
82
+ got = n
83
+ for r := start ; r < stop ; r ++ {
84
+ s := string (r )
85
+ n += c .StringWidth (s )
86
+ }
87
+ got = n - got
60
88
}
61
- got = n - got
62
- }
63
- if want != 0 && got != want { // some extra checks
64
- b .Errorf ("got %d, want %d\n " , got , want )
65
- }
89
+ if want != 0 && got != want { // some extra checks
90
+ b .Errorf ("got %d, want %d\n " , got , want )
91
+ }
92
+ })
93
+ b .Run ("lut" , func (b * testing.B ) {
94
+ got := - 1
95
+ n = 0
96
+ c := NewCondition ()
97
+ c .EastAsianWidth = eastAsianWidth
98
+ c .CreateLUT ()
99
+ b .ResetTimer ()
100
+ b .ReportAllocs ()
101
+ for i := 0 ; i < b .N ; i ++ {
102
+ got = n
103
+ for r := start ; r < stop ; r ++ {
104
+ s := string (r )
105
+ n += c .StringWidth (s )
106
+ }
107
+ got = n - got
108
+ }
109
+ if want != 0 && got != want { // some extra checks
110
+ b .Errorf ("got %d, want %d\n " , got , want )
111
+ }
112
+ })
66
113
return n
67
114
}
68
115
func BenchmarkString1WidthAll (b * testing.B ) {
0 commit comments