initial commit
[urisagit/Sort-Maker.git] / t / numbers.t
1 #!/usr/local/bin/perl -sw
2
3 use strict ;
4
5 use lib 't' ;
6 use lib '..' ;
7 require 'common.pm' ;
8
9 my @sort_styles = qw( plain orcish ST GRT ) ;
10
11 my $sort_tests = [
12
13         {
14                 skip    => 0,
15                 name    => 'unsigned float',
16                 gold    => sub { $a <=> $b },
17                 gen     => sub {
18                         rand_number( 0, 99999 ) *
19                         10 ** rand_number( -10, 3 )
20                 },
21                 args    => [ qw( number unsigned_float ) ],
22         },
23         {
24                 skip    => 0,
25                 name    => 'signed float',
26                 gold    => sub { $a <=> $b },
27                 gen     => sub {
28                         rand_number( -99999, 99999 ) *
29                         10 ** rand_number( -10, 3 )
30                 },
31                 args    => [ qw( number signed_float ) ],
32         },
33         {
34                 skip    => 0,
35                 name    => 'unsigned integer',
36                 gold    => sub { $a <=> $b },
37                 gen     => sub { int rand_number( 0, 99999999 ) },
38                 args    => [ qw( number unsigned ) ],
39         },
40         {
41                 skip    => 0,
42                 name    => 'signed integer',
43                 gold    => sub { $a <=> $b },
44                 gen     => sub { int rand_number( -99999, 99999 ) },
45                 args    => [ qw( number signed ) ],
46         },
47         {
48                 skip    => 0,
49                 name    => 'unsigned float edge case',
50                 gold    => sub { $a <=> $b },
51                 data    => [ reverse 0 .. 100 ],
52                 args    => [ qw( number unsigned_float ) ],
53         },
54         {
55                 skip    => 0,
56                 name    => 'signed float edge case',
57                 gold    => sub { $a <=> $b },
58                 data    => [ reverse -100 .. 100 ],
59                 args    => [ qw( number signed_float ) ],
60         },
61         {
62                 skip    => 0,
63                 name    => 'unsigned integer edge case',
64                 gold    => sub { $a <=> $b },
65                 data    => [ reverse 0 .. 100 ],
66                 args    => [ qw( number unsigned ) ],
67         },
68         {
69                 skip    => 0,
70                 name    => 'signed integer edge case',
71                 gold    => sub { $a <=> $b },
72                 data    => [ -99999, 0, -999 .. 999, 99999 ],
73                 args    => [ qw( number signed ) ],
74         },
75         {
76                 skip    => 0,
77                 name    => 'unsigned float descending',
78                 gold    => sub { $b <=> $a },
79                 gen     => sub {
80                         rand_number( 0, 99999 ) *
81                         10 ** rand_number( -10, 3 )
82                 },
83                 args    => [ qw( number unsigned_float descending ) ],
84         },
85         {
86                 skip    => 0,
87                 name    => 'signed float descending',
88                 gold    => sub { $b <=> $a },
89                 gen     => sub {
90                         rand_number( -99999, 99999 ) *
91                         10 ** rand_number( -10, 3 )
92                 },
93                 args    => [ qw( number signed_float descending ) ],
94         },
95         {
96                 skip    => 0,
97                 name    => 'unsigned integer descending',
98                 gold    => sub { $b <=> $a },
99                 gen     => sub { int rand_number( 0, 99999999 ) },
100                 args    => [ qw( number unsigned descending) ],
101         },
102         {
103                 skip    => 0,
104                 name    => 'signed integer descending',
105                 gold    => sub { $b <=> $a },
106                 gen     => sub { int rand_number( -99999, 99999 ) },
107                 args    => [ qw( number signed descending ) ],
108         },
109         {
110                 skip    => 0,
111                 name    => 'unsigned float edge case descending',
112                 gold    => sub { $b <=> $a },
113                 data    => [ reverse 0 .. 100 ],
114                 args    => [ qw( number unsigned_float descending ) ],
115         },
116         {
117                 skip    => 0,
118                 name    => 'signed float edge case descending',
119                 gold    => sub { $b <=> $a },
120                 data    => [ reverse -100 .. 100 ],
121                 args    => [ qw( number signed_float descending ) ],
122         },
123         {
124                 skip    => 0,
125                 name    => 'unsigned integer edge case descending',
126                 gold    => sub { $b <=> $a },
127                 data    => [ reverse 0 .. 100 ],
128                 args    => [ qw( number unsigned descending ) ],
129         },
130         {
131                 skip    => 0,
132                 name    => 'signed integer edge case descending',
133                 gold    => sub { $b <=> $a },
134                 data    => [ -99999, 0, -999 .. 999, 99999 ],
135                 args    => [ qw( number signed descending ) ],
136         },
137
138 ] ;
139
140 common_driver( $sort_tests, \@sort_styles ) ;
141
142 exit ;