Perl Module - Add function to count cases in a reader.
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 1 Jul 2011 15:04:50 +0000 (17:04 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 1 Jul 2011 15:04:50 +0000 (17:04 +0200)
Closes bug #33381

perl-module/PSPP.xs
perl-module/lib/PSPP.pm.in
perl-module/t/Pspp.t
tests/perl-module.at

index 143eb549e1a784c4df7b4c7b89fa644118f1056e..77b7682b3e29c96178034a60797887c78c2dd208 100644 (file)
@@ -727,6 +727,21 @@ CODE:
  OUTPUT:
 RETVAL
 
+SV *
+get_case_cnt (sfr)
+ struct sysreader_info *sfr;
+CODE:
+ SV *ret;
+ casenumber n = casereader_get_case_cnt (sfr->reader);
+ if (n == CASENUMBER_MAX)
+  ret = &PL_sv_undef;
+ else 
+  ret = newSViv (n);
+ RETVAL = ret;
+ OUTPUT:
+RETVAL
+
+
 
 void
 get_next_case (sfr)
index a99c77db275aed0c4345893be575669e5c9c0573..7d077992bd4ad2eef11caee90e663353021e4223 100644 (file)
@@ -483,6 +483,13 @@ Open is used to read data from an existing system file.
 It creates and returns a PSPP::Reader object which can be used to read 
 data and dictionary information from C<filename>.
 
+=head3 get_case_cnt ()
+
+Returns the number of cases in a open system file.  Some files
+do not store the number of cases.  In these instances undef
+will be returned.  Therefore, then programmer must check that the
+returned value is not undef before using it.
+
 =cut
 
 sub get_dict
index 6e267f6fb8f535c5bfff0aedd0629f555161639e..a7fb9578da8dc90efbe00dbb103c9c6b5057db30 100644 (file)
@@ -8,7 +8,7 @@
 
 # change 'tests => 1' to 'tests => last_test_to_print';
 
-use Test::More tests => 36;
+use Test::More tests => 37;
 use Text::Diff;
 use File::Temp qw/ tempfile tempdir /;
 BEGIN { use_ok('PSPP') };
@@ -605,5 +605,18 @@ colour =>blue, pink, violet
 nationality =>foreign
 size =>large
 EOF
+}
+
+
+# Test of the get_case_cnt function
+{
+ my $tempdir = tempdir( CLEANUP => 1 );
+
+ generate_sav_file ("$tempdir/in.sav", "$tempdir");
+
+ my $sf = PSPP::Reader->open ("$tempdir/in.sav");
+
+ my $n = $sf->get_case_cnt ();
 
+ ok ($n == 5, "Case count");
 }
index 308dd7711b219a317b0f09f0470fe523f10dc9f2..15ed6c2dbd84b89062c3474998c17d6d321366e6 100644 (file)
@@ -701,7 +701,7 @@ AT_SKIP_IF([test "$WITH_PERL_MODULE" = no])
 # Skip this test if Perl's Text::Diff module is not installed.
 AT_CHECK([perl -MText::Diff -e '' || exit 77])
 AT_CHECK([RUN_PERL_MODULE $abs_top_builddir/perl-module/t/Pspp.t], [0],
-  [[1..36
+  [[1..37
 ok 1 - use PSPP;
 ok 2 - Dictionary Creation
 ok 3
@@ -739,15 +739,6 @@ ok 33 - Missing Value Positive
 ok 34 - Missing Value Positive SYS
 ok 35 - Missing Value Positive Num
 ok 36 - Custom Attributes
-]],
-  [[# @&t@
-# @@ -0,0 +1 @@
-# +
-# @@ -0,0 +1 @@
-# +
-# @@ -0,0 +1 @@
-# +
-# @@ -0,0 +1 @@
-# +
-]])
+ok 37 - Case count
+]],[ignore])
 AT_CLEANUP