xref: /netbsd-src/tests/games/t_factor.sh (revision d8f5b04c091e033c7c2978066c7b27dbd1aa9d53)
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