1*d8f5b04cSrillig# $NetBSD: t_factor.sh,v 1.12 2024/04/28 07:27:41 rillig Exp $ 298380f8bSjmmv# 3454557d7Sjmmv# Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc. 498380f8bSjmmv# All rights reserved. 598380f8bSjmmv# 698380f8bSjmmv# Redistribution and use in source and binary forms, with or without 798380f8bSjmmv# modification, are permitted provided that the following conditions 898380f8bSjmmv# are met: 998380f8bSjmmv# 1. Redistributions of source code must retain the above copyright 1098380f8bSjmmv# notice, this list of conditions and the following disclaimer. 1198380f8bSjmmv# 2. Redistributions in binary form must reproduce the above copyright 1298380f8bSjmmv# notice, this list of conditions and the following disclaimer in the 1398380f8bSjmmv# documentation and/or other materials provided with the distribution. 1498380f8bSjmmv# 1598380f8bSjmmv# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 1698380f8bSjmmv# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 1798380f8bSjmmv# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1898380f8bSjmmv# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 1998380f8bSjmmv# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2098380f8bSjmmv# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2198380f8bSjmmv# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2298380f8bSjmmv# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2398380f8bSjmmv# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2498380f8bSjmmv# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2598380f8bSjmmv# POSSIBILITY OF SUCH DAMAGE. 2698380f8bSjmmv# 2798380f8bSjmmv 2898380f8bSjmmvexpect() { 29d32a26f0Schristos echo "${2}" >expout 30b1b83700Spgoyette ncrypt=$( ldd /usr/games/factor | grep -c -- -lcrypt ) 31d32a26f0Schristos if [ -n "$3" ] && [ $ncrypt -eq 0 ] ; then 32b1b83700Spgoyette atf_skip "crypto needed for huge non-prime factors - PR bin/23663" 33b1b83700Spgoyette fi 34*d8f5b04cSrillig atf_check -s exit:0 -o file:expout -e empty /usr/games/factor ${1} 3598380f8bSjmmv} 3698380f8bSjmmv 377f7ba5ceSpgoyetteatf_test_case overflow1 387f7ba5ceSpgoyetteoverflow1_head() { 3998380f8bSjmmv atf_set "descr" "Tests for overflow conditions" 400b494501Spgoyette atf_set "require.progs" "/usr/games/factor" 4198380f8bSjmmv} 427f7ba5ceSpgoyetteoverflow1_body() { 43d32a26f0Schristos expect '8675309' '8675309: 8675309' 447f7ba5ceSpgoyette} 457f7ba5ceSpgoyette 467f7ba5ceSpgoyetteatf_test_case overflow2 477f7ba5ceSpgoyetteoverflow2_head() { 487f7ba5ceSpgoyette atf_set "descr" "Tests for overflow conditions" 497f7ba5ceSpgoyette atf_set "require.progs" "/usr/games/factor" 507f7ba5ceSpgoyette} 517f7ba5ceSpgoyetteoverflow2_body() { 52d32a26f0Schristos expect '6172538568' '6172538568: 2 2 2 3 7 17 2161253' 5398380f8bSjmmv} 5498380f8bSjmmv 557f7ba5ceSpgoyetteatf_test_case loop1 567f7ba5ceSpgoyetteloop1_head() { 5798380f8bSjmmv atf_set "descr" "Tests some cases that once locked the program" \ 5898380f8bSjmmv "in an infinite loop" 590b494501Spgoyette atf_set "require.progs" "/usr/games/factor" 6098380f8bSjmmv} 617f7ba5ceSpgoyetteloop1_body() { 62d32a26f0Schristos expect '2147483647111311' '2147483647111311: 3 3 3 131 607148331103' 6398380f8bSjmmv} 6498380f8bSjmmv 657f7ba5ceSpgoyetteatf_test_case loop2 667f7ba5ceSpgoyetteloop2_head() { 677f7ba5ceSpgoyette atf_set "descr" "Tests some cases that once locked the program" \ 687f7ba5ceSpgoyette "in an infinite loop" 697f7ba5ceSpgoyette atf_set "require.progs" "/usr/games/factor" 707f7ba5ceSpgoyette} 717f7ba5ceSpgoyetteloop2_body() { 72d32a26f0Schristos expect '99999999999991' '99999999999991: 7 13 769231 1428571' Need_Crypto 73d4a34e5dSchristos} 74d4a34e5dSchristos 75d4a34e5dSchristos 76d4a34e5dSchristosatf_test_case h_overflow1 77d4a34e5dSchristosh_overflow1_head() { 78d4a34e5dSchristos atf_set "descr" "Tests for h_overflow conditions" 79d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 80d4a34e5dSchristos} 81d4a34e5dSchristosh_overflow1_body() { 82d32a26f0Schristos expect '-h 8675309' '8675309: 8675309' 83d4a34e5dSchristos} 84d4a34e5dSchristos 85d4a34e5dSchristosatf_test_case h_overflow2 86d4a34e5dSchristosh_overflow2_head() { 87d4a34e5dSchristos atf_set "descr" "Tests for h_overflow conditions" 88d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 89d4a34e5dSchristos} 90d4a34e5dSchristosh_overflow2_body() { 91d32a26f0Schristos expect '-h 6172538568' '6172538568: 2^3 3 7 17 2161253' 92d4a34e5dSchristos} 93d4a34e5dSchristos 94d4a34e5dSchristosatf_test_case h_loop1 95d4a34e5dSchristosh_loop1_head() { 96d4a34e5dSchristos atf_set "descr" "Tests some cases that once locked the program" \ 97d4a34e5dSchristos "in an infinite h_loop" 98d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 99d4a34e5dSchristos} 100d4a34e5dSchristosh_loop1_body() { 101d32a26f0Schristos expect '-h 2147483647111311' '2147483647111311: 3^3 131 607148331103' 102d4a34e5dSchristos} 103d4a34e5dSchristos 104d4a34e5dSchristosatf_test_case h_loop2 105d4a34e5dSchristosh_loop2_head() { 106d4a34e5dSchristos atf_set "descr" "Tests some cases that once locked the program" \ 107d4a34e5dSchristos "in an infinite h_loop" 108d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 109d4a34e5dSchristos} 110d4a34e5dSchristosh_loop2_body() { 111d32a26f0Schristos expect '-h 99999999999991' '99999999999991: 7 13 769231 1428571' Need_Crypto 112d4a34e5dSchristos} 113d4a34e5dSchristos 114d4a34e5dSchristos 115d4a34e5dSchristosatf_test_case hx_overflow1 116d4a34e5dSchristoshx_overflow1_head() { 117d4a34e5dSchristos atf_set "descr" "Tests for hx_overflow conditions" 118d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 119d4a34e5dSchristos} 120d4a34e5dSchristoshx_overflow1_body() { 121d32a26f0Schristos expect '-hx 8675309' '0x845FED: 0x845FED' 122d4a34e5dSchristos} 123d4a34e5dSchristos 124d4a34e5dSchristosatf_test_case hx_overflow2 125d4a34e5dSchristoshx_overflow2_head() { 126d4a34e5dSchristos atf_set "descr" "Tests for hx_overflow conditions" 127d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 128d4a34e5dSchristos} 129d4a34e5dSchristoshx_overflow2_body() { 130d32a26f0Schristos expect '-hx 6172538568' '0x16FE976C8: 0x2^3 0x3 0x7 0x11 0x20FA65' 131d4a34e5dSchristos} 132d4a34e5dSchristos 133d4a34e5dSchristosatf_test_case hx_loop1 134d4a34e5dSchristoshx_loop1_head() { 135d4a34e5dSchristos atf_set "descr" "Tests some cases that once locked the program" \ 136d4a34e5dSchristos "in an infinite hx_loop" 137d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 138d4a34e5dSchristos} 139d4a34e5dSchristoshx_loop1_body() { 140d32a26f0Schristos expect '-hx 2147483647111311' '0x7A11FFFF2708F: 0x3^3 0x83 0x8D5CDC505F' 141d4a34e5dSchristos} 142d4a34e5dSchristos 143d4a34e5dSchristosatf_test_case hx_loop2 144d4a34e5dSchristoshx_loop2_head() { 145d4a34e5dSchristos atf_set "descr" "Tests some cases that once locked the program" \ 146d4a34e5dSchristos "in an infinite hx_loop" 147d4a34e5dSchristos atf_set "require.progs" "/usr/games/factor" 148d4a34e5dSchristos} 149d4a34e5dSchristoshx_loop2_body() { 150d32a26f0Schristos expect '-hx 99999999999991' '0x5AF3107A3FF7: 0x7 0xd 0xBBCCF 0x15CC5B' Need_Crypto 1517f7ba5ceSpgoyette} 1527f7ba5ceSpgoyette 15398380f8bSjmmvatf_init_test_cases() 15498380f8bSjmmv{ 1557f7ba5ceSpgoyette atf_add_test_case overflow1 1567f7ba5ceSpgoyette atf_add_test_case overflow2 1577f7ba5ceSpgoyette atf_add_test_case loop1 1587f7ba5ceSpgoyette atf_add_test_case loop2 159d4a34e5dSchristos 160d4a34e5dSchristos atf_add_test_case h_overflow1 161d4a34e5dSchristos atf_add_test_case h_overflow2 162d4a34e5dSchristos atf_add_test_case h_loop1 163d4a34e5dSchristos atf_add_test_case h_loop2 164d4a34e5dSchristos 165d4a34e5dSchristos atf_add_test_case hx_overflow1 166d4a34e5dSchristos atf_add_test_case hx_overflow2 167d4a34e5dSchristos atf_add_test_case hx_loop1 168d4a34e5dSchristos atf_add_test_case hx_loop2 16998380f8bSjmmv} 170