1
2
3
4
5 package pflag
6
7 import (
8 "fmt"
9 "strconv"
10 "strings"
11 "testing"
12 )
13
14 func setUpF32SFlagSet(f32sp *[]float32) *FlagSet {
15 f := NewFlagSet("test", ContinueOnError)
16 f.Float32SliceVar(f32sp, "f32s", []float32{}, "Command separated list!")
17 return f
18 }
19
20 func setUpF32SFlagSetWithDefault(f32sp *[]float32) *FlagSet {
21 f := NewFlagSet("test", ContinueOnError)
22 f.Float32SliceVar(f32sp, "f32s", []float32{0.0, 1.0}, "Command separated list!")
23 return f
24 }
25
26 func TestEmptyF32S(t *testing.T) {
27 var f32s []float32
28 f := setUpF32SFlagSet(&f32s)
29 err := f.Parse([]string{})
30 if err != nil {
31 t.Fatal("expected no error; got", err)
32 }
33
34 getF32S, err := f.GetFloat32Slice("f32s")
35 if err != nil {
36 t.Fatal("got an error from GetFloat32Slice():", err)
37 }
38 if len(getF32S) != 0 {
39 t.Fatalf("got f32s %v with len=%d but expected length=0", getF32S, len(getF32S))
40 }
41 }
42
43 func TestF32S(t *testing.T) {
44 var f32s []float32
45 f := setUpF32SFlagSet(&f32s)
46
47 vals := []string{"1.0", "2.0", "4.0", "3.0"}
48 arg := fmt.Sprintf("--f32s=%s", strings.Join(vals, ","))
49 err := f.Parse([]string{arg})
50 if err != nil {
51 t.Fatal("expected no error; got", err)
52 }
53 for i, v := range f32s {
54 d64, err := strconv.ParseFloat(vals[i], 32)
55 if err != nil {
56 t.Fatalf("got error: %v", err)
57 }
58
59 d := float32(d64)
60 if d != v {
61 t.Fatalf("expected f32s[%d] to be %s but got: %f", i, vals[i], v)
62 }
63 }
64 getF32S, err := f.GetFloat32Slice("f32s")
65 if err != nil {
66 t.Fatalf("got error: %v", err)
67 }
68 for i, v := range getF32S {
69 d64, err := strconv.ParseFloat(vals[i], 32)
70 if err != nil {
71 t.Fatalf("got error: %v", err)
72 }
73
74 d := float32(d64)
75 if d != v {
76 t.Fatalf("expected f32s[%d] to be %s but got: %f from GetFloat32Slice", i, vals[i], v)
77 }
78 }
79 }
80
81 func TestF32SDefault(t *testing.T) {
82 var f32s []float32
83 f := setUpF32SFlagSetWithDefault(&f32s)
84
85 vals := []string{"0.0", "1.0"}
86
87 err := f.Parse([]string{})
88 if err != nil {
89 t.Fatal("expected no error; got", err)
90 }
91 for i, v := range f32s {
92 d64, err := strconv.ParseFloat(vals[i], 32)
93 if err != nil {
94 t.Fatalf("got error: %v", err)
95 }
96
97 d := float32(d64)
98 if d != v {
99 t.Fatalf("expected f32s[%d] to be %f but got: %f", i, d, v)
100 }
101 }
102
103 getF32S, err := f.GetFloat32Slice("f32s")
104 if err != nil {
105 t.Fatal("got an error from GetFloat32Slice():", err)
106 }
107 for i, v := range getF32S {
108 d64, err := strconv.ParseFloat(vals[i], 32)
109 if err != nil {
110 t.Fatal("got an error from GetFloat32Slice():", err)
111 }
112
113 d := float32(d64)
114 if d != v {
115 t.Fatalf("expected f32s[%d] to be %f from GetFloat32Slice but got: %f", i, d, v)
116 }
117 }
118 }
119
120 func TestF32SWithDefault(t *testing.T) {
121 var f32s []float32
122 f := setUpF32SFlagSetWithDefault(&f32s)
123
124 vals := []string{"1.0", "2.0"}
125 arg := fmt.Sprintf("--f32s=%s", strings.Join(vals, ","))
126 err := f.Parse([]string{arg})
127 if err != nil {
128 t.Fatal("expected no error; got", err)
129 }
130 for i, v := range f32s {
131 d64, err := strconv.ParseFloat(vals[i], 32)
132 if err != nil {
133 t.Fatalf("got error: %v", err)
134 }
135
136 d := float32(d64)
137 if d != v {
138 t.Fatalf("expected f32s[%d] to be %f but got: %f", i, d, v)
139 }
140 }
141
142 getF32S, err := f.GetFloat32Slice("f32s")
143 if err != nil {
144 t.Fatal("got an error from GetFloat32Slice():", err)
145 }
146 for i, v := range getF32S {
147 d64, err := strconv.ParseFloat(vals[i], 32)
148 if err != nil {
149 t.Fatalf("got error: %v", err)
150 }
151
152 d := float32(d64)
153 if d != v {
154 t.Fatalf("expected f32s[%d] to be %f from GetFloat32Slice but got: %f", i, d, v)
155 }
156 }
157 }
158
159 func TestF32SAsSliceValue(t *testing.T) {
160 var f32s []float32
161 f := setUpF32SFlagSet(&f32s)
162
163 in := []string{"1.0", "2.0"}
164 argfmt := "--f32s=%s"
165 arg1 := fmt.Sprintf(argfmt, in[0])
166 arg2 := fmt.Sprintf(argfmt, in[1])
167 err := f.Parse([]string{arg1, arg2})
168 if err != nil {
169 t.Fatal("expected no error; got", err)
170 }
171
172 f.VisitAll(func(f *Flag) {
173 if val, ok := f.Value.(SliceValue); ok {
174 _ = val.Replace([]string{"3.1"})
175 }
176 })
177 if len(f32s) != 1 || f32s[0] != 3.1 {
178 t.Fatalf("Expected ss to be overwritten with '3.1', but got: %v", f32s)
179 }
180 }
181
182 func TestF32SCalledTwice(t *testing.T) {
183 var f32s []float32
184 f := setUpF32SFlagSet(&f32s)
185
186 in := []string{"1.0,2.0", "3.0"}
187 expected := []float32{1.0, 2.0, 3.0}
188 argfmt := "--f32s=%s"
189 arg1 := fmt.Sprintf(argfmt, in[0])
190 arg2 := fmt.Sprintf(argfmt, in[1])
191 err := f.Parse([]string{arg1, arg2})
192 if err != nil {
193 t.Fatal("expected no error; got", err)
194 }
195 for i, v := range f32s {
196 if expected[i] != v {
197 t.Fatalf("expected f32s[%d] to be %f but got: %f", i, expected[i], v)
198 }
199 }
200 }
201
View as plain text