Much wider support for Catacomb in all its glory.
[catacomb-perl] / t / share.t
diff --git a/t/share.t b/t/share.t
new file mode 100644 (file)
index 0000000..f4c7293
--- /dev/null
+++ b/t/share.t
@@ -0,0 +1,49 @@
+# -*-mode: perl; comment-column: 68-*-
+use Test;
+BEGIN { plan tests => 11; }
+use Catacomb qw(:const $random);
+
+$sec = $random->mp(256);
+$sh = Catacomb::Share::Prime->new(3);
+ok $sh->t == 3;                                                            #t    1
+ok !defined $sh->p;                                                #t    2
+@sh = ();
+$sh->mkshares($sec);
+$p = $sh->p();
+ok defined $p;                                                     #t    3
+for (my $i = 0; $i < 5; $i++) {
+  $sh[$i] = $sh->get($i);
+}
+$sh = Catacomb::Share::Prime->new(3, $p);
+ok $sh->p == $p;                                                   #t    4
+$sh->add(2, $sh[2]);
+ok $sh->add(4, $sh[4]) == 1;                                       #t    5
+ok $sh->i == 2;                                                            #t    6
+$sh->add(1, $sh[1]);
+$r = $sh->combine();
+ok $r == $sec;                                                     #t    7
+undef $sec;
+undef $sh;
+undef @sh;
+undef $p;
+undef $r;
+
+$sec = $random->fill(16);
+$sh = Catacomb::Share::GF->new(3, 16);
+ok $sh->t == 3;                                                            #t    8
+ok $sh->sz == 16;                                                  #t    9
+@sh = ();
+$sh->mkshares($sec);
+for (my $i = 0; $i < 5; $i++) {
+  $sh[$i] = $sh->get($i);
+}
+$sh = Catacomb::Share::GF->new(3, 16);
+$sh->add(2, $sh[2]);
+ok $sh->add(3, $sh[3]) == 1;                                       #t   10
+$sh->add(0, $sh[0]);
+$r = $sh->combine();
+ok $r, $sec;                                                       #t   11
+undef $sec;
+undef $sh;
+undef @sh;
+undef $r;