Enable the show value labels feature
[pspp] / 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 CASES 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
83 dnl Bug #33089 caused SORT CASES to delete filtered cases permanently.
84 AT_SETUP([SORT CASES preserves filtered cases])
85 AT_DATA([sort-cases.sps], [dnl
86 DATA LIST FREE /x.
87 BEGIN DATA.
88 5 4 3 2 1 0
89 END DATA.
90 COMPUTE mod2 = MOD(x, 2).
91 LIST.
92 FILTER BY mod2.
93 LIST.
94 SORT CASES BY x.
95 LIST.
96 FILTER OFF.
97 LIST.
98 ])
99 AT_CHECK([pspp -O format=csv sort-cases.sps], [0], [dnl
100 Table: Data List
101 x,mod2
102 5.00,1.00
103 4.00,.00
104 3.00,1.00
105 2.00,.00
106 1.00,1.00
107 .00,.00
108
109 Table: Data List
110 x,mod2
111 5.00,1.00
112 3.00,1.00
113 1.00,1.00
114
115 Table: Data List
116 x,mod2
117 1.00,1.00
118 3.00,1.00
119 5.00,1.00
120
121 Table: Data List
122 x,mod2
123 .00,.00
124 1.00,1.00
125 2.00,.00
126 3.00,1.00
127 4.00,.00
128 5.00,1.00
129 ])
130 AT_CLEANUP