work on PRINT encoding
[pspp] / tests / perl-module.at
1 AT_BANNER([Perl module tests])
2
3 dnl This command can be used to run with the PSPP Perl module after it has been
4 dnl built (with "make") but before it has been installed.  The -I options are
5 dnl equivalent to "use ExtUtils::testlib;" inside the Perl program, but it does
6 dnl not need to be run with the perl-module build directory as the current
7 dnl working directory.
8 dnl
9 dnl XXX "libtool --mode=execute" is probably better than setting
10 dnl LD_LIBRARY_PATH.
11 m4_define([RUN_PERL_MODULE],
12   [LD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
13    DYLD_LIBRARY_PATH=$abs_top_builddir/src/.libs \
14    $PERL -I$abs_top_builddir/perl-module/blib/arch \
15          -I$abs_top_builddir/perl-module/blib/lib])
16
17 AT_SETUP([Perl create system file])
18 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
19 AT_DATA([test.pl],
20   [use warnings;
21    use strict;
22    use PSPP;
23
24    my $d = PSPP::Dict->new();
25    die "dictionary creation" if !ref $d;
26    die if $d->get_var_cnt () != 0;
27
28    $d->set_label ("My Dictionary");
29    $d->set_documents ("These Documents");
30
31    # Tests for variable creation
32
33    my $var0 = PSPP::Var->new ($d, "le");
34    die "trap illegal variable name" if ref $var0;
35    die if $d->get_var_cnt () != 0;
36
37    $var0 = PSPP::Var->new ($d, "legal");
38    die "accept legal variable name" if !ref $var0;
39    die if $d->get_var_cnt () != 1;
40
41    my $var1 = PSPP::Var->new ($d, "money", 
42                               (fmt=>PSPP::Fmt::DOLLAR,
43                                width=>4, decimals=>2) );
44    die "cappet valid format" if !ref $var1;
45    die if $d->get_var_cnt () != 2;
46
47    $d->set_weight ($var1);
48
49    my $sysfile = PSPP::Sysfile->new ('testfile.sav', $d);
50    die "create sysfile object" if !ref $sysfile;
51
52    $sysfile->close ();
53 ])
54 AT_CHECK([RUN_PERL_MODULE test.pl])
55 AT_DATA([dump-dict.sps],
56   [GET FILE='testfile.sav'.
57 DISPLAY FILE LABEL.
58 DISPLAY DOCUMENTS.
59 DISPLAY DICTIONARY.
60 SHOW WEIGHT.
61 ])
62 AT_CHECK([pspp -O format=csv dump-dict.sps], [0],
63   [File label: My Dictionary
64
65 Documents in the active dataset:
66
67 These Documents
68
69 Variable,Description,,Position
70 legal,Format: F9.2,,1
71 ,Measure: Scale,,
72 ,Display Alignment: Right,,
73 ,Display Width: 8,,
74 money,Format: DOLLAR6.2,,2
75 ,Measure: Scale,,
76 ,Display Alignment: Right,,
77 ,Display Width: 8,,
78
79 dump-dict.sps:5: note: SHOW: WEIGHT is money.
80 ])
81 AT_CLEANUP
82
83 AT_SETUP([Perl writing cases to system files])
84 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
85 AT_DATA([test.pl],
86   [[use warnings;
87     use strict;
88     use PSPP;
89
90     my $d = PSPP::Dict->new();
91     PSPP::Var->new ($d, "id",
92                     (
93                      fmt=>PSPP::Fmt::F, 
94                      width=>2, 
95                      decimals=>0
96                      )
97                     );
98
99     PSPP::Var->new ($d, "name",
100                            (
101                             fmt=>PSPP::Fmt::A, 
102                             width=>20, 
103                             )
104                            );
105
106     $d->set_documents ("This should not appear");
107     $d->clear_documents ();
108     $d->add_document ("This is a document line");
109
110     $d->set_label ("This is the file label");
111
112     # Check that we can write cases to system files.
113     my $sysfile = PSPP::Sysfile->new ("testfile.sav", $d);
114     my $res = $sysfile->append_case ( [34, "frederick"]);
115     die "append case" if !$res;
116
117     $res = $sysfile->append_case ( [34, "frederick", "extra"]);
118     die "append case with too many variables" if $res;
119     $sysfile->close ();
120
121     # Check that sysfiles are closed properly automaticallly in the destructor.
122     my $sysfile2 = PSPP::Sysfile->new ("testfile2.sav", $d);
123     $res = $sysfile2->append_case ( [21, "wheelbarrow"]);
124     die "append case 2" if !$res;
125
126     $res = $sysfile->append_case ( [34, "frederick", "extra"]);
127     die "append case with too many variables" if $res;
128
129     # Don't close.  We want to test that the destructor does that.
130 ]])
131 AT_CHECK([RUN_PERL_MODULE test.pl])
132 AT_DATA([dump-dicts.sps],
133   [GET FILE='testfile.sav'.
134 DISPLAY DICTIONARY.
135 DISPLAY FILE LABEL.
136 DISPLAY DOCUMENTS.
137 LIST.
138
139 GET FILE='testfile2.sav'.
140 DISPLAY DICTIONARY.
141 DISPLAY FILE LABEL.
142 DISPLAY DOCUMENTS.
143 LIST.
144 ])
145 AT_CHECK([pspp -O format=csv dump-dicts.sps], [0],
146   [Variable,Description,,Position
147 id,Format: F2.0,,1
148 ,Measure: Scale,,
149 ,Display Alignment: Right,,
150 ,Display Width: 8,,
151 name,Format: A20,,2
152 ,Measure: Nominal,,
153 ,Display Alignment: Left,,
154 ,Display Width: 20,,
155
156 File label: This is the file label
157
158 Documents in the active dataset:
159
160 This is a document line
161
162 Table: Data List
163 id,name
164 34,frederick           @&t@
165
166 Variable,Description,,Position
167 id,Format: F2.0,,1
168 ,Measure: Scale,,
169 ,Display Alignment: Right,,
170 ,Display Width: 8,,
171 name,Format: A20,,2
172 ,Measure: Nominal,,
173 ,Display Alignment: Left,,
174 ,Display Width: 20,,
175
176 File label: This is the file label
177
178 Documents in the active dataset:
179
180 This is a document line
181
182 Table: Data List
183 id,name
184 21,wheelbarrow         @&t@
185 ])
186 AT_CLEANUP
187
188 AT_SETUP([Perl write variable parameters])
189 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
190 AT_DATA([test.pl],
191   [[use warnings;
192     use strict;
193     use PSPP;
194
195     my $dict = PSPP::Dict->new();
196     die "dictionary creation" if !ref $dict;
197
198     my $int = PSPP::Var->new ($dict, "integer", 
199                               (width=>8, decimals=>0) );
200
201     $int->set_label ("My Integer");
202
203     $int->add_value_label (99, "Silly");
204     $int->clear_value_labels ();
205     $int->add_value_label (0, "Zero");
206     $int->add_value_label (1, "Unity");
207     $int->add_value_label (2, "Duality");
208
209     my $str = PSPP::Var->new ($dict, "string", 
210                               (fmt=>PSPP::Fmt::A, width=>8) );
211
212
213     $str->set_label ("My String");
214     $str->add_value_label ("xx", "foo");
215     $str->add_value_label ("yy", "bar");
216
217     $str->set_missing_values ("this", "that");
218
219     my $longstr = PSPP::Var->new ($dict, "longstring", 
220                               (fmt=>PSPP::Fmt::A, width=>9) );
221
222
223     $longstr->set_label ("My Long String");
224     my $re = $longstr->add_value_label ("xxx", "xfoo");
225
226     $int->set_missing_values (9, 99);
227
228     my $sysfile = PSPP::Sysfile->new ("testfile.sav", $dict);
229
230
231     $sysfile->close ();
232 ]])
233 AT_CHECK([RUN_PERL_MODULE test.pl])
234 AT_DATA([dump-dict.sps],
235   [GET FILE='testfile.sav'.
236 DISPLAY DICTIONARY.
237 ])
238 AT_CHECK([pspp -O format=csv dump-dict.sps], [0],
239   [Variable,Description,,Position
240 integer,My Integer,,1
241 ,Format: F8.0,,
242 ,Measure: Scale,,
243 ,Display Alignment: Right,,
244 ,Display Width: 8,,
245 ,Missing Values: 9; 99,,
246 ,0,Zero,
247 ,1,Unity,
248 ,2,Duality,
249 string,My String,,2
250 ,Format: A8,,
251 ,Measure: Nominal,,
252 ,Display Alignment: Left,,
253 ,Display Width: 8,,
254 ,"Missing Values: ""this    ""; ""that    """,,
255 ,xx      ,foo,
256 ,yy      ,bar,
257 longstring,My Long String,,3
258 ,Format: A9,,
259 ,Measure: Nominal,,
260 ,Display Alignment: Left,,
261 ,Display Width: 9,,
262 ,xxx      ,xfoo,
263 ])
264 AT_CLEANUP
265
266 AT_SETUP([Perl dictionary survives system file])
267 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
268 AT_DATA([test.pl],
269   [[use warnings;
270 use strict;
271 use PSPP;
272
273 my $sysfile ;
274
275     {
276         my $d = PSPP::Dict->new();
277
278         PSPP::Var->new ($d, "id",
279                         (
280                          fmt=>PSPP::Fmt::F, 
281                          width=>2, 
282                          decimals=>0
283                          )
284                         );
285
286         $sysfile = PSPP::Sysfile->new ("testfile.sav", $d);
287     }
288
289     my $res = $sysfile->append_case ([3]);
290     print "Dictionary survives sysfile\n" if $res;
291 ]])
292 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
293   [Dictionary survives sysfile
294 ])
295 AT_CLEANUP
296
297 m4_define([PERL_GENERATE_SYSFILE],
298   [AT_DATA([sample.sps],
299     [[data list notable list /string (a8) longstring (a12) numeric (f10) date (date11) dollar (dollar8.2) datetime (datetime17)
300 begin data.
301 1111 One   1 1/1/1 1   1/1/1+01:01
302 2222 Two   2 2/2/2 2   2/2/2+02:02
303 3333 Three 3 3/3/3 3   3/3/3+03:03
304 .    .     . .     .   .
305 5555 Five  5 5/5/5 5   5/5/5+05:05
306 end data.
307
308
309 variable labels string 'A Short String Variable'
310   /longstring 'A Long String Variable'
311   /numeric 'A Numeric Variable'
312   /date 'A Date Variable'
313   /dollar 'A Dollar Variable'
314   /datetime 'A Datetime Variable'.
315
316
317 missing values numeric (9, 5, 999).
318
319 missing values string ("3333").
320
321 add value labels
322   /string '1111' 'ones' '2222' 'twos' '3333' 'threes'
323   /numeric 1 'Unity' 2 'Duality' 3 'Thripality'.
324
325 variable attribute
326     variables = numeric
327     attribute=colour[1]('blue') colour[2]('pink') colour[3]('violet')
328     attribute=size('large') nationality('foreign').
329
330
331 save outfile='sample.sav'.
332 ]])
333    AT_CHECK([pspp -O format=csv sample.sps])])
334
335 AT_SETUP([Perl read system file])
336 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
337 PERL_GENERATE_SYSFILE
338 AT_DATA([test.pl],
339   [[use warnings;
340     use strict;
341     use PSPP;
342
343     my $sf = PSPP::Reader->open ("sample.sav");
344
345     my $dict = $sf->get_dict ();
346
347     for (my $v = 0 ; $v < $dict->get_var_cnt() ; $v++)
348     {
349        my $var = $dict->get_var ($v);
350        my $name = $var->get_name ();
351        my $label = $var->get_label ();
352
353        print "Variable $v is \"$name\", label is \"$label\"\n";
354
355        my $vl = $var->get_value_labels ();
356
357        print "Value Labels:\n";
358        print "$_ => $vl->{$_}\n" for keys %$vl;
359     }
360
361     while (my @c = $sf->get_next_case () )
362     {
363        for (my $v = 0; $v < $dict->get_var_cnt(); $v++)
364        {
365            print "val$v: \"$c[$v]\"\n";
366        }
367        print "\n";
368     }
369 ]])
370 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
371   [Variable 0 is "string", label is "A Short String Variable"
372 Value Labels:
373 3333     => threes
374 1111     => ones
375 2222     => twos
376 Variable 1 is "longstring", label is "A Long String Variable"
377 Value Labels:
378 Variable 2 is "numeric", label is "A Numeric Variable"
379 Value Labels:
380 1 => Unity
381 3 => Thripality
382 2 => Duality
383 Variable 3 is "date", label is "A Date Variable"
384 Value Labels:
385 Variable 4 is "dollar", label is "A Dollar Variable"
386 Value Labels:
387 Variable 5 is "datetime", label is "A Datetime Variable"
388 Value Labels:
389 val0: "1111    "
390 val1: "One         "
391 val2: "1"
392 val3: "13197686400"
393 val4: "1"
394 val5: "13197690060"
395
396 val0: "2222    "
397 val1: "Two         "
398 val2: "2"
399 val3: "13231987200"
400 val4: "2"
401 val5: "13231994520"
402
403 val0: "3333    "
404 val1: "Three       "
405 val2: "3"
406 val3: "13266028800"
407 val4: "3"
408 val5: "13266039780"
409
410 val0: ".       "
411 val1: ".           "
412 val2: ""
413 val3: ""
414 val4: ""
415 val5: ""
416
417 val0: "5555    "
418 val1: "Five        "
419 val2: "5"
420 val3: "13334630400"
421 val4: "5"
422 val5: "13334648700"
423
424 ])
425 AT_CLEANUP
426
427 AT_SETUP([Perl copying system files])
428 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
429 PERL_GENERATE_SYSFILE
430 AT_DATA([test.pl],
431   [[use warnings;
432     use strict;
433     use PSPP;
434
435     my $input = PSPP::Reader->open ("sample.sav");
436
437     my $dict = $input->get_dict ();
438
439     my $output = PSPP::Sysfile->new ("copy.sav", $dict);
440
441     while (my (@c) = $input->get_next_case () )
442     {
443       $output->append_case (\@c);
444     }
445
446     $output->close ();
447 ]])
448 AT_CHECK([RUN_PERL_MODULE test.pl])
449 AT_DATA([dump-dicts.sps],
450   [GET FILE='sample.sav'.
451 DISPLAY DICTIONARY.
452 LIST.
453
454 GET FILE='copy.sav'.
455 DISPLAY DICTIONARY.
456 LIST.
457 ])
458 AT_CHECK([pspp -O format=csv dump-dicts.sps], [0],
459   [[Variable,Description,,Position
460 string,A Short String Variable,,1
461 ,Format: A8,,
462 ,Measure: Nominal,,
463 ,Display Alignment: Left,,
464 ,Display Width: 8,,
465 ,"Missing Values: ""3333    """,,
466 ,1111    ,ones,
467 ,2222    ,twos,
468 ,3333    ,threes,
469 longstring,A Long String Variable,,2
470 ,Format: A12,,
471 ,Measure: Nominal,,
472 ,Display Alignment: Left,,
473 ,Display Width: 12,,
474 numeric,A Numeric Variable,,3
475 ,Format: F10.0,,
476 ,Measure: Scale,,
477 ,Display Alignment: Right,,
478 ,Display Width: 8,,
479 ,Missing Values: 9; 5; 999,,
480 ,1,Unity,
481 ,2,Duality,
482 ,3,Thripality,
483 ,Custom attributes:,,
484 ,colour[1],blue,
485 ,colour[2],pink,
486 ,colour[3],violet,
487 ,nationality,foreign,
488 ,size,large,
489 date,A Date Variable,,4
490 ,Format: DATE11,,
491 ,Measure: Scale,,
492 ,Display Alignment: Right,,
493 ,Display Width: 8,,
494 dollar,A Dollar Variable,,5
495 ,Format: DOLLAR11.2,,
496 ,Measure: Scale,,
497 ,Display Alignment: Right,,
498 ,Display Width: 8,,
499 datetime,A Datetime Variable,,6
500 ,Format: DATETIME17.0,,
501 ,Measure: Scale,,
502 ,Display Alignment: Right,,
503 ,Display Width: 8,,
504
505 Table: Data List
506 string,longstring,numeric,date,dollar,datetime
507 1111    ,One         ,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
508 2222    ,Two         ,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
509 3333    ,Three       ,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
510 .       ,.           ,.,.,.  ,.
511 5555    ,Five        ,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
512
513 Variable,Description,,Position
514 string,A Short String Variable,,1
515 ,Format: A8,,
516 ,Measure: Nominal,,
517 ,Display Alignment: Left,,
518 ,Display Width: 8,,
519 ,"Missing Values: ""3333    """,,
520 ,1111    ,ones,
521 ,2222    ,twos,
522 ,3333    ,threes,
523 longstring,A Long String Variable,,2
524 ,Format: A12,,
525 ,Measure: Nominal,,
526 ,Display Alignment: Left,,
527 ,Display Width: 12,,
528 numeric,A Numeric Variable,,3
529 ,Format: F10.0,,
530 ,Measure: Scale,,
531 ,Display Alignment: Right,,
532 ,Display Width: 8,,
533 ,Missing Values: 9; 5; 999,,
534 ,1,Unity,
535 ,2,Duality,
536 ,3,Thripality,
537 ,Custom attributes:,,
538 ,colour[1],blue,
539 ,colour[2],pink,
540 ,colour[3],violet,
541 ,nationality,foreign,
542 ,size,large,
543 date,A Date Variable,,4
544 ,Format: DATE11,,
545 ,Measure: Scale,,
546 ,Display Alignment: Right,,
547 ,Display Width: 8,,
548 dollar,A Dollar Variable,,5
549 ,Format: DOLLAR11.2,,
550 ,Measure: Scale,,
551 ,Display Alignment: Right,,
552 ,Display Width: 8,,
553 datetime,A Datetime Variable,,6
554 ,Format: DATETIME17.0,,
555 ,Measure: Scale,,
556 ,Display Alignment: Right,,
557 ,Display Width: 8,,
558
559 Table: Data List
560 string,longstring,numeric,date,dollar,datetime
561 1111    ,One         ,1,01-JAN-2001,$1.00,01-JAN-2001 01:01
562 2222    ,Two         ,2,02-FEB-2002,$2.00,02-FEB-2002 02:02
563 3333    ,Three       ,3,03-MAR-2003,$3.00,03-MAR-2003 03:03
564 .       ,.           ,.,.,.  ,.
565 5555    ,Five        ,5,05-MAY-2005,$5.00,05-MAY-2005 05:05
566 ]])
567 AT_CLEANUP
568
569 AT_SETUP([Perl value formatting])
570 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
571 AT_DATA([dd.sps],
572   [DATA LIST LIST /d (DATETIME17).
573 BEGIN DATA.
574 11/9/2001+08:20
575 END DATA.
576
577 SAVE OUTFILE='dd.sav'.
578 ])
579 AT_CHECK([pspp -O format=csv dd.sps], [0],
580   [Table: Reading free-form data from INLINE.
581 Variable,Format
582 d,DATETIME17.0
583 ])
584 AT_DATA([test.pl],
585   [[use warnings;
586     use strict;
587     use PSPP;
588
589     my $sf = PSPP::Reader->open ("dd.sav");
590
591     my $dict = $sf->get_dict ();
592
593     my (@c) = $sf->get_next_case ();
594
595     my $var = $dict->get_var (0);
596     my $val = $c[0];
597     my $formatted = PSPP::format_value ($val, $var);
598     my $str = gmtime ($val - PSPP::PERL_EPOCH);
599     print "Formatted string is \"$formatted\"\n";
600     print "Perl representation is \"$str\"\n";
601 ]])
602 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
603   [[Formatted string is "11-SEP-2001 08:20"
604 Perl representation is "Tue Sep 11 08:20:00 2001"
605 ]])
606 AT_CLEANUP
607
608 AT_SETUP([Perl opening nonexistent file])
609 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
610 AT_DATA([test.pl],
611   [[use warnings;
612     use strict;
613     use PSPP;
614
615     my $sf = PSPP::Reader->open ("no-such-file.sav");
616
617     die "Returns undef on opening failure" if ref $sf;
618     print $PSPP::errstr, "\n";
619 ]])
620 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
621   [[Error opening `no-such-file.sav' for reading as a system file: No such file or directory.
622 ]],
623   [[Name "PSPP::errstr" used only once: possible typo at test.pl line 8.
624 ]])
625 AT_CLEANUP
626
627 AT_SETUP([Perl missing values])
628 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
629 PERL_GENERATE_SYSFILE
630 AT_DATA([test.pl],
631   [[use warnings;
632     use strict;
633     use PSPP;
634
635     my $sf = PSPP::Reader->open ("sample.sav");
636
637     my $dict = $sf->get_dict ();
638
639     my (@c) = $sf->get_next_case ();
640
641     my $stringvar = $dict->get_var (0);
642     my $numericvar = $dict->get_var (2);
643     my $val = $c[0];
644
645     die "Missing Value Negative String"
646         if PSPP::value_is_missing ($val, $stringvar);
647
648     $val = $c[2];
649
650     die "Missing Value Negative Num"
651         if PSPP::value_is_missing ($val, $numericvar);
652
653     @c = $sf->get_next_case (); 
654     @c = $sf->get_next_case (); 
655
656     $val = $c[0];
657     die "Missing Value Positive"
658         if !PSPP::value_is_missing ($val, $stringvar);
659
660     @c = $sf->get_next_case (); 
661     $val = $c[2];
662     die "Missing Value Positive SYS"
663         if !PSPP::value_is_missing ($val, $numericvar);
664
665     @c = $sf->get_next_case (); 
666     $val = $c[2];
667     die "Missing Value Positive Num"
668         if !PSPP::value_is_missing ($val, $numericvar);
669 ]])
670 AT_CHECK([RUN_PERL_MODULE test.pl])
671 AT_CLEANUP
672
673 AT_SETUP([Perl custom attributes])
674 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
675 PERL_GENERATE_SYSFILE
676 AT_DATA([test.pl],
677   [[use warnings;
678     use strict;
679     use PSPP;
680
681     my $sf = PSPP::Reader->open ("sample.sav");
682
683     my $dict = $sf->get_dict ();
684
685     my $var = $dict->get_var_by_name ("numeric");
686
687     my $attr = $var->get_attributes ();
688
689     foreach my $k (keys %$attr)
690     {
691         my $ll = $attr->{$k};
692         print "$k =>";
693         print map "$_\n", join ', ', @$ll;
694     }
695 ]])
696 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
697   [[colour =>blue, pink, violet
698 nationality =>foreign
699 size =>large
700 ]])
701 AT_CLEANUP
702
703 AT_SETUP([Perl Pspp.t])
704 AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
705 # Skip this test if Perl's Text::Diff module is not installed.
706 AT_CHECK([perl -MText::Diff -e '' || exit 77])
707 AT_CHECK([RUN_PERL_MODULE $abs_top_builddir/perl-module/t/Pspp.t], [0],
708   [[1..37
709 ok 1 - use PSPP;
710 ok 2 - Dictionary Creation
711 ok 3
712 ok 4 - Trap illegal variable name
713 ok 5
714 ok 6 - Accept legal variable name
715 ok 7
716 ok 8 - Trap duplicate variable name
717 ok 9
718 ok 10 - Accept valid format
719 ok 11
720 ok 12 - Create sysfile object
721 ok 13 - Write system file
722 ok 14 - Append Case
723 ok 15 - Appending Case with too many variables
724 ok 16 - existance
725 ok 17 - Append Case 2
726 ok 18 - existance2
727 ok 19 - Check output
728 ok 20 - Dictionary Creation 2
729 ok 21 - Value label for short string
730 ok 22 - Value label for long string
731 ok 23 - Check output 2
732 ok 24 - Dictionary survives sysfile
733 ok 25 - Basic reader operation
734 ok 26 - Streaming of files
735 Formatted string is "11-SEP-2001 08:20"
736 ok 27 - format_value function
737 ok 28 - Perl representation of time
738 ok 29 - Returns undef on opening failure
739 ok 30 - Error string on open failure
740 ok 31 - Missing Value Negative String
741 ok 32 - Missing Value Negative Num
742 ok 33 - Missing Value Positive
743 ok 34 - Missing Value Positive SYS
744 ok 35 - Missing Value Positive Num
745 ok 36 - Custom Attributes
746 ok 37 - Case count
747 ]],[ignore])
748 AT_CLEANUP