github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/printf/printf_test.go (about) 1 package printf 2 3 import "testing" 4 5 func BenchmarkParseVerb(b *testing.B) { 6 for i := 0; i < b.N; i++ { 7 ParseVerb("%[3]*.[2]*[1]f") 8 } 9 } 10 11 func TestParseVerb(t *testing.T) { 12 var tests = []struct { 13 in string 14 out Verb 15 }{ 16 { 17 `%d`, 18 Verb{ 19 Letter: 'd', 20 Width: Default{}, 21 Precision: Default{}, 22 Value: -1, 23 }, 24 }, 25 { 26 `%#d`, 27 Verb{ 28 Letter: 'd', 29 Flags: "#", 30 Width: Default{}, 31 Precision: Default{}, 32 Value: -1, 33 }, 34 }, 35 { 36 `%+#d`, 37 Verb{ 38 Letter: 'd', 39 Flags: "+#", 40 Width: Default{}, 41 Precision: Default{}, 42 Value: -1, 43 }, 44 }, 45 { 46 `%[2]d`, 47 Verb{ 48 Letter: 'd', 49 Width: Default{}, 50 Precision: Default{}, 51 Value: 2, 52 }, 53 }, 54 { 55 `%[3]*.[2]*[1]f`, 56 Verb{ 57 Letter: 'f', 58 Width: Star{3}, 59 Precision: Star{2}, 60 Value: 1, 61 }, 62 }, 63 { 64 `%6.2f`, 65 Verb{ 66 Letter: 'f', 67 Width: Literal(6), 68 Precision: Literal(2), 69 Value: -1, 70 }, 71 }, 72 { 73 `%#[1]x`, 74 Verb{ 75 Letter: 'x', 76 Flags: "#", 77 Width: Default{}, 78 Precision: Default{}, 79 Value: 1, 80 }, 81 }, 82 { 83 "%%", 84 Verb{ 85 Letter: '%', 86 Width: Default{}, 87 Precision: Default{}, 88 Value: 0, 89 }, 90 }, 91 { 92 "%*%", 93 Verb{ 94 Letter: '%', 95 Width: Star{Index: -1}, 96 Precision: Default{}, 97 Value: 0, 98 }, 99 }, 100 { 101 "%[1]%", 102 Verb{ 103 Letter: '%', 104 Width: Default{}, 105 Precision: Default{}, 106 Value: 0, 107 }, 108 }, 109 } 110 111 for _, tt := range tests { 112 tt.out.Raw = tt.in 113 v, n, err := ParseVerb(tt.in) 114 if err != nil { 115 t.Errorf("unexpected error %s while parsing %s", err, tt.in) 116 } 117 if n != len(tt.in) { 118 t.Errorf("ParseVerb only consumed %d of %d bytes", n, len(tt.in)) 119 } 120 if v != tt.out { 121 t.Errorf("%s parsed to %#v, want %#v", tt.in, v, tt.out) 122 } 123 } 124 }