[gcalctool/gcalctool-newui2] ...



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]