From 21c5be3706f70d573f8d0195760846fce46f6807 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Tue, 6 Feb 2024 16:45:04 +0300 Subject: fixed the power (^*) operator: did not handle corner cases and was inefficient * in fact, with a negative exponent the previous naive implementation would even hang indefinitely! * Now uses the squaring algorithm. This is slightly longer but significantly more efficient. * added test cases --- tests/testsuite.at | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tests') diff --git a/tests/testsuite.at b/tests/testsuite.at index 80e111c..3a8bed8 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -27,6 +27,15 @@ AT_CHECK([$SCITECO -e "2%a,%a - 3\"N(0/0)'"], 0, ignore, ignore) AT_CHECK([$SCITECO -e "(1,) \"~|(0/0)'"], 0, ignore, ignore) AT_CLEANUP +AT_SETUP([Exponentiation]) +AT_CHECK([$SCITECO -e "-1^*0 - (-1)\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "-1^*-5 - (-1)\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "0^*-5="], 1, ignore, ignore) +AT_CHECK([$SCITECO -e "0^*0 - 1\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "1^*-5 - 1\"N(0/0)'"], 0, ignore, ignore) +AT_CHECK([$SCITECO -e "2^*-5 - 0\"N(0/0)'"], 0, ignore, ignore) +AT_CLEANUP + AT_SETUP([Missing left operand]) AT_CHECK([$SCITECO -e '+23='], 1, ignore, ignore) AT_CLEANUP -- cgit v1.2.3