2016-04-22 19:21:51 +08:00
|
|
|
#! /usr/bin/env perl
|
|
|
|
# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Licensed under the OpenSSL license (the "License"). You may not use
|
|
|
|
# this file except in compliance with the License. You can obtain a copy
|
|
|
|
# in the file LICENSE in the source distribution or at
|
|
|
|
# https://www.openssl.org/source/license.html
|
|
|
|
|
2015-04-18 01:57:55 +08:00
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
use Math::BigInt;
|
|
|
|
|
2016-01-30 08:05:33 +08:00
|
|
|
use OpenSSL::Test qw/:DEFAULT srctop_file/;
|
2015-04-18 01:57:55 +08:00
|
|
|
|
|
|
|
setup("test_bn");
|
|
|
|
|
|
|
|
plan tests => 3;
|
|
|
|
|
2016-01-30 08:05:33 +08:00
|
|
|
require_ok(srctop_file("test","recipes","bc.pl"));
|
2015-04-18 01:57:55 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2015-10-13 04:24:27 +08:00
|
|
|
map { s/\R//; } @lines; # chomp(@lines);
|
2015-04-18 01:57:55 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
};
|
2016-06-04 06:50:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
unlink $testresults;
|
2015-04-18 01:57:55 +08:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|