#! /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; use OpenSSL::Test qw/:DEFAULT srctop_file/; setup("test_bn"); plan tests => 3; 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 = ; 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; } }; } 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; }