mirror of
https://github.com/openssl/openssl.git
synced 2024-12-26 02:13:45 +08:00
f3356b7f49
The math recipes are among the heavier, but also quite important. For the BN test, we have previously relied on bc to verify the numbers. Unfortunately, bc doesn't exist everywhere, making tests on some platforms rather painful. With the new recipe (recipes/10-test_bn.t), we rely on perl's Math::BigInt and a homegrown simple calculator (recipes/bc.pl) that can do enough to cover for bc. Reviewed-by: Rich Salz <rsalz@openssl.org>
77 lines
1.3 KiB
Perl
77 lines
1.3 KiB
Perl
#! /usr/bin/perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Math::BigInt;
|
|
|
|
use Test::More;
|
|
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;
|
|
}
|