Files
path/sort_test.go
Ian Gulliver f50e6e228c Module split
2023-04-20 18:01:36 +00:00

283 lines
4.5 KiB
Go

package path_test
import (
"testing"
"time"
"cloud.google.com/go/civil"
"github.com/gopatchy/path"
"github.com/stretchr/testify/require"
)
func TestSortStruct(t *testing.T) {
t.Parallel()
objs := []*testType2{
{
Tt1: testType1{
Int: 2,
},
},
{
Tt1: testType1{
Int: 1,
},
},
{
Tt1: testType1{
Int: 3,
},
},
}
err := path.Sort(objs, "tt1.int")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []int{1, 2, 3}, []int{objs[0].Tt1.Int, objs[1].Tt1.Int, objs[2].Tt1.Int})
}
func TestSortReverse(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Int: 3,
},
{
Int: 1,
},
{
Int: 2,
},
}
err := path.SortReverse(objs, "int")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []int{3, 2, 1}, []int{objs[0].Int, objs[1].Int, objs[2].Int})
}
func TestSortInt(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Int: 3,
},
{
Int: 1,
},
{
Int: 2,
},
}
err := path.Sort(objs, "int")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []int{1, 2, 3}, []int{objs[0].Int, objs[1].Int, objs[2].Int})
}
func TestSortInt64(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Int64: 3,
},
{
Int64: 1,
},
{
Int64: 2,
},
}
err := path.Sort(objs, "int64")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []int64{1, 2, 3}, []int64{objs[0].Int64, objs[1].Int64, objs[2].Int64})
}
func TestSortUint(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
UInt: 3,
},
{
UInt: 1,
},
{
UInt: 2,
},
}
err := path.Sort(objs, "uint")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []uint{1, 2, 3}, []uint{objs[0].UInt, objs[1].UInt, objs[2].UInt})
}
func TestSortUint64(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
UInt64: 3,
},
{
UInt64: 1,
},
{
UInt64: 2,
},
}
err := path.Sort(objs, "uint64")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []uint64{1, 2, 3}, []uint64{objs[0].UInt64, objs[1].UInt64, objs[2].UInt64})
}
func TestSortFloat32(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Float32: 3.3,
},
{
Float32: 1.1,
},
{
Float32: 2.2,
},
}
err := path.Sort(objs, "float32")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []float32{1.1, 2.2, 3.3}, []float32{objs[0].Float32, objs[1].Float32, objs[2].Float32})
}
func TestSortFloat64(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Float64: 3.3,
},
{
Float64: 1.1,
},
{
Float64: 2.2,
},
}
err := path.Sort(objs, "float64")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []float64{1.1, 2.2, 3.3}, []float64{objs[0].Float64, objs[1].Float64, objs[2].Float64})
}
func TestSortString(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
String: "zig",
},
{
String: "bar",
},
{
String: "foo",
},
}
err := path.Sort(objs, "string2")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []string{"bar", "foo", "zig"}, []string{objs[0].String, objs[1].String, objs[2].String})
}
func TestSortBool(t *testing.T) {
t.Parallel()
objs := []*testType1{
{
Bool: true,
},
{
Bool: false,
},
{
Bool: true,
},
}
err := path.Sort(objs, "bool2")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []bool{false, true, true}, []bool{objs[0].Bool, objs[1].Bool, objs[2].Bool})
}
func TestSortTime(t *testing.T) {
t.Parallel()
t1, err := time.Parse("2006-01-02T15:04:05Z", "2006-01-01T15:04:05Z")
require.NoError(t, err)
t2, err := time.Parse("2006-01-02T15:04:05Z", "2006-01-02T15:04:05Z")
require.NoError(t, err)
t3, err := time.Parse("2006-01-02T15:04:05Z", "2006-01-03T15:04:05Z")
require.NoError(t, err)
objs := []*testType1{
{
Time: t3,
},
{
Time: t1,
},
{
Time: t2,
},
}
err = path.Sort(objs, "time")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []time.Time{t1, t2, t3}, []time.Time{objs[0].Time, objs[1].Time, objs[2].Time})
}
func TestSortDate(t *testing.T) {
t.Parallel()
d1, err := civil.ParseDate("2006-01-01")
require.NoError(t, err)
d2, err := civil.ParseDate("2006-01-02")
require.NoError(t, err)
d3, err := civil.ParseDate("2006-01-03")
require.NoError(t, err)
objs := []*testType1{
{
Date: d3,
},
{
Date: d1,
},
{
Date: d2,
},
}
err = path.Sort(objs, "date")
require.NoError(t, err)
require.Len(t, objs, 3)
require.Equal(t, []civil.Date{d1, d2, d3}, []civil.Date{objs[0].Date, objs[1].Date, objs[2].Date})
}