openssl/test/recipes/10-test_bn.t
Richard Levitte fd99c6b599 Change OpenSSL::Test to be an extension of Test::More
It became tedious as well as error prone to have all recipes use
Test::More as well as OpenSSL::Test.  The easier way is to make
OpenSSL::Test an extension of Test::More, thereby having all version
checks as well as future checks firmly there.  Additionally, that
allows us to extend existing Test::More functions if the need would
arise.

Reviewed-by: Rich Salz <rsalz@openssl.org>
2015-09-07 16:10:58 +02:00

75 lines
1.3 KiB
Perl

#! /usr/bin/perl
use strict;
use warnings;
use Math::BigInt;
use OpenSSL::Test qw/:DEFAULT top_file/;
setup("test_bn");
plan tests => 3;
require_ok(top_file("test","recipes","bc.pl"));
my $testresults = "tmp.bntest";
my $init = ok(run(test(["bntest"], stdout => $testresults)), 'initialize');
SKIP: {
skip "Initializing failed, skipping", 1 if !$init;
subtest 'Checking the bn results' => sub {
my @lines = ();
if (open DATA, $testresults) {
@lines = <DATA>;
close DATA;
}
chomp(@lines);
plan tests => scalar grep(/^print /, @lines);
my $l = "";
while (scalar @lines) {
$l = shift @lines;
last if $l =~ /^print /;
}
while (1) {
$l =~ s/^print "//;
$l =~ s/\\n"//;
my $t = $l;
my @operations = ();
$l = undef;
while (scalar @lines) {
$l = shift @lines;
last if $l =~ /^print /;
push @operations, $l;
$l = undef;
}
ok(check_operations(@operations), "verify $t");
last unless $l;
}
};
}
sub check_operations {
my $failcount = 0;
foreach my $line (@_) {
my $result = calc(split /\s+/, $line);
if ($result ne "0" && $result ne "0x0") {
$failcount++;
print STDERR "Failed! $line => $result\n";
}
}
return $failcount == 0;
}