summaryrefslogtreecommitdiffstats
path: root/test/recipes
diff options
context:
space:
mode:
authorRich Salz <rsalz@openssl.org>2016-11-28 12:26:05 -0500
committerRich Salz <rsalz@openssl.org>2016-11-28 12:26:05 -0500
commit8d1ebff41c75e4eebc7d5cc5a561a1bab6b50e70 (patch)
tree7b8ce132ea9c1cf999e72bd67cfe1b4a1a30fbcb /test/recipes
parentb3618f44a7b8504bfb0a64e8a33e6b8e56d4d516 (diff)
Make bntest be (mostly) file-based.
Test suite used from boring, written by David Benjamin. Test driver converted from C++ to C. Added a Perl program to check the testsuite file. Extensive review feedback incorporated (thanks folks). Reviewed-by: Emilia Käsper <emilia@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'test/recipes')
-rw-r--r--test/recipes/10-test_bn.t68
-rw-r--r--test/recipes/bc.pl113
2 files changed, 3 insertions, 178 deletions
diff --git a/test/recipes/10-test_bn.t b/test/recipes/10-test_bn.t
index 13f278e703..628512afd3 100644
--- a/test/recipes/10-test_bn.t
+++ b/test/recipes/10-test_bn.t
@@ -16,69 +16,7 @@ use OpenSSL::Test qw/:DEFAULT srctop_file/;
setup("test_bn");
-plan tests => 3;
+plan tests => 1;
-require_ok(srctop_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;
- }
- map { s/\R//; } @lines; # 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;
- }
- };
- }
-
-unlink $testresults;
-
-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;
-}
+ok(run(test(["bntest", srctop_file("test", "bntests.txt")])),
+ "running bntest bntests.txt");
diff --git a/test/recipes/bc.pl b/test/recipes/bc.pl
deleted file mode 100644
index dbb5842bda..0000000000
--- a/test/recipes/bc.pl
+++ /dev/null
@@ -1,113 +0,0 @@
-#! /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
-
-
-use strict;
-use warnings;
-
-use Math::BigInt;
-
-sub calc {
- @_ = __adder(@_);
- if (scalar @_ != 1) { return "NaN"; }
- return shift;
-}
-
-sub __canonhex {
- my ($sign, $hex) = (shift =~ /^([+\-]?)(.*)$/);
- $hex = "0x".$hex if $hex !~ /^0x/;
- return $sign.$hex;
-}
-
-sub __adder {
- @_ = __multiplier(@_);
- while (scalar @_ > 1 && $_[1] =~ /^[\+\-]$/) {
- my $operand1 = Math::BigInt->from_hex(__canonhex(shift));
- my $operator = shift;
- @_ = __multiplier(@_);
- my $operand2 = Math::BigInt->from_hex(__canonhex(shift));
- if ($operator eq "+") {
- $operand1->badd($operand2);
- } elsif ($operator eq "-") {
- $operand1->bsub($operand2);
- } else {
- die "SOMETHING WENT AWFULLY WRONG";
- }
- unshift @_, $operand1->as_hex();
- }
- return @_;
-}
-
-sub __multiplier {
- @_ = __power(@_);
- while (scalar @_ > 1 && $_[1] =~ /^[\*\/%]$/) {
- my $operand1 = Math::BigInt->from_hex(__canonhex(shift));
- my $operator = shift;
- @_ = __power(@_);
- my $operand2 = Math::BigInt->from_hex(__canonhex(shift));
- if ($operator eq "*") {
- $operand1->bmul($operand2);
- } elsif ($operator eq "/") {
- # Math::BigInt->bdiv() is documented to do floored division,
- # i.e. 1 / -4 = -1, while bc and OpenSSL BN_div do truncated
- # division, i.e. 1 / -4 = 0. We need to make the operation
- # work like OpenSSL's BN_div to be able to verify.
- my $neg = ($operand1->is_neg()
- ? !$operand2->is_neg() : $operand2->is_neg());
- $operand1->babs();
- $operand2->babs();
- $operand1->bdiv($operand2);
- if ($neg) { $operand1->bneg(); }
- } elsif ($operator eq "%") {
- # Here's a bit of a quirk...
- # With OpenSSL's BN, as well as bc, the result of -10 % 3 is -1
- # while Math::BigInt, the result is 2.
- # The latter is mathematically more correct, but...
- my $o1isneg = $operand1->is_neg();
- $operand1->babs();
- # Math::BigInt does something different with a negative modulus,
- # while OpenSSL's BN and bc treat it like a positive number...
- $operand2->babs();
- $operand1->bmod($operand2);
- if ($o1isneg) { $operand1->bneg(); }
- } else {
- die "SOMETHING WENT AWFULLY WRONG";
- }
- unshift @_, $operand1->as_hex();
- }
- return @_;
-}
-
-sub __power {
- @_ = __paren(@_);
- while (scalar @_ > 1 && $_[1] eq "^") {
- my $operand1 = Math::BigInt->from_hex(__canonhex(shift));
- shift;
- @_ = __paren(@_);
- my $operand2 = Math::BigInt->from_hex(__canonhex(shift));
- $operand1->bpow($operand2);
- unshift @_, $operand1->as_hex();
- }
- return @_;
-}
-
-# returns array ( $result, @remaining )
-sub __paren {
- if (scalar @_ > 0 && $_[0] eq "(") {
- shift;
- my @result = __adder(@_);
- if (scalar @_ == 0 || $_[0] ne ")") {
- return ("NaN");
- }
- shift;
- return @result;
- }
- return @_;
-}
-
-1;