File size: 5,142 Bytes
78d2150 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#!/usr/bin/perl
# Basic tests for "factor".
# Copyright (C) 1998-2025 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
use strict;
(my $program_name = $0) =~ s|.*/||;
my $prog = 'factor';
# Turn off localization of executable's output.
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
my @Tests =
(
['1', '9', {OUT => '3 3'}],
['1a', '7', {OUT => '7'}],
['1b', ' +7', {OUT => '7'}],
['2', '4294967291', {OUT => '4294967291'}],
['3', '4294967292', {OUT => '2 2 3 3 7 11 31 151 331'}],
['4', '4294967293', {OUT => '9241 464773'}],
['a', '4294966201', {OUT => '12197 352133'}],
['b', '4294966339', {OUT => '13187 325697'}],
['c', '4294966631', {OUT => '13729 312839'}],
['d', '4294966457', {OUT => '14891 288427'}],
['e', '4294966759', {OUT => '21649 198391'}],
['f', '4294966573', {OUT => '23071 186163'}],
['g', '4294967101', {OUT => '23603 181967'}],
['h', '4294966519', {OUT => '34583 124193'}],
['i', '4294966561', {OUT => '36067 119083'}],
['j', '4294966901', {OUT => '37747 113783'}],
['k', '4294966691', {OUT => '39241 109451'}],
['l', '4294966969', {OUT => '44201 97169'}],
['m', '4294967099', {OUT => '44483 96553'}],
['n', '4294966271', {OUT => '44617 96263'}],
['o', '4294966789', {OUT => '50411 85199'}],
['p', '4294966189', {OUT => '53197 80737'}],
['q', '4294967213', {OUT => '57139 75167'}],
['s', '4294967071', {OUT => '65521 65551'}],
['t', '4294966194', {OUT => '2 3 3 3 3 3 3 3 53 97 191'}],
['u', '4294966272', {OUT => '2 2 2 2 2 2 2 2 2 2 3 23 89 683'}],
['v', '4294966400', {OUT => '2 2 2 2 2 2 2 5 5 1342177'}],
['w', '4294966464', {OUT => '2 2 2 2 2 2 3 3 3 2485513'}],
['x', '4294966896', {OUT => '2 2 2 2 3 3 3 11 607 1489'}],
['y', '4294966998', {OUT => '2 3 7 3917 26107'}],
['z', '-1',
# Map newer glibc diagnostic to expected.
# Also map OpenBSD 5.1's "unknown option" to expected "invalid option".
{ERR_SUBST => q!s/'1'/1/;s/unknown/invalid/!},
{ERR => "$prog: invalid option -- 1\n"
. "Try '$prog --help' for more information.\n"},
{EXIT => 1}],
['cont', 'a 4',
{OUT => "4: 2 2\n"},
{ERR => "$prog: 'a' is not a valid positive integer\n"},
{EXIT => 1}],
['bug-2012-a', '465658903', {OUT => '15259 30517'}],
['bug-2012-b', '2242724851', {OUT => '33487 66973'}],
['bug-2012-c', '6635692801', {OUT => '57601 115201'}],
['bug-2012-d', '17709149503', {OUT => '94099 188197'}],
['bug-2012-e', '17754345703', {OUT => '94219 188437'}],
# Infinite loop bugs in v8.20 to 8.26 inclusive
['bug-2016-a', '158909489063877810457',
{OUT => '3401347 3861211 12099721'}],
['bug-2016-b', '222087527029934481871',
{OUT => '15601 26449 111427 4830277'}],
['bug-2016-c', '12847291069740315094892340035',
{OUT => '5 4073 18899 522591721 63874247821'}],
['bug-gmp-2_sup_128', '340282366920938463463374607431768211456',
{OUT => '2 'x127 . '2'}],
['bug-gmp-2_sup_256',
'115792089237316195423570985008687907853'
. '269984665640564039457584007913129639936',
{OUT => '2 'x255 . '2'}],
['bug-gmp-plus_2_sup_127_plus_1',
'+170141183460469231731687303715884105729',
{OUT => '3 56713727820156410577229101238628035243'}],
['bug-with-128-bit-uintmax_t',
'340282366920938463463374607431768211355',
{OUT => '5 31 2195370109167344925570158757624311041'}],
['lt-5000-times-128-bit',
'1701071552237771378853409662551409288273703',
{OUT => '4999 340282366920938463463374607431768211297'}],
['h-1', '-h 3000', {OUT => '2^3 3 5^3'}],
['h-2', '3000 --exponents', {OUT => '2^3 3 5^3'}],
);
# Prepend the command line argument and append a newline to end
# of each expected 'OUT' string.
my $t;
Test:
foreach $t (@Tests)
{
(my $arg1 = $t->[1]) =~ s| *\+?||; # strip '+'
($arg1 = $arg1) =~ s| *-[^ ]+ *||; # strip option
# Don't fiddle with expected OUT string if there's a nonzero exit status.
foreach my $e (@$t)
{
ref $e eq 'HASH' && exists $e->{EXIT} && $e->{EXIT}
and next Test;
}
foreach my $e (@$t)
{
ref $e eq 'HASH' && exists $e->{OUT}
and $e->{OUT} = "$arg1: $e->{OUT}\n"
}
}
my $save_temps = $ENV{SAVE_TEMPS};
my $verbose = $ENV{VERBOSE};
my $fail = run_tests ($program_name, $prog, \@Tests, $save_temps, $verbose);
exit $fail;
|