Module split
This commit is contained in:
282
sort_test.go
Normal file
282
sort_test.go
Normal file
@@ -0,0 +1,282 @@
|
||||
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})
|
||||
}
|
||||
Reference in New Issue
Block a user