...

Source file src/github.com/spf13/pflag/float32_slice_test.go

Documentation: github.com/spf13/pflag

     1  // Copyright 2009 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  
     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