r34488 - in /branches/upstream/libstatistics-test-sequence-perl: ./ current/ current/examples/ current/lib/ current/lib/Statistics/ current/lib/Statistics/Test/ current/t/

jawnsy-guest at users.alioth.debian.org jawnsy-guest at users.alioth.debian.org
Thu Apr 30 21:58:27 UTC 2009


Author: jawnsy-guest
Date: Thu Apr 30 21:58:22 2009
New Revision: 34488

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=34488
Log:
[svn-inject] Installing original source of libstatistics-test-sequence-perl

Added:
    branches/upstream/libstatistics-test-sequence-perl/
    branches/upstream/libstatistics-test-sequence-perl/current/
    branches/upstream/libstatistics-test-sequence-perl/current/Changes
    branches/upstream/libstatistics-test-sequence-perl/current/MANIFEST
    branches/upstream/libstatistics-test-sequence-perl/current/META.yml
    branches/upstream/libstatistics-test-sequence-perl/current/Makefile.PL
    branches/upstream/libstatistics-test-sequence-perl/current/README
    branches/upstream/libstatistics-test-sequence-perl/current/examples/
    branches/upstream/libstatistics-test-sequence-perl/current/examples/comparison.pl
    branches/upstream/libstatistics-test-sequence-perl/current/lib/
    branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/
    branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/
    branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/Sequence.pm
    branches/upstream/libstatistics-test-sequence-perl/current/t/
    branches/upstream/libstatistics-test-sequence-perl/current/t/00pod.t
    branches/upstream/libstatistics-test-sequence-perl/current/t/00podcover.t
    branches/upstream/libstatistics-test-sequence-perl/current/t/11faculty.t
    branches/upstream/libstatistics-test-sequence-perl/current/t/12expfreq.t
    branches/upstream/libstatistics-test-sequence-perl/current/t/20tests.t

Added: branches/upstream/libstatistics-test-sequence-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/Changes?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/Changes (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/Changes Thu Apr 30 21:58:22 2009
@@ -1,0 +1,5 @@
+Revision history for Perl extension Statistics::Test::Sequence
+
+0.01  Fri Jan  5 15:03 2007
+	- original version
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/MANIFEST?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/MANIFEST (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/MANIFEST Thu Apr 30 21:58:22 2009
@@ -1,0 +1,12 @@
+Changes
+examples/comparison.pl
+lib/Statistics/Test/Sequence.pm
+Makefile.PL
+MANIFEST			This list of files
+README
+t/00pod.t
+t/00podcover.t
+t/11faculty.t
+t/12expfreq.t
+t/20tests.t
+META.yml                                 Module meta-data (added by MakeMaker)

Added: branches/upstream/libstatistics-test-sequence-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/META.yml?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/META.yml (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/META.yml Thu Apr 30 21:58:22 2009
@@ -1,0 +1,16 @@
+--- #YAML:1.0
+name:                Statistics-Test-Sequence
+version:             0.01
+abstract:            Sequence correlation test for random numbers
+license:             perl
+generated_by:        ExtUtils::MakeMaker version 6.31
+distribution_type:   module
+requires:     
+    Math::BigFloat:                0
+    Memoize:                       0
+    Params::Util:                  0
+meta-spec:
+    url:     http://module-build.sourceforge.net/META-spec-v1.2.html
+    version: 1.2
+author:
+    - Steffen Mueller <smueller at cpan.org>

Added: branches/upstream/libstatistics-test-sequence-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/Makefile.PL?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/Makefile.PL (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/Makefile.PL Thu Apr 30 21:58:22 2009
@@ -1,0 +1,17 @@
+use 5.006;
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    NAME              => 'Statistics::Test::Sequence',
+    VERSION_FROM      => 'lib/Statistics/Test/Sequence.pm', # finds $VERSION
+    LICENSE => 'perl',
+    PREREQ_PM         => {
+      Params::Util => '0',
+      Math::BigFloat => '0',
+      Memoize => '0',
+    }, # e.g., Module::Name => 1.1
+    ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
+      (ABSTRACT_FROM  => 'lib/Statistics/Test/Sequence.pm', # retrieve abstract from module
+       AUTHOR         => 'Steffen Mueller <smueller at cpan.org>') : ()),
+);

Added: branches/upstream/libstatistics-test-sequence-perl/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/README?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/README (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/README Thu Apr 30 21:58:22 2009
@@ -1,0 +1,138 @@
+NAME
+    Statistics::Test::Sequence - Sequence correlation test for random
+    numbers
+
+SYNOPSIS
+      use Statistics::Test::Sequence;
+      my $tester = Statistics::Test::Sequence->new();
+      $tester->set_data( [map {rand()} 1..1000000] );
+  
+      my ($metric, $actual_freq, $expected_freq) = $tester->test();
+      use Data::Dumper;
+      print "$metric\n";
+      print "Frequencies:\n";
+      print Dumper $actual_freq;
+      print "Expected frequencies:\n";
+      print Dumper $expected_freq;
+
+DESCRIPTION
+    This module implements a sequence correlation test for random number
+    generators. It shows pairwise correlation between subsequent random
+    numbers.
+
+    The algorithm is as follows: (Following Blobel. Citation in SEE ALSO
+    section.)
+
+    * Given "N+1" random numbers "u_j".
+
+    * For all "j", compare "u_j" with "u_j+1". If "u_j" is greater then
+      "u_j+1", assign a 0-Bit to the number. Otherwise, assign a 1-Bit.
+
+    * Find all sequences of equal Bits. For every sequence, increment a
+      counter for the length "k" of that sequence. (Regardless of whether
+      it's a sequence of 1's or 0's.)
+
+    * For uncorrelated random numbers, the number of sequences N(k) of
+      length "k" in the set of "N+1" random numbers is expected to be:
+
+        N(k) = 2*((k^2+3*k+1)*N - (k^3+3*k^2-k-4)) / (k+3)!
+
+METHODS
+  new
+    Creates a new random number tester.
+
+  set_data
+    Sets the random numbers to operate on. First argument must be either an
+    array reference to an array of random numbers or a code reference.
+
+    If the first argument is a code reference, the second argument must be
+    an integer "n". The code reference is called "n"-times and its return
+    values are used as random numbers.
+
+    The code reference semantics are particularily useful if you do not want
+    to store all random numbers in memory at the same time. You can write a
+    subroutine that, for example, generates and returns batches of 100
+    random numbers so no more than 101 of these numbers will be in memory at
+    the same time. Note that if you return 100 numbers at once and pass in
+    "n=50", you will have a sequence of 5000 random numbers.
+
+  test
+    Runs the sequence test on the data that was previously set using
+    "set_data".
+
+    Returns three items: The first is the root mean square of the bin
+    residuals divided by the number of random numbers. It *could* be used as
+    a measure for the quality of the random number generator and should be
+    as close to zero as possible. A better metric is to compare the
+    following two return values.
+
+    The second return value is a reference to the array of frequencies. An
+    example is in order here. Generating one million random numbers, I get:
+
+      [0, 416765, 181078, 56318, 11486, 1056, 150]
+
+    This means there were no sequences of length 0 (obvious), 416765
+    sequences of length 1, etc. There were no sequences of length 7 or
+    greater. This example is a bad random number generator! (It's a linear
+    congruent generator with "(a*x_i+c)%m" and "a=421", "c=64773",
+    "m=259200", and "x_0=4711").
+
+    The third return value is similar in nature to the second in that it is
+    a reference to an array containing sequence length frequencies. This
+    one, however, contains the frequencies that would be expected for the
+    given number of random numbers, were they uncorrelated. The number of
+    bins has the maximum length of an occurring sequence as an upper limit.
+    In the given example, you would get: (Dumped with Data::Dumper)
+
+      $VAR1 = [
+                '0',
+                '416666.75',
+                '183333.1',
+                '52777.64722222222222222222222222222222222',
+                '11507.89523809523809523809523809523809524',
+                '2033.72068452380952380952380952380952381',
+                '303.1287808641975308641975308641975308642',
+                # ...
+              ];
+
+    Note that where I put in a "# ...", you would really see a couple more
+    lines of numbers until the numbers go below an expected frequency of
+    0.1. For "n=1000000" and "k=7", you get about 39 sequences, "k=8" is
+    expected to be found 4-5 times, etc.
+
+SUBROUTINES
+  expected_frequency
+    Returns the expected frequency of the sequence length "k" in a set of
+    "n" random numbers assuming uncorrelated random numbers.
+
+    Returns this as a Math::BigFloat.
+
+    Expects "k" and "n" as arguments.
+
+    This subroutine is memoized. (See Memoize.)
+
+  faculty
+    Computes the factulty of the first argument recursively as a
+    Math::BigFloat. This subroutine is memoized. (See Memoize.)
+
+SEE ALSO
+    Math::BigFloat, Memoize, Params::Util
+
+    Random number generators: Math::Random::MT, Math::Random,
+    Math::Random::OO, Math::TrulyRandom, "/dev/random" where available
+
+    The algorithm was taken from: (German)
+
+    Blobel, V., and Lohrmann, E. *Statistische und numerische Methoden der
+    Datenanalyse*. Stuttgart, Leipzig: Teubner, 1998
+
+AUTHOR
+    Steffen Mueller, <smueller at cpan.org>
+
+COPYRIGHT AND LICENSE
+    Copyright (C) 2007 by Steffen Mueller
+
+    This library is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself, either Perl version 5.6 or, at your
+    option, any later version of Perl 5 you may have available.
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/examples/comparison.pl
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/examples/comparison.pl?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/examples/comparison.pl (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/examples/comparison.pl Thu Apr 30 21:58:22 2009
@@ -1,0 +1,42 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use lib 'lib';
+use Statistics::Test::Sequence;
+use Data::Dumper;
+use Math::Random::MT;
+my $t = Statistics::Test::Sequence->new();
+
+my $rnd;
+open my $fh, '<', '/dev/random' or die $!;
+read($fh, $rnd, 32);
+$rnd = unpack('%L', $rnd);
+my $gen = Math::Random::MT->new($rnd);
+
+{
+    my $x = 4711;
+    my $a = 421;
+    my $c = 64773;
+    my $m = 259200;
+    sub lin_kong {
+        $x = ($a*$x + $c) % $m;
+        return $x;
+    }
+}
+
+my $num = 10000000;
+foreach (
+    [ 'rand', sub {map rand(), 1..10000}, $num/10000 ],
+    [ 'MT',   sub {map $gen->rand(), 1..10000}, $num/10000 ],
+    [ 'lin',  \&lin_kong, $num ],
+) {
+    my $name = shift @$_;
+    $t->set_data(@$_);
+    print "Testing $name...\n";
+    my ($resid, $bins, $expected) = $t->test();
+    print Dumper $resid;
+    print Dumper $bins;
+    print Dumper $expected;
+}
+
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/Sequence.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/Sequence.pm?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/Sequence.pm (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/lib/Statistics/Test/Sequence.pm Thu Apr 30 21:58:22 2009
@@ -1,0 +1,349 @@
+package Statistics::Test::Sequence;
+
+use 5.006;
+use strict;
+use warnings;
+
+our $VERSION = '0.01';
+
+use Carp qw/croak/;
+use Params::Util qw/_POSINT _ARRAY _CODE/;
+use Math::BigFloat;
+use Memoize;
+
+=head1 NAME
+
+Statistics::Test::Sequence - Sequence correlation test for random numbers
+
+=head1 SYNOPSIS
+
+  use Statistics::Test::Sequence;
+  my $tester = Statistics::Test::Sequence->new();
+  $tester->set_data( [map {rand()} 1..1000000] );
+  
+  my ($metric, $actual_freq, $expected_freq) = $tester->test();
+  use Data::Dumper;
+  print "$metric\n";
+  print "Frequencies:\n";
+  print Dumper $actual_freq;
+  print "Expected frequencies:\n";
+  print Dumper $expected_freq;
+
+=head1 DESCRIPTION
+
+This module implements a sequence correlation test for random number
+generators. It shows pairwise correlation between subsequent
+random numbers.
+
+The algorithm is as follows: (Following Blobel. Citation in SEE ALSO section.)
+
+=over 2
+
+=item *
+
+Given C<N+1> random numbers C<u_j>.
+
+=item *
+
+For all C<j>, compare C<u_j> with C<u_j+1>. If C<u_j> is greater
+then C<u_j+1>, assign a 0-Bit to the number. Otherwise, assign a
+1-Bit.
+
+=item *
+
+Find all sequences of equal Bits. For every sequence, increment
+a counter for the length C<k> of that sequence. (Regardless of whether it's
+a sequence of 1's or 0's.)
+
+=item *
+
+For uncorrelated random numbers, the number of sequences C<N(k)>
+of length C<k> in the set of C<N+1> random numbers is expected to be:
+
+  N(k) = 2*((k^2+3*k+1)*N - (k^3+3*k^2-k-4)) / (k+3)!
+
+=back
+
+=head1 METHODS
+
+=cut
+
+=head2 new
+
+Creates a new random number tester.
+
+=cut
+
+sub new {
+    my $proto = shift;
+    my $class = ref($proto)||$proto;
+
+    my $self = {
+        data => undef,
+    };
+
+    bless $self => $class;
+
+    return $self;
+}
+
+=head2 set_data
+
+Sets the random numbers to operate on. First argument
+must be either an array reference to an array of random
+numbers or a code reference.
+
+If the first argument is a code reference, the second
+argument must be an integer C<n>. The code reference is
+called C<n>-times and its return values are used as
+random numbers.
+
+The code reference semantics are particularily useful if
+you do not want to store all random numbers in memory at
+the same time. You can write a subroutine that, for example,
+generates and returns batches of 100 random numbers so no
+more than 101 of these numbers will be in memory at the
+same time. Note that if you return 100 numbers at once and
+pass in C<n=50>, you will have a sequence of 5000 random
+numbers.
+
+=cut
+
+sub set_data {
+    my $self = shift;
+    my $data = shift;
+    if (_ARRAY($data)) {
+        $self->{data} = $data;
+        return 1;
+    }
+    elsif (_CODE($data)) {
+        $self->{data} = $data;
+        my $n = shift;
+        if (not _POSINT($n)) {
+            croak("'set_data' needs an integer as second argument if the first argument is a code reference.");
+        }
+        $self->{n} = $n;
+        return 1;
+    }
+    else {
+        croak("Invalid arguments to 'set_data'.");
+    }
+}
+
+=head2 test
+
+Runs the sequence test on the data that was previously set using
+C<set_data>.
+
+Returns three items: The first is the root mean square of the bin
+residuals divided by the number of random numbers. It I<could> be
+used as a measure for the quality of the random number generator
+and should be as close to zero as possible. A better metric is to
+compare the following two return values.
+
+The second return value is a reference to the array of frequencies.
+An example is in order here. Generating one million random numbers,
+I get:
+
+  [0, 416765, 181078, 56318, 11486, 1056, 150]
+
+This means there were no sequences of length 0 (obvious), 416765
+sequences of length 1, etc. There were no sequences of length 7 or
+greater. This example is a bad random number generator! (It's a
+linear congruent generator with C<(a*x_i+c)%m> and C<a=421>,
+C<c=64773>, C<m=259200>, and C<x_0=4711>).
+
+The third return value is similar in nature to the second in that it
+is a reference to an array containing sequence length frequencies.
+This one, however, contains the frequencies that would be expected for
+the given number of random numbers, were they uncorrelated.
+The number of bins has the maximum
+length of an occurring sequence as an upper limit. In the given example,
+you would get: (Dumped with Data::Dumper)
+
+  $VAR1 = [
+            '0',
+            '416666.75',
+            '183333.1',
+            '52777.64722222222222222222222222222222222',
+            '11507.89523809523809523809523809523809524',
+            '2033.72068452380952380952380952380952381',
+            '303.1287808641975308641975308641975308642',
+            # ...
+          ];
+
+Note that where I put in a C<# ...>, you would really see a couple
+more lines of numbers until the numbers go below an expected
+frequency of C<0.1>.
+For C<n=1000000> and C<k=7>, you get about
+39 sequences, C<k=8> is expected to be found 4-5 times, etc.
+
+=cut
+
+sub test {
+    my $self = shift;
+    my $data = $self->{data};
+
+    if (not defined $data) {
+        croak("Set data using 'set_data' first.");
+    }
+
+    # bin counters
+    my @bins;
+    # current sequence type (> or <)
+    my $current = undef;
+    # current sequence length
+    my $length = 0;
+    # total number of random numbers
+    my $numbers;
+
+    if (_ARRAY($data)) {
+        $current = ($data->[0] <=> $data->[1]) || 1;
+        $length++;
+        $numbers = @$data;
+
+        foreach my $i (1 .. $#$data-1) {
+            my $cmp = ($data->[$i] <=> $data->[$i+1]) || 1;
+            if ($current == $cmp) {
+                $length++;
+            }
+            else {
+                $current = $cmp;
+                $bins[$length]++;
+                $length = 1;
+            }
+        }
+        $bins[$length]++;
+    }
+    else { # CODE
+        my @cache;
+        my $calls = $self->{n};
+        my $first_run = 1;
+        foreach (1..$calls) {
+            # get new data
+            push @cache, $data->();
+            # first run => initialize with first comparison
+            if ($first_run and @cache > 1) {
+                $current = ($cache[0] <=> $cache[1]) || 1;
+                shift @cache;
+                $length++;  # == 1
+                $numbers++; # == 1
+                $first_run = 0;
+            }
+            while (@cache > 1) {
+                $numbers++;
+                my $this = shift @cache;
+                my $cmp = ($this <=> $cache[0]) || 1;
+                if ($current == $cmp) {
+                    $length++;
+                }
+                else {
+                    $current = $cmp;
+                    $bins[$length]++;
+                    $length = 1;
+                }
+            }
+        }
+        $bins[$length]++;
+    }
+
+    my @expected = (0); # 0-bin is empty
+    foreach my $bin (1..$#bins) {
+        $expected[$bin] = expected_frequency($bin, $numbers-1);
+    }
+    my $last_bin = $#bins;
+    while ($expected[$last_bin] > 0.1) {
+        $last_bin++;
+        $expected[$last_bin] = expected_frequency($last_bin, $numbers-1);
+    }
+
+    foreach my $bin (0..$last_bin) {
+        $bins[$bin] = 0 if not defined $bins[$bin];
+    }
+
+
+    my @diff = map { abs($bins[$_] - $expected[$_]) } 0..$#bins;
+
+    my $residual = 0;
+    $residual += $_**2 for @diff;
+    $residual = sqrt($residual);
+    $residual = "$residual"; # de-bigfloatize
+
+    @expected = map {"$_"} @expected; # de-bigfloatize
+
+    return(
+        $residual / ($numbers-1),
+        \@bins,
+        \@expected,
+    );
+}
+
+=head1 SUBROUTINES
+
+=head2 expected_frequency
+
+Returns the expected frequency of the sequence length C<k>
+in a set of C<n> random numbers assuming uncorrelated random
+numbers.
+
+Returns this as a L<Math::BigFloat>.
+
+Expects C<k> and C<n> as arguments.
+
+This subroutine is memoized. (See L<Memoize>.)
+
+=cut
+
+memoize('expected_frequency');
+sub expected_frequency {
+    my $k = Math::BigFloat->new(shift);
+    my $n = Math::BigFloat->new(shift);
+    return(
+        2 * ( ($k**2 + 3*$k + 1)*$n - ($k**3 + 3*$k**2 - $k - 4) )
+        / faculty($k+3)
+    );
+}
+
+=head2 faculty
+
+Computes the factulty of the first argument recursively as a
+L<Math::BigFloat>. This subroutine is memoized. (See L<Memoize>.)
+
+=cut
+
+memoize('faculty');
+sub faculty {
+    my $n = shift;
+    return Math::BigFloat->bone() if $n <= 1;
+    return $n * faculty($n-1);
+}
+
+1;
+__END__
+
+=head1 SEE ALSO
+
+L<Math::BigFloat>, L<Memoize>, L<Params::Util>
+
+Random number generators:
+L<Math::Random::MT>, L<Math::Random>, L<Math::Random::OO>,
+L<Math::TrulyRandom>, C</dev/random> where available
+
+The algorithm was taken from: (German)
+
+Blobel, V., and Lohrmann, E. I<Statistische und numerische Methoden
+der Datenanalyse>. Stuttgart, Leipzig: Teubner, 1998
+
+=head1 AUTHOR
+
+Steffen Mueller, E<lt>smueller at cpan.orgE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2007 by Steffen Mueller
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.6 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut

Added: branches/upstream/libstatistics-test-sequence-perl/current/t/00pod.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/t/00pod.t?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/t/00pod.t (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/t/00pod.t Thu Apr 30 21:58:22 2009
@@ -1,0 +1,5 @@
+use Test::More;
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/t/00podcover.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/t/00podcover.t?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/t/00podcover.t (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/t/00podcover.t Thu Apr 30 21:58:22 2009
@@ -1,0 +1,5 @@
+use Test::More;
+eval "use Test::Pod::Coverage 1.00";
+plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage" if $@;
+all_pod_coverage_ok();
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/t/11faculty.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/t/11faculty.t?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/t/11faculty.t (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/t/11faculty.t Thu Apr 30 21:58:22 2009
@@ -1,0 +1,39 @@
+use strict;
+use warnings;
+use Test::More tests => 1+2*20;
+BEGIN { use_ok('Statistics::Test::Sequence') };
+
+my @fac = qw(
+1
+2
+6
+24
+120
+720
+5040
+40320
+362880
+3628800
+39916800
+479001600
+6227020800
+87178291200
+1307674368000
+20922789888000
+355687428096000
+6402373705728000
+121645100408832000
+2432902008176640000
+);
+
+foreach (1..2) {
+    my $msg = '';
+    $msg = ' ... memoized' if $_ ==2;
+    foreach (1.. at fac) {
+        is(
+            $fac[$_-1], Statistics::Test::Sequence::faculty($_),
+            "faculty($_)$msg"
+        );
+    }
+}
+

Added: branches/upstream/libstatistics-test-sequence-perl/current/t/12expfreq.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/t/12expfreq.t?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/t/12expfreq.t (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/t/12expfreq.t Thu Apr 30 21:58:22 2009
@@ -1,0 +1,24 @@
+use strict;
+use warnings;
+use Test::More tests => 1+20;
+BEGIN { use_ok('Statistics::Test::Sequence') };
+use constant EPS => 1e-9;
+
+foreach (1..10) {
+    my $n = 10000*$_**2;
+    my $f = Statistics::Test::Sequence::expected_frequency(1, $n);
+    my $exp = ($n*5+1)/12;
+    ok(about_equal($exp, $f), "Expect frequency for n=$n, k=1 ($exp == $f)");
+}
+
+foreach (1..10) {
+    my $n = 10005*$_**2;
+    my $f = Statistics::Test::Sequence::expected_frequency(2, $n);
+    my $exp = ($n*11-14)/60;
+    ok(about_equal($exp, $f), "Expect frequency for n=$n, k=2 ($exp == $f)");
+}
+
+sub about_equal {
+    return 1 if $_[0] + EPS > $_[1] and $_[0] - EPS < $_[1];
+    return 0;
+}

Added: branches/upstream/libstatistics-test-sequence-perl/current/t/20tests.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libstatistics-test-sequence-perl/current/t/20tests.t?rev=34488&op=file
==============================================================================
--- branches/upstream/libstatistics-test-sequence-perl/current/t/20tests.t (added)
+++ branches/upstream/libstatistics-test-sequence-perl/current/t/20tests.t Thu Apr 30 21:58:22 2009
@@ -1,0 +1,39 @@
+use strict;
+use warnings;
+use Test::More tests => 14;
+BEGIN { use_ok('Statistics::Test::Sequence') };
+
+my $t = Statistics::Test::Sequence->new();
+isa_ok($t, 'Statistics::Test::Sequence');
+
+eval {
+    $t->set_data(
+        [map rand(), 1..10000]
+    );
+};
+ok(!$@);
+
+ok(ref($t->{data}) eq 'ARRAY');
+ok(@{$t->{data}} == 10000);
+
+my ($res, $bins, $exp);
+eval { ($res, $bins, $exp) = $t->test(); };
+ok(!$@);
+ok(defined $res);
+ok(ref($bins) eq 'ARRAY');
+ok(ref($exp) eq 'ARRAY');
+
+eval {
+    $t->set_data(
+        sub { map rand(), 1..100 },
+        100
+    );
+};
+ok(!$@);
+
+eval { ($res, $bins, $exp) = $t->test(); };
+ok(!$@);
+ok(defined $res);
+ok(ref($bins) eq 'ARRAY');
+ok(ref($exp) eq 'ARRAY');
+




More information about the Pkg-perl-cvs-commits mailing list