package castx

import (
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestToFloatSliceE(t *testing.T) {
	tests := []struct {
		input  interface{}
		expect []float64
		iserr  bool
	}{
		{[]int{1, 3}, []float64{1, 3}, false},
		{[]interface{}{1.2, 3.2}, []float64{1.2, 3.2}, false},
		{[]string{"2", "3"}, []float64{2, 3}, false},
		{[]string{"2.2", "3.2"}, []float64{2.2, 3.2}, false},
		{[2]string{"2", "3"}, []float64{2, 3}, false},
		{[2]string{"2.2", "3.2"}, []float64{2.2, 3.2}, false},
		// errors
		{nil, nil, true},
		{testing.T{}, nil, true},
		{[]string{"foo", "bar"}, nil, true},
	}

	for i, test := range tests {
		errmsg := fmt.Sprintf("i = %d", i) // assert helper message

		v, err := ToFloatSliceE(test.input)
		if test.iserr {
			assert.Error(t, err, errmsg)
			continue
		}

		assert.NoError(t, err, errmsg)
		assert.Equal(t, test.expect, v, errmsg)

		// Non-E test
		v = ToFloatSlice(test.input)
		assert.Equal(t, test.expect, v, errmsg)
	}
}

func TestToStringSlice(t *testing.T) {
	assert.Equal(t, []string{"foo", "bar"}, ToStringSlice("foo,bar"))
}