SORT CASES: Convert tests to Autotest framework.
[pspp-builds.git] / tests / language / stats / sort-cases.at
1 AT_BANNER([SORT CASES])
2
3 m4_divert_push([PREPARE_TESTS])
4 [sort_cases_gen_data () {
5   cat > gen-data.pl <<'EOF'
6 use strict;
7 use warnings;
8
9 # Generate shuffled data.
10 my (@data);
11 for my $i (0...$ARGV[0] - 1) {
12     push (@data, ($i) x $ARGV[1]);
13 }
14 fisher_yates_shuffle (\@data);
15
16 # Output shuffled data.
17 my (@shuffled) = map ([$data[$_], $_], 0...$#data);
18 open (SHUFFLED, ">data.txt");
19 print SHUFFLED "$data[$_] $_\n" foreach 0...$#data;
20
21 # Output sorted data.
22 my (@sorted) = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @shuffled;
23 open (SORTED, ">expout");
24 printf SORTED " %8d %8d \n", $_->[0], $_->[1] foreach @sorted;
25
26 # From perlfaq4.
27 sub fisher_yates_shuffle {
28     my $deck = shift;  # $deck is a reference to an array
29     my $i = @$deck;
30     while ($i--) {
31         my $j = int rand ($i+1);
32         @$deck[$i,$j] = @$deck[$j,$i];
33     }
34 }
35 EOF
36   $PERL gen-data.pl "$@"]
37 }
38 m4_divert_pop([PREPARE_TESTS])
39
40 m4_define([SORT_CASES_TEST], 
41   [AT_SETUP([sort m4_eval([$1 * $2]) cases[]m4_if([$2], [1], [], [ ($1 unique)])[]m4_if([$3], [], [], [ with $3 buffers])])
42    AT_KEYWORDS([SORT CASES])
43    AT_CHECK([sort_cases_gen_data $1 $2 $3])
44    AT_CAPTURE_FILE([data.txt])
45    AT_CAPTURE_FILE([output.txt])
46    AT_CAPTURE_FILE([sort-cases.sps])
47    AT_DATA([sort-cases.sps], [dnl
48 DATA LIST LIST NOTABLE FILE='data.txt'/x y (F8).
49 SORT BY x[]m4_if([$3], [], [], [/BUFFERS=$3]).
50 PRINT OUTFILE='output.txt'/x y.
51 EXECUTE.
52 ])
53    AT_CHECK([pspp --testing-mode -o pspp.csv sort-cases.sps])
54    AT_CHECK([cat output.txt], [0], [expout])
55    AT_CLEANUP])
56
57 SORT_CASES_TEST(100, 5, 2)
58 SORT_CASES_TEST(100, 5, 3)
59 SORT_CASES_TEST(100, 5, 4)
60 SORT_CASES_TEST(100, 5, 5)
61 SORT_CASES_TEST(100, 5, 10)
62 SORT_CASES_TEST(100, 5, 50)
63 SORT_CASES_TEST(100, 5, 100)
64 SORT_CASES_TEST(100, 5)
65
66 SORT_CASES_TEST(100, 10, 2)
67 SORT_CASES_TEST(100, 10, 3)
68 SORT_CASES_TEST(100, 10, 5)
69 SORT_CASES_TEST(100, 10)
70
71 SORT_CASES_TEST(1000, 5, 5)
72 SORT_CASES_TEST(1000, 5, 50)
73 SORT_CASES_TEST(1000, 5)
74
75 SORT_CASES_TEST(100, 100, 3)
76 SORT_CASES_TEST(100, 100, 5)
77 SORT_CASES_TEST(100, 100)
78
79 SORT_CASES_TEST(10000, 5, 500)
80
81 SORT_CASES_TEST(50000, 1)
82