From c9a82b134a774d4609eeef62c6d6ca5c19a68da3 Mon Sep 17 00:00:00 2001 From: Junwei Zhao Date: Mon, 14 Mar 2022 21:35:34 +1100 Subject: [PATCH] Resort top numbers --- calculator/largestnumbers.go | 2 +- calculator/largestnumbers_test.go | 11 ++++---- calculator/sort.go | 10 +++++++ calculator/sort_test.go | 46 +++++++++++++++++++++++++++++++ main.go | 1 + 5 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 calculator/sort.go create mode 100644 calculator/sort_test.go diff --git a/calculator/largestnumbers.go b/calculator/largestnumbers.go index ce07664..e85d81c 100644 --- a/calculator/largestnumbers.go +++ b/calculator/largestnumbers.go @@ -47,5 +47,5 @@ func CalculateLargestNumbers(filePath string, topX int) ([]int, error) { } } - return topXHeap, nil + return sortDesc(topXHeap), nil } diff --git a/calculator/largestnumbers_test.go b/calculator/largestnumbers_test.go index 03e8118..1b0a152 100644 --- a/calculator/largestnumbers_test.go +++ b/calculator/largestnumbers_test.go @@ -1,9 +1,8 @@ package calculator import ( + "reflect" "testing" - - "github.com/stretchr/testify/assert" ) func TestCalculateLargestNumbers(t *testing.T) { @@ -23,7 +22,7 @@ func TestCalculateLargestNumbers(t *testing.T) { filePath: "../test1.txt", topX: 3, }, - want: []int{0, 2, 5}, + want: []int{5, 2, 0}, wantErr: false, }, { @@ -41,7 +40,7 @@ func TestCalculateLargestNumbers(t *testing.T) { filePath: "../test3.txt", topX: 4, }, - want: []int{23435, 38949, 11111, 11111}, + want: []int{38949, 23435, 11111, 11111}, wantErr: false, }, { @@ -50,7 +49,7 @@ func TestCalculateLargestNumbers(t *testing.T) { filePath: "../test2.txt", topX: 5, }, - want: []int{1, 9, 3, 2}, + want: []int{9, 3, 2, 1}, wantErr: false, }, { @@ -88,7 +87,7 @@ func TestCalculateLargestNumbers(t *testing.T) { t.Errorf("CalculateLargestNumbers() error = %v, wantErr %v", err, tt.wantErr) return } - if !assert.ElementsMatch(t, got, tt.want) { + if err == nil && !reflect.DeepEqual(got, tt.want) { t.Errorf("test CalculateLargestNumbers() = %v, want %v", got, tt.want) } }) diff --git a/calculator/sort.go b/calculator/sort.go new file mode 100644 index 0000000..405e536 --- /dev/null +++ b/calculator/sort.go @@ -0,0 +1,10 @@ +package calculator + +import "sort" + +func sortDesc(numbers []int) []int { + sort.SliceStable(numbers, func(i, j int) bool { + return numbers[i] > numbers[j] + }) + return numbers +} diff --git a/calculator/sort_test.go b/calculator/sort_test.go new file mode 100644 index 0000000..1cb060e --- /dev/null +++ b/calculator/sort_test.go @@ -0,0 +1,46 @@ +package calculator + +import ( + "reflect" + "testing" +) + +func TestSort(t *testing.T) { + type args struct { + numbers []int + } + tests := []struct { + name string + args args + want []int + }{ + { + name: "Should sort numbers", + args: args{ + numbers: []int{1, 2, 3, 4, 5}, + }, + want: []int{5, 4, 3, 2, 1}, + }, + { + name: "Should sort mixed order numbers", + args: args{ + numbers: []int{1, 11, 2, 9, 8}, + }, + want: []int{11, 9, 8, 2, 1}, + }, + { + name: "Should handler duplicate numbers", + args: args{ + numbers: []int{11, 11, 20, 9, 20, 8}, + }, + want: []int{20, 20, 11, 11, 9, 8}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := sortDesc(tt.args.numbers); !reflect.DeepEqual(got, tt.want) { + t.Errorf("Sort() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/main.go b/main.go index e14a000..908abde 100644 --- a/main.go +++ b/main.go @@ -23,6 +23,7 @@ func main() { fmt.Println("Oops: " + err.Error()) os.Exit(1) } + fmt.Printf("Top %d numbers for file %s are: %v", topNumber, filePath, topNumbers) }