diff options
author | Rolf Eike Beer <eike@sf-mail.de> | 2021-06-17 16:39:07 +0200 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2021-08-17 02:41:17 +0100 |
commit | 6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7 (patch) | |
tree | b40a4c097c07eb855061e74df59c9bae911ac407 /eclass/tests | |
parent | qmail.eclass: remove magic to query root group (diff) | |
download | gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.tar.gz gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.tar.bz2 gentoo-6d0a5587e8f7d51544824fb7eb806ba5c4dcb4e7.zip |
qmail.eclass: simplify is_prime()
The previous algorithm would scan for all primes for a given number, which
takes needlessly long.
Signed-off-by: Rolf Eike Beer <eike@sf-mail.de>
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'eclass/tests')
-rwxr-xr-x | eclass/tests/qmail.sh | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/eclass/tests/qmail.sh b/eclass/tests/qmail.sh new file mode 100755 index 000000000000..3520ed2a9d5b --- /dev/null +++ b/eclass/tests/qmail.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Copyright 2020-2021 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 +source tests-common.sh + +inherit qmail + +# some numbers are blocked because they are to small even if prime +test_low_numbers() { + tbegin "low numbers" + + for i in $(seq 0 6); do + if is_prime ${i}; then + return tend 1 "${i} badly accepted" + fi + done + + tend 0 +} + +# test a given number for being prime +check_prime_number() { + # use factor from coreutils to count the factors + if [[ $(factor $1 | cut -d: -f2 | wc -w) == 1 ]]; then + return $(is_prime $1) + else + return $(is_prime $1 && false || true) + fi +} + +test_primes() { + tbegin "factorizations from ${1} to ${2}" + + for i in $(seq ${1:?} ${2:?}); do + if ! check_prime_number $i; then + tend 1 "${i} returned bad factorization" + return 1 + fi + done + + tend 0 +} + +test_low_numbers +test_primes 7 99 +for i in $(seq 100 100 1000); do + test_primes $i $((i + 99)) +done + +texit |