# # underwriter - a simple test of the Underwriter interface # use CORBA::ORBit idl => [ qw(Underwrite.idl) ]; my $poa; package UnderwriterTest; sub new { my $class = shift; my %self = {}; $self{'id'} = 0; $self{'next'} = 0; $self{'answer'} = 1; return bless \%self, $class; } sub id { my $self = shift; if (@_) { $self->{'id'} = shift; } return $self->{'id'}; } sub nextTest { my $self = shift; if (@_) { $self->{'next'} = shift; } return $self->{'next'}; } sub answer { my $self = shift; if (@_) { $self->{'answer'} = shift; } return $self->{'answer'}; } package UnderwriterTestSet; sub new { my $class = shift; my %self = {}; my %tests = {}; $self{'tests'} = \%tests; return bless \%self, $class; } sub GetTest { my ($self,$testid) = @_; my $tests = $self->{tests}; return $tests->{$testid}; } sub StoreTest { my ($self,$test) = @_; my $tests = $self->{tests}; $tests->{$test->{id}} = $test; } package Underwriter; @Underwriter::ISA = qw(POA_AudioTrade::Underwriter); sub new { my $class = shift; my %self = {}; my %tests; $self{tests} = \%tests; return bless \%self,$class; } sub NextTest { my $self = shift; my ($sequence, $currentcode, $condition) = @_; my $tests = $self->{tests}; $testset = $tests->{$sequence}; return 0 unless defined($testset); my $test = $testset->GetTest($currentcode); if ($test) { print $test." ".$test->{id}." ".$test->{answer}."\n"; $condition = ($test->answer()) ? $condition : !$condition; return ($condition) ? $test->nextTest() : 0; } 0; } sub Test { my ($self,$newseq, $newtestid, $newtestnext, $newtestanswer) = @_; my $tests = $self->{tests}; my $testset; if ($tests->{$newseq}) { $testset = $tests->{$newseq}; } else { $testset = new UnderwriterTestSet; $tests->{$newseq} = $testset; } my $newtest; my $newtest = new UnderwriterTest; $newtest->id($newtestid); $newtest->nextTest($newtestnext); $newtest->answer($newtestanswer); $testset->StoreTest($newtest); } sub Terminal { my $self = shift; my ($sequence, $currentcode, $condition) = @_; my $tests = $self->{tests}; $testset = $tests->{$sequence}; return 0 unless defined($testset); my $test = $testset->GetTest($currentcode); if ($test) { $condition = ($test->answer()) ? $condition : !$condition; return (($condition) && ($test->nextTest() == 0)); } 0; } 1;