# Copyright (c) 2003, 2004, 2005 Jeffrey I Cohen. All rights reserved. # # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..15\n"; } END {print "not ok 1\n" unless $loaded;} use Genezzo::GenDBI; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): use strict; use warnings; use File::Path; use File::Spec; my $TEST_COUNT; $TEST_COUNT = 2; my $dbinit = 1; my $gnz_home = File::Spec->catdir("t", "gnz_home"); my $gnz_restore = File::Spec->catdir("t", "restore"); #rmtree($gnz_home, 1, 1); #mkpath($gnz_home, 1, 0755); { use Genezzo::TestSetup; my $fb = Genezzo::TestSetup::CreateOrRestoreDB( gnz_home => $gnz_home, restore_dir => $gnz_restore); unless (defined($fb)) { not_ok ("could not create database"); exit 1; } ok(); $dbinit = 0; } { use Genezzo::Util; my $fb = Genezzo::GenDBI->new(exe => $0, gnz_home => $gnz_home, dbinit => $dbinit); unless (defined($fb)) { not_ok ("could not find database"); exit 1; } ok(); $dbinit = 0; if ($fb->Parseall("startup")) { ok(); } else { not_ok ("could not startup"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("ct test1 col1=c col2=c col3=c col4=c")) { ok(); } else { not_ok ("could not create table"); } if ($fb->Parseall("i test1 a b c d e f g h i j k l")) { ok(); } else { not_ok ("could not insert"); } if ($fb->Parseall('insert into test1 values (\'a1\', \'b1\', \'c1\', \'d1\', \'e1\', \'f1\', \'g1\', \'h1\')')) { ok(); } else { not_ok ("could not insert"); } my $dictobj = $fb->{dictobj}; my $tstable = $dictobj->DictTableGetTable (tname => "test1"); my $tv = tied(%{$tstable}); greet $tstable; # greet $tstable, $tv; greet "colcnt is ", $tv->HCount(); my @plist; my @glist = qw( alphabravo delta_echo golf_hotel lima__mike ); for my $jj (@glist) { my $vv = $jj x 200; # make 2k bytes each push @plist, $vv; } # XXX XXX: Note that direct manipulation of the hash lets you insert # more columns than specified in the create table statement greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); # greet $tv->HSuck (value => \@plist); for my $jj (1..10) { $fb->Parseall("i test1 a b c d e f g h i j k l"); $fb->Parseall('insert into test1 values (\'a1\', \'b1\', \'c1\', \'d1\', \'e1\', \'f1\', \'g1\', \'h1\')'); $tv->HPush (\@plist); for my $ii (1..1000) { last unless ($tv->HPush(\@glist)); } } my @ggg = $tv->FirstCount(); greet @ggg; while (scalar(@ggg) > 4) { @ggg = $tv->NextCount(@ggg); my @g2 = @ggg; my $kk = shift @g2; my $est = shift @g2; my $sum = shift @g2; my $sumsq = 0; $sumsq = shift @g2; my $ccnt = shift @g2; my $tot = shift @g2; my $pct = ($ccnt/$tot) *100; my $var = 0; $var = ($sumsq - (($sum**2)/$ccnt))/($ccnt - 1) unless ($ccnt < 2); # var = 0 when numelts = 1 # my $stddev = sqrt($sumsq); my $stddev = sqrt($var); # confidence interval : 1-alpha ~= 2 for 90% conf, # 60+ samples, student-t, GAUSSIAN DATA ONLY # # mean +/- 2*stddev/sqrt(samplesize) my $alpha = 100; # 2 my $conf = $alpha*$stddev/sqrt($ccnt); # greet "estimate $est, current $sum, stddev $stddev, $pct % complete"; # printf "est %.2f+/-%.1f%%, curr %d, ", $est, ($conf*100/$est), $sum, printf "est %.2f, curr %d, ", $est, $sum, printf "stddev %.2f, %.2f %% \n", $stddev, $pct; last unless (defined($kk)); } if ($fb->Parseall("commit")) { ok(); } else { not_ok ("could not commit"); } if ($fb->Parseall("shutdown")) { ok(); } else { not_ok ("could not shutdown"); } } { use Genezzo::Util; my $fb = Genezzo::GenDBI->new(exe => $0, gnz_home => $gnz_home, dbinit => $dbinit); unless (defined($fb)) { not_ok ("could not find database"); exit 1; } ok(); $dbinit = 0; if ($fb->Parseall("startup")) { ok(); } else { not_ok ("could not startup"); } my $dictobj = $fb->{dictobj}; my $tstable = $dictobj->DictTableGetTable (tname => "_col1"); my $tv = tied(%{$tstable}); my $filter = sub { my ($tabdef, $rid, $outarr) = @_; return 1 if (defined($outarr) && scalar(@{$outarr}) && ($outarr->[1] =~ m/pref1/)); return 0; }; my $f1 = {filter => $filter}; my $sth = $tv->SQLPrepare(filter => $f1); $sth->SQLExecute(); my @outi = (1,1); while (scalar(@outi) && defined($outi[0])) { @outi = $sth->SQLFetch(); greet @outi; } $filter = sub { my ($tabdef, $rid, $outarr) = @_; return 1 if (defined($outarr) && scalar(@{$outarr}) && ($outarr->[1] =~ m/(pref1|allfileused)/)); return 0; }; $f1 = {filter => $filter}; $sth = $tv->SQLPrepare(filter => $f1); $sth->SQLExecute(); @outi = (1,1); while (scalar(@outi) && defined($outi[0])) { @outi = $sth->SQLFetch(); greet @outi; } if ($fb->Parseall("shutdown")) { ok(); } else { not_ok ("could not shutdown"); } # should be able to select from col1 even when shutdown $tstable = $dictobj->DictTableGetTable (tname => "_col1"); $tv = tied(%{$tstable}); $filter = sub { my ($tabdef, $rid, $outarr) = @_; return 1 if (defined($outarr) && scalar(@{$outarr}) && ($outarr->[1] =~ m/pref1/)); return 0; }; $f1 = {filter => $filter}; $sth = $tv->SQLPrepare(filter => $f1); $sth->SQLExecute(); @outi = (1,1); while (scalar(@outi) && defined($outi[0])) { @outi = $sth->SQLFetch(); greet @outi; } } sub ok { print "ok $TEST_COUNT\n"; $TEST_COUNT++; } sub not_ok { my ( $message ) = @_; print "not ok $TEST_COUNT # $message\n"; $TEST_COUNT++; } sub skip { my ( $message ) = @_; print "ok $TEST_COUNT # skipped: $message\n"; $TEST_COUNT++; }