@@ -788,30 +788,73 @@ func TestUniq(t *testing.T) {
788788
789789func TestD (t * testing.T ) {
790790 t .Parallel ()
791- c := qt .New (t )
792791 ns := newNs ()
793792
794- c .Assert (ns .D (42 , 5 , 100 ), qt .DeepEquals , []int {24 , 34 , 66 , 82 , 96 })
795- c .Assert (ns .D (31 , 5 , 100 ), qt .DeepEquals , []int {12 , 37 , 38 , 69 , 98 })
796- c .Assert (ns .D (42 , 9 , 10 ), qt .DeepEquals , []int {0 , 1 , 2 , 3 , 4 , 6 , 7 , 8 , 9 })
797- c .Assert (ns .D (42 , 10 , 10 ), qt .DeepEquals , []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 })
798- c .Assert (ns .D (42 , 11 , 10 ), qt .IsNil ) // n > hi
799- c .Assert (ns .D (42 , - 5 , 100 ), qt .IsNil )
800- c .Assert (ns .D (42 , 0 , 100 ), qt .IsNil )
801- c .Assert (ns .D (42 , 5 , 0 ), qt .IsNil )
802- c .Assert (ns .D (42 , 5 , - 10 ), qt .IsNil )
803- c .Assert (ns .D (42 , 5 , 3000000 ), qt .DeepEquals , []int {720363 , 1041693 , 2009179 , 2489106 , 2873969 })
804- c .Assert (func () { ns .D (31 , 2000000 , 3000000 ) }, qt .PanicMatches , "size of result exceeds limit" )
793+ const (
794+ errNumberOfRequestedValuesRegexPattern = `.*the number of requested values.*`
795+ errMaximumRequestedValueRegexPattern = `.*the maximum requested value.*`
796+ errSeedValueRegexPattern = `.*the seed value.*`
797+ )
798+
799+ tests := []struct {
800+ name string
801+ seed any
802+ n any
803+ hi any
804+ wantResult []int
805+ wantErrText string
806+ }{
807+ // n <= hi
808+ {"seed_eq_42" , 42 , 5 , 100 , []int {24 , 34 , 66 , 82 , 96 }, "" },
809+ {"seed_eq_31" , 31 , 5 , 100 , []int {12 , 37 , 38 , 69 , 98 }, "" },
810+ {"n_lt_hi" , 42 , 9 , 10 , []int {0 , 1 , 2 , 3 , 4 , 6 , 7 , 8 , 9 }, "" },
811+ {"n_eq_hi" , 42 , 10 , 10 , []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }, "" },
812+ {"hi_eq_max_size" , 42 , 5 , maxSeqSize , []int {240121 , 347230 , 669726 , 829701 , 957989 }, "" },
813+ // n > hi
814+ {"n_gt_hi" , 42 , 11 , 10 , []int {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }, "" },
815+ // zero values
816+ {"seed_eq_0" , 0 , 5 , 100 , []int {0 , 2 , 29 , 50 , 72 }, "" },
817+ {"n_eq_0" , 42 , 0 , 100 , []int {}, "" },
818+ {"hi_eq_0" , 42 , 5 , 0 , []int {}, "" },
819+ // errors: values < 0
820+ {"seed_lt_0" , - 42 , 5 , 100 , nil , errSeedValueRegexPattern },
821+ {"n_lt_0" , 42 , - 1 , 100 , nil , errNumberOfRequestedValuesRegexPattern },
822+ {"hi_lt_0" , 42 , 5 , - 100 , nil , errMaximumRequestedValueRegexPattern },
823+ // errors: values that can't be cast to int
824+ {"seed_invalid_type" , "foo" , 5 , 100 , nil , errSeedValueRegexPattern },
825+ {"n_invalid_type" , 42 , "bar" , 100 , nil , errNumberOfRequestedValuesRegexPattern },
826+ {"hi_invalid_type" , 42 , 5 , "baz" , nil , errMaximumRequestedValueRegexPattern },
827+ // errors: values that exceed maxSeqSize
828+ {"n_gt_max_size" , 42 , maxSeqSize + 1 , 10 , nil , errNumberOfRequestedValuesRegexPattern },
829+ {"hi_gt_max_size" , 42 , 5 , maxSeqSize + 1 , nil , errMaximumRequestedValueRegexPattern },
830+ }
831+
832+ for _ , tt := range tests {
833+ t .Run (tt .name , func (t * testing.T ) {
834+ t .Parallel ()
835+ c := qt .New (t )
836+
837+ got , err := ns .D (tt .seed , tt .n , tt .hi )
838+
839+ if tt .wantErrText != "" {
840+ c .Assert (err , qt .ErrorMatches , tt .wantErrText , qt .Commentf ("n=%d, hi=%d" , tt .n , tt .hi ))
841+ c .Assert (got , qt .IsNil , qt .Commentf ("Expected nil result on error" ))
842+ return
843+ }
844+
845+ c .Assert (err , qt .IsNil , qt .Commentf ("Did not expect an error, but got: %v" , err ))
846+ c .Assert (got , qt .DeepEquals , tt .wantResult )
847+ })
848+ }
805849}
806850
807851func BenchmarkD2 (b * testing.B ) {
808852 ns := newNs ()
809-
810- runBenchmark := func (seed , n , max int ) {
853+ runBenchmark := func (seed , n , max any ) {
811854 name := fmt .Sprintf ("n=%d,max=%d" , n , max )
812855 b .Run (name , func (b * testing.B ) {
813856 for b .Loop () {
814- ns .D (seed , n , max )
857+ _ , _ = ns .D (seed , n , max )
815858 }
816859 })
817860 }
0 commit comments