1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 dnl GNU General Public License for more details.
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
17 AT_BANNER([data input (data-in)])
19 m4_divert_push([PREPARE_TESTS])
21 cat > my-rand.pl <<'EOF'
22 # This random number generator and the test for it below are drawn
23 # from Park and Miller, "Random Number Generators: Good Ones are Hard
24 # to Come By", Communications of the ACM 31:10 (October 1988). It is
25 # documented to function properly on systems with a 46-bit or longer
26 # real significand, which includes systems that have 64-bit IEEE reals
27 # (with 53-bit significand). The test should catch any systems for
28 # which this is not true, in any case.
35 my ($tmp) = $a * $seed;
36 $seed = $tmp - $m * int ($tmp / $m);
37 return $seed % $modulo;
40 cat > test-my-rand.pl <<'EOF'
45 my_rand (1) foreach 1...10000;
47 die $seed if $seed != 1043618065;
51 m4_divert_pop([PREPARE_TESTS])
53 AT_SETUP([numeric input formats])
54 AT_KEYWORDS([data-in])
56 AT_CHECK([$PERL test-my-rand.pl])
66 for my $number (0, 1, .5, .015625, 123) {
67 my ($base_exp) = floor ($number ? log10 ($number) : 0);
68 for my $offset (-3...3) {
69 my ($exponent) = $base_exp + $offset;
70 my ($fraction) = $number / 10**$offset;
72 permute_zeros ($fraction, $exponent);
77 my ($fraction, $exponent) = @_;
79 my ($frac_rep) = sprintf ("%f", $fraction);
80 my ($leading_zeros) = length (($frac_rep =~ /^(0*)/)[0]);
81 my ($trailing_zeros) = length (($frac_rep =~ /(\.?0*)$/)[0]);
82 for my $i (0...$leading_zeros) {
83 for my $j (0...$trailing_zeros) {
84 my ($trimmed) = substr ($frac_rep, $i,
85 length ($frac_rep) - $i - $j);
86 next if $trimmed eq '.' || $trimmed eq '';
88 permute_commas ($trimmed, $exponent);
94 my ($frac_rep, $exponent) = @_;
95 permute_dot_comma ($frac_rep, $exponent);
96 my ($pos) = int (my_rand (length ($frac_rep) + 1));
97 $frac_rep = substr ($frac_rep, 0, $pos) . "," . substr ($frac_rep, $pos);
98 permute_dot_comma ($frac_rep, $exponent);
101 sub permute_dot_comma {
102 my ($frac_rep, $exponent) = @_;
103 permute_exponent_syntax ($frac_rep, $exponent);
104 if ($frac_rep =~ /[,.]/) {
105 $frac_rep =~ tr/.,/,./;
106 permute_exponent_syntax ($frac_rep, $exponent);
110 sub permute_exponent_syntax {
111 my ($frac_rep, $exponent) = @_;
113 if ($exponent == 0) {
114 @exp_reps = pick ('', 'e0', 'e-0', 'e+0', '-0', '+0');
115 } elsif ($exponent > 0) {
116 @exp_reps = pick ("e$exponent", "e+$exponent", "+$exponent");
118 my ($abs_exp) = -$exponent;
119 @exp_reps = pick ("e-$abs_exp", , "e-$abs_exp", "-$abs_exp");
121 permute_sign_and_affix ($frac_rep, $_) foreach @exp_reps;
124 sub permute_sign_and_affix {
125 my ($frac_rep, $exp_rep) = @_;
126 for my $prefix (pick ('', '$'),
127 pick ('-', '-$', '$-', '$-$'),
128 pick ('+', '+$', '$+', '$+$')) {
129 for my $suffix ('', '%') {
130 permute_spaces ("$prefix$frac_rep$exp_rep$suffix");
137 $s =~ s/([-+\$e%])/ $1 /g;
138 my (@fields) = split (' ', $s);
139 print join ('', @fields), "\n";
142 my ($pos) = int (my_rand ($#fields)) + 1;
143 print join ('', @fields[0...$pos - 1]);
145 print join ('', @fields[$pos...$#fields]);
151 return $_[int (my_rand ($#_ + 1))];
154 AT_CHECK([$PERL num-in.pl > num-in.data])
155 AT_DATA([num-in.sps], [dnl
158 SET MXWARNS=10000000.
159 DATA LIST FILE='num-in.data' NOTABLE/
166 PRINT OUTFILE='num-in.out'/all (6f10.4).
169 AT_CHECK([pspp -O format=csv num-in.sps])
170 AT_CHECK([gzip -cd < $top_srcdir/tests/data/num-in.expected.gz > expout])
171 AT_CHECK([cat num-in.out], [0], [expout])
174 dnl Some very old version of PSPP crashed reading big numbers,
175 dnl so this checks for regressions.
176 AT_SETUP([reading big numbers])
177 AT_KEYWORDS([data-in])
178 AT_DATA([bignum.txt], [dnl
209 199999999999999999999
210 1234567890123456789012
211 19999999999999999999999
212 123456789012345678901234
213 1999999999999999999999999
214 12345678901234567890123456
215 199999999999999999999999999
216 1234567890123456789012345678
217 19999999999999999999999999999
218 123456789012345678901234567890
219 1999999999999999999999999999999
220 12345678901234567890123456789012
221 199999999999999999999999999999999
222 1234567890123456789012345678901234
223 19999999999999999999999999999999999
224 123456789012345678901234567890123456
225 1999999999999999999999999999999999999
226 12345678901234567890123456789012345678
227 199999999999999999999999999999999999999
228 1234567890123456789012345678901234567890
229 1999999999999999999999999999999999999999
243 AT_DATA([bignum.sps], [dnl
244 title 'Test use of big numbers'.
246 *** Do the portable output.
247 data list file='bignum.txt'/BIGNUM 1-40.
250 *** Do the nonportable output for fun.
253 AT_CHECK([pspp -o pspp.csv bignum.sps], [0], [ignore])
256 AT_SETUP([DATE input format])
257 AT_KEYWORDS([data-in])
258 AT_SKIP_IF([test "$PYTHON" = none])
259 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py date d-m-y])
260 AT_FAIL_IF([test ! -s date.sps || test ! -s date.input || test ! -s expout])
261 AT_CHECK([pspp -O format=csv date.sps])
262 AT_CHECK([cat date.output], [0], [expout])
265 AT_SETUP([ADATE input format])
266 AT_KEYWORDS([data-in])
267 AT_SKIP_IF([test "$PYTHON" = none])
268 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py adate m-d-y])
269 AT_FAIL_IF([test ! -s adate.sps || test ! -s adate.input || test ! -s expout])
270 AT_CHECK([pspp -O format=csv adate.sps])
271 AT_CHECK([cat adate.output], [0], [expout])
274 AT_SETUP([EDATE input format])
275 AT_KEYWORDS([data-in])
276 AT_SKIP_IF([test "$PYTHON" = none])
277 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py edate d-m-y])
278 AT_FAIL_IF([test ! -s edate.sps || test ! -s edate.input || test ! -s expout])
279 AT_CHECK([pspp -O format=csv edate.sps])
280 AT_CHECK([cat edate.output], [0], [expout])
283 AT_SETUP([JDATE input format])
284 AT_KEYWORDS([data-in])
285 AT_SKIP_IF([test "$PYTHON" = none])
286 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py jdate j])
287 AT_FAIL_IF([test ! -s jdate.sps || test ! -s jdate.input || test ! -s expout])
288 AT_CHECK([pspp -O format=csv jdate.sps])
289 AT_CHECK([cat jdate.output], [0], [expout])
292 AT_SETUP([SDATE input format])
293 AT_KEYWORDS([data-in])
294 AT_SKIP_IF([test "$PYTHON" = none])
295 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py sdate y-m-d])
296 AT_FAIL_IF([test ! -s sdate.sps || test ! -s sdate.input || test ! -s expout])
297 AT_CHECK([pspp -O format=csv sdate.sps])
298 AT_CHECK([cat sdate.output], [0], [expout])
301 AT_SETUP([QYR input format])
302 AT_KEYWORDS([data-in])
303 AT_SKIP_IF([test "$PYTHON" = none])
304 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py qyr qQy])
305 AT_FAIL_IF([test ! -s qyr.sps || test ! -s qyr.input || test ! -s expout])
306 AT_CHECK([pspp -O format=csv qyr.sps])
307 AT_CHECK([cat qyr.output], [0], [expout])
310 AT_SETUP([MOYR input format])
311 AT_KEYWORDS([data-in])
312 AT_SKIP_IF([test "$PYTHON" = none])
313 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py moyr m-y])
314 AT_FAIL_IF([test ! -s moyr.sps || test ! -s moyr.input || test ! -s expout])
315 AT_CHECK([pspp -O format=csv moyr.sps])
316 AT_CHECK([cat moyr.output], [0], [expout])
319 AT_SETUP([WKYR input format])
320 AT_KEYWORDS([data-in])
321 AT_SKIP_IF([test "$PYTHON" = none])
322 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py wkyr wWy])
323 AT_FAIL_IF([test ! -s wkyr.sps || test ! -s wkyr.input || test ! -s expout])
324 AT_CHECK([pspp -O format=csv wkyr.sps])
325 AT_CHECK([cat wkyr.output], [0], [expout])
328 AT_SETUP([DATETIME input format])
329 AT_KEYWORDS([data-in])
330 AT_SKIP_IF([test "$PYTHON" = none])
331 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py datetime "d-m-y +H:M" "d-m-y +H:M:S"])
332 AT_FAIL_IF([test ! -s datetime.sps || test ! -s datetime.input || \
334 AT_CHECK([pspp -O format=csv datetime.sps])
335 AT_CHECK([cat datetime.output], [0], [expout])
338 AT_SETUP([YMDHMS input format])
339 AT_KEYWORDS([data-in])
340 AT_SKIP_IF([test "$PYTHON" = none])
341 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-date-input.py ymdhms "y-m-d +H:M" "y-m-d +H:M:S"])
342 AT_FAIL_IF([test ! -s ymdhms.sps || test ! -s ymdhms.input || \
344 AT_CHECK([pspp -O format=csv ymdhms.sps])
345 AT_CHECK([cat ymdhms.output], [0], [expout])
348 AT_SETUP([MTIME input format])
349 AT_KEYWORDS([data-in])
350 AT_SKIP_IF([test "$PYTHON" = none])
351 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py mtime +M:S])
352 AT_FAIL_IF([test ! -s mtime.sps || test ! -s mtime.input || test ! -s expout])
353 AT_CHECK([pspp -O format=csv mtime.sps])
354 AT_CHECK([cat mtime.output], [0], [expout])
357 AT_SETUP([TIME input format])
358 AT_KEYWORDS([data-in])
359 AT_SKIP_IF([test "$PYTHON" = none])
360 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py time +H:M +H:M:S])
361 AT_FAIL_IF([test ! -s time.sps || test ! -s time.input || test ! -s expout])
362 AT_CHECK([pspp -O format=csv time.sps])
363 AT_CHECK([cat time.output], [0], [expout])
366 AT_SETUP([DTIME input format])
367 AT_KEYWORDS([data-in])
368 AT_SKIP_IF([test "$PYTHON" = none])
369 AT_CHECK([$PYTHON $top_srcdir/tests/data/test-time-input.py dtime '+D H:M' '+D H:M:S'])
370 AT_FAIL_IF([test ! -s dtime.sps || test ! -s dtime.input || test ! -s expout])
371 AT_CHECK([pspp -O format=csv dtime.sps])
372 AT_CHECK([cat dtime.output], [0], [expout])
375 AT_SETUP([binary and hexadecimal input (IB, PIB, and PIBHEX formats)])
376 AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > binhex-in.data])
377 AT_CHECK([[wc -c < binhex-in.data | sed 's/[ ]//g']], [0], [131072
379 AT_DATA([binhex-in.sps], [dnl
382 SET MXWARNS=10000000.
384 FILE HANDLE data/NAME='binhex-in.data'/MODE=IMAGE/LRECL=2.
385 DATA LIST FILE=data NOTABLE/ib 1-2 (IB) pib 1-2 (PIB) pibhex 1-2 (PIBHEX).
386 COMPUTE x=$CASENUM - 1.
387 PRINT OUTFILE='binhex-in.out'/x (PIBHEX4) ' ' ib pib pibhex.
390 AT_CHECK([gzip -cd < $top_srcdir/tests/data/binhex-in.expected.cmp.gz | \
391 $PERL -pe "printf ' %04X ', $.-1" > expout])
392 AT_CHECK([pspp -O format=csv binhex-in.sps], [0])
393 AT_CHECK([cat binhex-in.out], [0], [expout])
396 AT_SETUP([BCD input (P and PK formats)])
397 AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > bcd-in.data])
398 AT_CHECK([[wc -c < bcd-in.data | sed 's/[ ]//g']], [0], [131072
400 AT_DATA([bcd-in.sps], [dnl
402 SET MXWARNS=10000000.
404 FILE HANDLE data/NAME='bcd-in.data'/MODE=IMAGE/LRECL=2.
405 DATA LIST FILE=data NOTABLE/p 1-2 (P) pk 1-2 (PK).
406 COMPUTE x=$CASENUM - 1.
407 PRINT OUTFILE='bcd-in.out'/x (PIBHEX4) ' ' P PK.
410 AT_CHECK([gzip -cd < $top_srcdir/tests/data/bcd-in.expected.cmp.gz | \
411 $PERL -pe "printf ' %04X ', $.-1" > expout])
412 AT_CHECK([pspp -O format=csv bcd-in.sps])
413 AT_CHECK([cat bcd-in.out], [0], [expout])
416 AT_SETUP([legacy input (N and Z formats)])
417 AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > legacy-in.data])
418 AT_CHECK([[wc -c < legacy-in.data | sed 's/[ ]//g']], [0], [131072
420 AT_DATA([legacy-in.sps], [dnl
422 SET MXWARNS=10000000.
424 FILE HANDLE data/NAME='legacy-in.data'/MODE=IMAGE/LRECL=2.
425 DATA LIST NOTABLE FILE=data/n 1-2 (N) z 1-2 (z).
426 COMPUTE x=$CASENUM - 1.
427 PRINT OUTFILE='legacy-in.out'/x (PIBHEX4) ' ' N Z.
430 AT_CHECK([gzip -cd < $top_srcdir/tests/data/legacy-in.expected.cmp.gz | \
431 $PERL -pe "printf ' %04X ', $.-1" > expout])
432 AT_CHECK([pspp -O format=csv legacy-in.sps])
433 AT_CHECK([cat legacy-in.out], [0], [expout])
436 AT_SETUP([WKDAY input format])
437 AT_DATA([wkday.sps], [dnl
438 DATA LIST NOTABLE /wkday2 1-2 (wkday)
446 wkday10 1-10 (wkday).
459 FORMATS ALL (WKDAY2).
460 PRINT OUTFILE='wkday.out'/ALL.
463 AT_CHECK([pspp -O format=csv wkday.sps], [0], [dnl
464 wkday.sps:20.1-20.2: warning: Data for variable wkday2 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
466 wkday.sps:20.1-20.3: warning: Data for variable wkday3 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
468 wkday.sps:20.1-20.4: warning: Data for variable wkday4 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
470 wkday.sps:20.1-20.5: warning: Data for variable wkday5 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
472 wkday.sps:20.1-20.6: warning: Data for variable wkday6 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
474 wkday.sps:20.1-20.7: warning: Data for variable wkday7 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
476 wkday.sps:20.1-20.8: warning: Data for variable wkday8 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
478 wkday.sps:20.1-20.9: warning: Data for variable wkday9 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
480 wkday.sps:20.1-20.10: warning: Data for variable wkday10 is not valid as format WKDAY: Unrecognized weekday name. At least the first two letters of an English weekday name must be specified.
482 AT_CHECK([cat wkday.out], [0], [dnl
483 . . . . . . . . . @&t@
484 . . . . . . . . . @&t@
485 MO MO MO MO MO MO MO MO MO @&t@
486 TU TU TU TU TU TU TU TU TU @&t@
487 WE WE WE WE WE WE WE WE WE @&t@
488 TH TH TH TH TH TH TH TH TH @&t@
489 FR FR FR FR FR FR FR FR FR @&t@
490 SA SA SA SA SA SA SA SA SA @&t@
491 SU SU SU SU SU SU SU SU SU @&t@
492 . . . . . . . . . @&t@
496 AT_SETUP([MONTH input format])
497 AT_DATA([month.sps], [dnl
498 DATA LIST NOTABLE /month3 1-3 (MONTH)
505 month10 1-10 (MONTH).
554 FORMATS ALL (MONTH3).
555 PRINT OUTFILE='month.out'/ALL.
558 AT_CHECK([pspp -O format=csv month.sps], [0], [dnl
559 month.sps:15.1-15.4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
561 month.sps:15.1-15.5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
563 month.sps:15.1-15.6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
565 month.sps:15.1-15.7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
567 month.sps:15.1-15.8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
569 month.sps:15.1-15.9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
571 month.sps:15.1-15.10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
573 month.sps:26.1-26.3: warning: Data for variable month3 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
575 month.sps:26.1-26.4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
577 month.sps:26.1-26.5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
579 month.sps:26.1-26.6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
581 month.sps:26.1-26.7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
583 month.sps:26.1-26.8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
585 month.sps:26.1-26.9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
587 month.sps:26.1-26.10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
589 month.sps:39.1-39.3: warning: Data for variable month3 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
591 month.sps:39.1-39.4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
593 month.sps:39.1-39.5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
595 month.sps:39.1-39.6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
597 month.sps:39.1-39.7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
599 month.sps:39.1-39.8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
601 month.sps:39.1-39.9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
603 month.sps:39.1-39.10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format. Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
605 AT_CHECK([cat month.out], [0], [dnl
608 JAN JAN JAN JAN JAN JAN JAN JAN @&t@
609 FEB FEB FEB FEB FEB FEB FEB FEB @&t@
610 MAR MAR MAR MAR MAR MAR MAR MAR @&t@
611 MAR . . . . . . . @&t@
612 APR APR APR APR APR APR APR APR @&t@
613 MAY MAY MAY MAY MAY MAY MAY MAY @&t@
614 JUN JUN JUN JUN JUN JUN JUN JUN @&t@
615 JUL JUL JUL JUL JUL JUL JUL JUL @&t@
616 JUL AUG AUG AUG AUG AUG AUG AUG @&t@
617 SEP SEP SEP SEP SEP SEP SEP SEP @&t@
618 JUL AUG AUG AUG AUG AUG AUG AUG @&t@
619 OCT OCT OCT OCT OCT OCT OCT OCT @&t@
620 NOV NOV NOV NOV NOV NOV NOV NOV @&t@
621 DEC DEC DEC DEC DEC DEC DEC DEC @&t@
623 JAN JAN JAN JAN JAN JAN JAN JAN @&t@
624 FEB FEB FEB FEB FEB FEB FEB FEB @&t@
625 MAR MAR MAR MAR MAR MAR MAR MAR @&t@
626 APR APR APR APR APR APR APR APR @&t@
627 MAY MAY MAY MAY MAY MAY MAY MAY @&t@
628 JUN JUN JUN JUN JUN JUN JUN JUN @&t@
629 JUL JUL JUL JUL JUL JUL JUL JUL @&t@
630 AUG AUG AUG AUG AUG AUG AUG AUG @&t@
631 SEP SEP SEP SEP SEP SEP SEP SEP @&t@
632 OCT OCT OCT OCT OCT OCT OCT OCT @&t@
633 NOV NOV NOV NOV NOV NOV NOV NOV @&t@
634 DEC DEC DEC DEC DEC DEC DEC DEC @&t@
636 JAN JAN JAN JAN JAN JAN JAN JAN @&t@
637 JAN JAN JAN JAN JAN JAN JAN JAN @&t@
638 FEB FEB FEB FEB FEB FEB FEB FEB @&t@
639 FEB FEB FEB FEB FEB FEB FEB FEB @&t@
640 MAR MAR MAR MAR MAR MAR MAR MAR @&t@
641 MAR MAR MAR MAR MAR MAR MAR MAR @&t@
642 APR APR APR APR APR APR APR APR @&t@
643 MAY MAY MAY MAY MAY MAY MAY MAY @&t@
644 JUN JUN JUN JUN JUN JUN JUN JUN @&t@
645 JUL JUL JUL JUL JUL JUL JUL JUL @&t@
646 AUG AUG AUG AUG AUG AUG AUG AUG @&t@
647 SEP SEP SEP SEP SEP SEP SEP SEP @&t@
648 OCT OCT OCT OCT OCT OCT OCT OCT @&t@
649 NOV NOV NOV NOV NOV NOV NOV NOV @&t@
650 DEC DEC DEC DEC DEC DEC DEC DEC @&t@
651 DEC DEC DEC DEC DEC DEC DEC DEC @&t@