github.com/best4tires/kit@v1.0.5/convert/convert_test.go (about)

     1  package convert
     2  
     3  import "testing"
     4  
     5  func TestToBool(t *testing.T) {
     6  	tests := []struct {
     7  		name string
     8  		v    interface{}
     9  		want bool
    10  	}{
    11  		{name: "bool true", v: true, want: true},
    12  		{name: "bool false", v: false, want: false},
    13  		{name: "string true", v: "true", want: true},
    14  		{name: "string false", v: "false", want: false},
    15  		{name: "string yes", v: "yes", want: true},
    16  		{name: "string no", v: "no", want: false},
    17  		{name: "string on", v: "on", want: true},
    18  		{name: "string off", v: "off", want: false},
    19  		{name: "int 1", v: 1, want: true},
    20  		{name: "int 0", v: 0, want: false},
    21  		{name: "float 1", v: 1.0, want: true},
    22  		{name: "float 0", v: 0.0, want: false},
    23  		{name: "nil", v: nil, want: false},
    24  	}
    25  	for _, tt := range tests {
    26  		t.Run(tt.name, func(t *testing.T) {
    27  			if got := ToBool(tt.v); got != tt.want {
    28  				t.Errorf("ToBool() = %v, want %v", got, tt.want)
    29  			}
    30  		})
    31  	}
    32  }
    33  
    34  func TestToInt(t *testing.T) {
    35  	tests := []struct {
    36  		name string
    37  		v    interface{}
    38  		want int
    39  	}{
    40  		{name: "int", v: 1, want: 1},
    41  		{name: "float64", v: 1.5, want: 1},
    42  		{name: "float32", v: float32(1.5), want: 1},
    43  		{name: "string", v: "1", want: 1},
    44  		{name: "bool true", v: true, want: 1},
    45  		{name: "bool false", v: false, want: 0},
    46  		{name: "nil", v: nil, want: 0},
    47  	}
    48  	for _, tt := range tests {
    49  		t.Run(tt.name, func(t *testing.T) {
    50  			if got, _ := ToInt(tt.v); got != tt.want {
    51  				t.Errorf("ToInt() = %v, want %v", got, tt.want)
    52  			}
    53  		})
    54  	}
    55  }
    56  
    57  func TestToFloat(t *testing.T) {
    58  	tests := []struct {
    59  		name     string
    60  		input    interface{}
    61  		expected float64
    62  		success  bool
    63  	}{
    64  		{
    65  			name:     "int conversion",
    66  			input:    10,
    67  			expected: 10.0,
    68  			success:  true,
    69  		},
    70  		{
    71  			name:     "float conversion",
    72  			input:    3.14,
    73  			expected: 3.14,
    74  			success:  true,
    75  		},
    76  		{
    77  			name:     "string conversion",
    78  			input:    "2.718",
    79  			expected: 2.718,
    80  			success:  true,
    81  		},
    82  		{
    83  			name:     "invalid string conversion",
    84  			input:    "not a number",
    85  			expected: 0,
    86  			success:  false,
    87  		},
    88  		{
    89  			name:     "unsupported type conversion",
    90  			input:    []int{1, 2, 3},
    91  			expected: 0,
    92  			success:  false,
    93  		},
    94  	}
    95  
    96  	for _, test := range tests {
    97  		t.Run(test.name, func(t *testing.T) {
    98  			result, success := ToFloat(test.input)
    99  			if success != test.success {
   100  				t.Errorf("expected success value of %v, but got %v", test.success, success)
   101  			}
   102  			if success && result != test.expected {
   103  				t.Errorf("expected %v, but got %v", test.expected, result)
   104  			}
   105  		})
   106  	}
   107  }
   108  
   109  func TestToString(t *testing.T) {
   110  	tests := []struct {
   111  		name     string
   112  		input    interface{}
   113  		expected string
   114  	}{
   115  		{
   116  			name:     "int conversion",
   117  			input:    10,
   118  			expected: "10",
   119  		},
   120  		{
   121  			name:     "float conversion",
   122  			input:    3.14,
   123  			expected: "3.14",
   124  		},
   125  		{
   126  			name:     "bool conversion",
   127  			input:    true,
   128  			expected: "true",
   129  		},
   130  		{
   131  			name:     "slice conversion",
   132  			input:    []int{1, 2, 3},
   133  			expected: "[1 2 3]",
   134  		},
   135  		{
   136  			name: "struct conversion",
   137  			input: struct {
   138  				A int
   139  				B string
   140  			}{
   141  				A: 10,
   142  				B: "hello",
   143  			},
   144  			expected: "{10 hello}",
   145  		},
   146  	}
   147  
   148  	for _, test := range tests {
   149  		t.Run(test.name, func(t *testing.T) {
   150  			result := ToString(test.input)
   151  			if result != test.expected {
   152  				t.Errorf("expected %q, but got %q", test.expected, result)
   153  			}
   154  		})
   155  	}
   156  }