[gcalctool/gcalctool-newui2] ...
- From: Robert Ancell <rancell src gnome org>
- To: svn-commits-list gnome org
- Subject: [gcalctool/gcalctool-newui2] ...
- Date: Wed, 15 Jul 2009 01:30:57 +0000 (UTC)
commit 1fab6ae948d4fd1e89885337795bd270efeeb5b5
Author: Robert Ancell <robert ancell gmail com>
Date: Wed Jul 15 11:30:37 2009 +1000
...
src/unittest.c | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 121 insertions(+), 14 deletions(-)
---
diff --git a/src/unittest.c b/src/unittest.c
index ae17d17..bbf3bc5 100644
--- a/src/unittest.c
+++ b/src/unittest.c
@@ -93,23 +93,47 @@ test(char *expression, char *expected, int expected_error)
void
test_parser()
{
- v->base = 10;
v->ttype = MP_DEGREES;
v->wordlen = 32;
v->accuracy = 9;
- test("0", "0", 0);
- test("1", "1", 0);
+ v->base = 2;
+ test("2", "10â??", 0);
+
+ v->base = 8;
+ test("16434824", "76543210â??", 0);
+
+ v->base = 16;
+ test("18364758544493064720", "FEDCBA9876543210â??â??", 0);
+
+ v->base = 10;
+ test("0â??", "0", 0); test("0â??", "0", 0); test("0", "0", 0); test("0â??â??", "0", 0);
+ test("1â??", "1", 0); test("1â??", "1", 0); test("1", "1", 0); test("1â??â??", "1", 0);
+ test("2â??", "", -1); test("2â??", "2", 0); test("2", "2", 0); test("2â??â??", "2", 0);
+ test("3â??", "", -1); test("3â??", "3", 0); test("3", "3", 0); test("3â??â??", "3", 0);
+ test("4â??", "", -1); test("4â??", "4", 0); test("4", "4", 0); test("4â??â??", "4", 0);
+ test("5â??", "", -1); test("5â??", "5", 0); test("5", "5", 0); test("5â??â??", "5", 0);
+ test("6â??", "", -1); test("6â??", "6", 0); test("6", "6", 0); test("6â??â??", "6", 0);
+ test("7â??", "", -1); test("7â??", "7", 0); test("7", "7", 0); test("7â??â??", "7", 0);
+ test("8â??", "", -1); test("8â??", "", -1); test("8", "8", 0); test("8â??â??", "8", 0);
+ test("9â??", "", -1); test("9â??", "", -1); test("9", "9", 0); test("9â??â??", "9", 0);
+ test("Aâ??", "", -1); test("Aâ??", "", -1); test("A", "", -1); test("Aâ??â??", "10", 0);
+ test("Bâ??", "", -1); test("Bâ??", "", -1); test("B", "", -1); test("Bâ??â??", "11", 0);
+ test("Câ??", "", -1); test("Câ??", "", -1); test("C", "", -1); test("Câ??â??", "12", 0);
+ test("Dâ??", "", -1); test("Dâ??", "", -1); test("D", "", -1); test("Dâ??â??", "13", 0);
+ test("Eâ??", "", -1); test("Eâ??", "", -1); test("E", "", -1); test("Eâ??â??", "14", 0);
+ test("Fâ??", "", -1); test("Fâ??", "", -1); test("F", "", -1); test("Fâ??â??", "15", 0);
+
test("+1", "1", 0);
test("â??1", "â??1", 0);
test("+ 1", "1", 0); // FIXME: Should this be allowed?
test("â?? 1", "â??1", 0); // FIXME: Should this be allowed?
- test("++1", "1", -22);
+ test("++1", "1", -1);
test("â??â??1", "1", 0);
test("255", "255", 0);
test("256", "256", 0);
test("½", "0.5", 0);
- test("1½", "1.5", 0);
+ test("1½", "1.5", 0);
test("1.00", "1", 0);
test("1.01", "1.01", 0);
//test("2A", "2000000000000000", 0);
@@ -142,13 +166,13 @@ test_parser()
//test("2f3", "0.0000000000000023", 0); // FIXME: Need to print out significant figures, not decimal places
test("Ï?", "3.141592654", 0);
test("e", "2.718281828", 0);
-
+
test("2Ï?", "6.283185307", 0);
test("2e", "5.436563657", 0);
//test("2Ï?²", "19.739208802", 0);
//test("2e²", "14.778112198", 0);
- test("e2", "", 1);
- test("Ï?2", "", 1);
+ test("e2", "", -1);
+ test("Ï?2", "", -1);
test("Ï?e", "8.539734223", 0);
test("eÏ?", "8.539734223", 0);
//test("2Ï?e", "17.079468445", 0);
@@ -211,6 +235,7 @@ test_parser()
test("69!", "171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000", 0);
test("0.1!", "", -20001);
test("â??1!", "", -20001);
+ test("0â??1!", "â??1", 0);
test("(â??1)!", "", -20001);
test("â??(1!)", "â??1", 0);
@@ -254,10 +279,10 @@ test_parser()
test("8 mod 7", "1", 0);
test("â??1 mod 7", "6", 0);
- test("Int(3.2)", "3", 0);
- test("Frac(3.2)", "0.2", 0);
- test("Int(â??3.2)", "â??3", 0);
- test("Frac(â??3.2)", "â??0.2", 0);
+ test("int 3.2", "3", 0);
+ test("frac 3.2", "0.2", 0);
+ test("int â??3.2", "â??3", 0);
+ test("frac â??3.2", "â??0.2", 0);
test("|1|", "1", 0);
test("|â??1|", "1", 0);
@@ -272,6 +297,8 @@ test_parser()
test("log 1", "0", 0);
test("log 2", "0.301029996", 0);
test("log 10", "1", 0);
+ test("logâ??â?? 10", "1", 0);
+ test("logâ?? 2", "1", 0);
test("2 log 2", "0.602059991", 0);
test("ln â??1", "", -20001);
@@ -321,9 +348,9 @@ test_parser()
test("sinh 10 â?? (e^10 â?? e^â??10)÷2", "0", 0);
test("sinh â??10 + sinh 10", "0", 0);
- test("(cosh â??5)² â?? (sinh â??5)²", "1", 0);
+ test("cosh² â??5 â?? sinh² â??5", "1", 0);
test("tanh 0", "0", 0);
- test("tanh 10 â?? sinh(10)÷cosh(10)", "0", 0);
+ test("tanh 10 â?? sinh 10 ÷ cosh 10", "0", 0);
test("atanh 0", "0", 0);
test("atanh (1÷10) â?? 0.5 ln(11÷9)", "0", 0);
@@ -342,13 +369,93 @@ test_parser()
test("3 xor 5", "6", 0);
v->base = 16;
+ test("ones 1", "FFFFFFFEâ??â??", 0);
+ test("ones 7FFFFFFFâ??â??", "80000000â??â??", 0);
+ test("twos 1", "FFFFFFFFâ??â??", 0);
+ test("twos 7FFFFFFFâ??â??", "80000001â??â??", 0);
test("~7Aâ??â??", "FFFFFF85â??â??", 0);
}
+static void
+print_number(MPNumber *x)
+{
+ int i, j;
+
+ printf("sign=%d exponent=%d fraction=%d", x->sign, x->exponent, x->fraction[0]);
+ for (i = 1; i < MP_SIZE; i++) {
+ for (j = i; j < MP_SIZE && x->fraction[j] == 0; j++);
+ if (j == MP_SIZE) {
+ printf(",...");
+ break;
+ }
+ printf(",%d", x->fraction[i]);
+ }
+}
+
+static void
+test_string(const char *number)
+{
+ MPNumber t;
+
+ mp_set_from_string(number, &t);
+
+ printf("MPNumber(%s) -> {", number);
+ print_number(&t);
+ printf("}\n");
+}
+
+static void
+test_integer(int number)
+{
+ MPNumber t;
+
+ mp_set_from_integer(number, &t);
+
+ printf("MPNumber(%d) -> {", number);
+ print_number(&t);
+ printf("}\n");
+}
+
+#include "mp-internal.h"
+static void
+test_numbers()
+{
+ printf("base=%d\n", MP_BASE);
+ test_integer(0);
+ test_integer(1);
+ test_integer(-1);
+ test_integer(2);
+ test_integer(9999);
+ test_integer(10000);
+ test_integer(10001);
+ test_integer(2147483647);
+
+ test_string("0");
+ test_string("1");
+ test_string("-1");
+ test_string("16383");
+ test_string("16384");
+ test_string("16385");
+ test_string("268435456");
+
+ test_string("0.1");
+ test_string("0.5");
+ test_string("0.25");
+ test_string("0.125");
+ test_string("0.0625");
+ test_string("0.00006103515625");
+ test_string("0.000030517578125");
+
+ test_string("1.00006103515625");
+ test_string("16384.00006103515625");
+}
+
+
void
unittest()
{
test_parser();
+ test_numbers();
exit(fails > 0 ? 1 : 0);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]