@@ -2,6 +2,7 @@ package math
22
33import (
44 "math"
5+ "slices"
56 "testing"
67)
78
@@ -715,7 +716,7 @@ func TestIsPrime(t *testing.T) {
715716 }{
716717 {
717718 name : "success - negative 10" ,
718- args : args {x : 10 },
719+ args : args {x : - 10 },
719720 want : false ,
720721 },
721722 {
@@ -763,6 +764,126 @@ func TestIsPrime(t *testing.T) {
763764 }
764765}
765766
767+ func TestPrimeList (t * testing.T ) {
768+ type args struct {
769+ x int
770+ }
771+ tests := []struct {
772+ name string
773+ args args
774+ want []int
775+ }{
776+ {
777+ name : "success - 2" ,
778+ args : args {x : 2 },
779+ want : []int {2 },
780+ },
781+ {
782+ name : "success - 0" ,
783+ args : args {x : 0 },
784+ want : []int {},
785+ },
786+ {
787+ name : "success - 1" ,
788+ args : args {x : 1 },
789+ want : []int {},
790+ },
791+ {
792+ name : "success - 3" ,
793+ args : args {x : 3 },
794+ want : []int {2 , 3 },
795+ },
796+ {
797+ name : "success - 4" ,
798+ args : args {x : 4 },
799+ want : []int {2 , 3 },
800+ },
801+ {
802+ name : "success - 10" ,
803+ args : args {x : 10 },
804+ want : []int {2 , 3 , 5 , 7 },
805+ },
806+ {
807+ name : "success - 100 " ,
808+ args : args {x : 100 },
809+ want : []int {2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97 },
810+ },
811+ }
812+ for _ , tt := range tests {
813+ t .Run (tt .name , func (t * testing.T ) {
814+ if got := PrimeList (tt .args .x ); ! slices .Equal (got , tt .want ) {
815+ t .Errorf ("PrimeList() = %v, want %v" , got , tt .want )
816+ }
817+ })
818+ }
819+ }
820+ func TestGetDivisors (t * testing.T ) {
821+ type args struct {
822+ x int
823+ }
824+ tests := []struct {
825+ name string
826+ args args
827+ want []int
828+ }{
829+ {
830+ name : "success - 0" ,
831+ args : args {x : 0 },
832+ want : []int {},
833+ },
834+ {
835+ name : "success - 1" ,
836+ args : args {x : 1 },
837+ want : []int {1 },
838+ },
839+ {
840+ name : "success - 2" ,
841+ args : args {x : 2 },
842+ want : []int {1 , 2 },
843+ },
844+ {
845+ name : "success - 3" ,
846+ args : args {x : 3 },
847+ want : []int {1 , 3 },
848+ },
849+ {
850+ name : "success - 4" ,
851+ args : args {x : 4 },
852+ want : []int {1 , 2 , 4 },
853+ },
854+ {
855+ name : "success - 10" ,
856+ args : args {x : 10 },
857+ want : []int {1 , 2 , 5 , 10 },
858+ },
859+ {
860+ name : "success - 49" ,
861+ args : args {x : 49 },
862+ want : []int {1 , 7 , 49 },
863+ },
864+ {
865+ name : "success - 48" ,
866+ args : args {x : 48 },
867+ want : []int {1 , 2 , 3 , 4 , 6 , 8 , 12 , 16 , 24 , 48 },
868+ },
869+ {
870+ name : "success - 100 " ,
871+ args : args {x : 100 },
872+ want : []int {1 , 2 , 4 , 5 , 10 , 20 , 25 , 50 , 100 },
873+ },
874+ }
875+ for _ , tt := range tests {
876+ t .Run (tt .name , func (t * testing.T ) {
877+ got := GetDivisors (tt .args .x )
878+ // The slice need to be sorted in order to be compared
879+ slices .Sort (got )
880+ if ! slices .Equal (got , tt .want ) {
881+ t .Errorf ("GetDivisors() = %v, want %v" , got , tt .want )
882+ }
883+ })
884+ }
885+ }
886+
766887// ================================================================================
767888// ### BENCHMARKS
768889// ================================================================================
@@ -819,3 +940,21 @@ func BenchmarkIsPrime(b *testing.B) {
819940 _ = IsPrime (prime )
820941 }
821942}
943+
944+ func BenchmarkPrimeList (b * testing.B ) {
945+ b .ReportAllocs ()
946+
947+ const n = 1e8
948+ for b .Loop () {
949+ _ = PrimeList (n )
950+ }
951+ }
952+
953+ func BenchmarkGetDivisors (b * testing.B ) {
954+ b .ReportAllocs ()
955+
956+ const n = 2e9
957+ for b .Loop () {
958+ _ = GetDivisors (n )
959+ }
960+ }
0 commit comments