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] 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) +}