From f3ba5b98b63a6f637c81fd5439f64d8443f0eae7 Mon Sep 17 00:00:00 2001 From: 0syntrax0 <5194293+0syntrax0@users.noreply.github.com> Date: Tue, 15 Oct 2024 23:33:46 -0500 Subject: [PATCH 1/3] creating slice and pointer changes --- pointer.go | 13 ++++++++++++ slices.go | 21 +++++++++++++++++++ slices_test.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 pointer.go create mode 100644 slices.go create mode 100644 slices_test.go diff --git a/pointer.go b/pointer.go new file mode 100644 index 0000000..4a4af88 --- /dev/null +++ b/pointer.go @@ -0,0 +1,13 @@ +package underscore + +// Convert values to pointers +// +// Instead of: +// v = "value" +// MyPointerVar = &v +// +// Use: +// MyPointerVar = ToPointer("value") +func ToPointer[T any](in T) *T { + return &in +} diff --git a/slices.go b/slices.go new file mode 100644 index 0000000..88f445b --- /dev/null +++ b/slices.go @@ -0,0 +1,21 @@ +package underscore + +import ( + "sort" + + "golang.org/x/exp/constraints" +) + +// sort any slice ASENDING +func SortSliceASC[T constraints.Ordered](s []T) { + sort.Slice(s, func(i, j int) bool { + return s[i] < s[j] + }) +} + +// sort any slice DESCENDING +func SortSliceDESC[T constraints.Ordered](s []T) { + sort.Slice(s, func(i, j int) bool { + return s[i] > s[j] + }) +} diff --git a/slices_test.go b/slices_test.go new file mode 100644 index 0000000..73fa86e --- /dev/null +++ b/slices_test.go @@ -0,0 +1,56 @@ +package underscore_test + +import ( + "testing" + + u "github.com/rjNemo/underscore" + "github.com/stretchr/testify/assert" +) + +func TestSortSliceAscString(t *testing.T) { + slc := []string{"c", "a", "b"} + expected := []string{"a", "b", "c"} + u.SortSliceASC(slc) + + assert.Equal(t, expected, slc) +} + +func TestSortSliceDescString(t *testing.T) { + slc := []string{"c", "a", "b"} + expected := []string{"c", "b", "a"} + u.SortSliceDESC(slc) + + assert.Equal(t, expected, slc) +} + +func TestSortSliceAscInt(t *testing.T) { + slc := []int{1, 4, 3, 5, 2} + expected := []int{1, 2, 3, 4, 5} + u.SortSliceASC(slc) + + assert.Equal(t, expected, slc) +} + +func TestSortSliceDescInt(t *testing.T) { + slc := []int{1, 4, 3, 5, 2} + expected := []int{5, 4, 3, 2, 1} + u.SortSliceDESC(slc) + + assert.Equal(t, expected, slc) +} + +func TestSortSliceAscFloat64(t *testing.T) { + slc := []float64{1.0, 1.2, 1.1, 1.5, 1.01} + expected := []float64{1, 1.01, 1.1, 1.2, 1.5} + u.SortSliceASC(slc) + + assert.Equal(t, expected, slc) +} + +func TestSortSliceDescFloat64(t *testing.T) { + slc := []float64{1.0, 1.2, 1.1, 1.5, 1.01} + expected := []float64{1.5, 1.2, 1.1, 1.01, 1} + u.SortSliceDESC(slc) + + assert.Equal(t, expected, slc) +} From 9f63a512806a8deef8f1247cedac13ad64c2ee6b Mon Sep 17 00:00:00 2001 From: 0syntrax0 <5194293+0syntrax0@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:45:42 -0500 Subject: [PATCH 2/3] removing extra file --- pointer.go | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 pointer.go diff --git a/pointer.go b/pointer.go deleted file mode 100644 index 4a4af88..0000000 --- a/pointer.go +++ /dev/null @@ -1,13 +0,0 @@ -package underscore - -// Convert values to pointers -// -// Instead of: -// v = "value" -// MyPointerVar = &v -// -// Use: -// MyPointerVar = ToPointer("value") -func ToPointer[T any](in T) *T { - return &in -} From 80a84c0803c6c57dbbf26e175cfbcf21eb244301 Mon Sep 17 00:00:00 2001 From: 0syntrax0 <5194293+0syntrax0@users.noreply.github.com> Date: Mon, 21 Oct 2024 15:47:55 -0500 Subject: [PATCH 3/3] switching to use 'sliceStable' --- slices.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slices.go b/slices.go index 88f445b..0101cf6 100644 --- a/slices.go +++ b/slices.go @@ -8,14 +8,14 @@ import ( // sort any slice ASENDING func SortSliceASC[T constraints.Ordered](s []T) { - sort.Slice(s, func(i, j int) bool { + sort.SliceStable(s, func(i, j int) bool { return s[i] < s[j] }) } // sort any slice DESCENDING func SortSliceDESC[T constraints.Ordered](s []T) { - sort.Slice(s, func(i, j int) bool { + sort.SliceStable(s, func(i, j int) bool { return s[i] > s[j] }) }