@@ -24,6 +24,7 @@ import (
2424 "github.com/gorse-io/gorse/config"
2525 "github.com/gorse-io/gorse/dataset"
2626 "github.com/gorse-io/gorse/storage/data"
27+ "github.com/stretchr/testify/assert"
2728 "github.com/stretchr/testify/suite"
2829)
2930
@@ -282,3 +283,82 @@ func (suite *ItemToItemTestSuite) TestChat() {
282283func TestItemToItem (t * testing.T ) {
283284 suite .Run (t , new (ItemToItemTestSuite ))
284285}
286+
287+ func TestToFloat32Slice (t * testing.T ) {
288+ floatSlice := []float32 {0.1 , 0.2 , 0.3 }
289+ testCases := []struct {
290+ name string
291+ input any
292+ expected []float32
293+ errContains string
294+ }{
295+ {
296+ name : "float32 slice" ,
297+ input : floatSlice ,
298+ expected : []float32 {0.1 , 0.2 , 0.3 },
299+ },
300+ {
301+ name : "float64 slice" ,
302+ input : []float64 {0.1 , 0.2 , 0.3 },
303+ expected : []float32 {0.1 , 0.2 , 0.3 },
304+ },
305+ {
306+ name : "int slice" ,
307+ input : []int {- 1 , 0 , 2 },
308+ expected : []float32 {- 1 , 0 , 2 },
309+ },
310+ {
311+ name : "int32 slice" ,
312+ input : []int32 {- 1 , 0 , 2 },
313+ expected : []float32 {- 1 , 0 , 2 },
314+ },
315+ {
316+ name : "int64 slice" ,
317+ input : []int64 {- 1 , 0 , 2 },
318+ expected : []float32 {- 1 , 0 , 2 },
319+ },
320+ {
321+ name : "mixed any slice" ,
322+ input : []any {float32 (0.1 ), float64 (0.2 ), int (0 ), int32 (1 ), int64 (2 )},
323+ expected : []float32 {0.1 , 0.2 , 0.0 , 1.0 , 2.0 },
324+ },
325+ {
326+ name : "empty any slice" ,
327+ input : []any {},
328+ expected : []float32 {},
329+ },
330+ {
331+ name : "invalid element in any slice" ,
332+ input : []any {float32 (0.1 ), "string" },
333+ errContains : "invalid element type" ,
334+ },
335+ {
336+ name : "nil element in any slice" ,
337+ input : []any {float32 (0.1 ), nil },
338+ errContains : "invalid element type" ,
339+ },
340+ {
341+ name : "invalid input type" ,
342+ input : "string" ,
343+ errContains : "invalid column type" ,
344+ },
345+ {
346+ name : "nil input" ,
347+ input : nil ,
348+ errContains : "invalid column type" ,
349+ },
350+ }
351+
352+ for _ , tc := range testCases {
353+ t .Run (tc .name , func (t * testing.T ) {
354+ result , err := toFloat32Slice (tc .input )
355+ if tc .errContains != "" {
356+ assert .Error (t , err )
357+ assert .ErrorContains (t , err , tc .errContains )
358+ return
359+ }
360+ assert .NoError (t , err )
361+ assert .Equal (t , tc .expected , result )
362+ })
363+ }
364+ }
0 commit comments