diff src/decimal/test.d @ 4:b37c218c1442

Initial development of BCD integers
author Paul (paul.d.anderson@comcast.net)
date Thu, 18 Mar 2010 18:10:25 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/decimal/test.d	Thu Mar 18 18:10:25 2010 -0700
@@ -0,0 +1,135 @@
+/** 
+ * A D programming language implementation of the 
+ * General Decimal Arithmetic Specification, 
+ * Version 1.70, (25 March 2009).
+ *
+ * by Paul D. Anderson
+ *
+ * Boost Software License - Version 1.0 - August 17th, 2003
+ *
+ * Permission is hereby granted, free of charge, to any person or organization
+ * obtaining a copy of the software and accompanying documentation covered by
+ * this license (the "Software") to use, reproduce, display, distribute,
+ * execute, and transmit the Software, and to prepare derivative works of the
+ * Software, and to permit third-parties to whom the Software is furnished to
+ * do so, all subject to the following:
+ *
+ * The copyright notices in the Software and this entire statement, including
+ * the above license grant, this restriction and the following disclaimer,
+ * must be included in all copies of the Software, in whole or in part, and
+ * all derivative works of the Software, unless such copies or derivative
+ * works are solely in the form of machine-executable object code generated by
+ * a source language processor.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+**/
+module decimal.test;
+
+import decimal.decimal;
+import decimal.math;
+
+public void main2() {
+		Decimal ONE = Decimal(1);
+		writeln("1 = ", ONE);
+		Decimal TWO = Decimal(2);
+		writeln("2 = ", TWO);
+		Decimal HALF = Decimal(0.5);
+		writeln("0.5 = ", HALF);
+        Decimal x = sqrt(TWO);
+		writeln("x = ", x);
+		Decimal y = sqrt(x);
+		writeln("y = ", y);
+		Decimal p = TWO + x;
+		writeln("p = ", p);
+		x = y;
+		int i = 0;
+		while (true) {
+			writeln("i = ", i);
+			x = x + ONE/x;
+			writeln("step 0");
+//			x = HALF (x + ONE/x);
+			x *= HALF;
+			writeln("step 1");
+			Decimal np = p * ((x + ONE)/(y + ONE));
+			writeln("step 2");
+			writeln("np = ", np);
+			if (p == np) return p;
+			writeln("step 3");
+			p = np;
+			writeln("step 4");
+			x = sqrt(x);
+			writeln("step 5");
+//			writeln("x = ", x);
+			Decimal oox = ONE/x;
+//			writeln("ONE/x = ", oox);
+//			writeln ("x + ONE/x = ", x + oox);
+//			Decimal t1 = oox + x;
+//			writeln("t1 = ", t1);
+//			Decimal t1 = x + oox; // ONE + oox; //x + x; // + ONE/x;
+			writeln("step 6");
+//			Decimal t2 = (y  * x) + ONE; ///x; //ONE / (y + ONE);
+//			y = ONE/x + y * x;
+			writeln("step 7");
+			y = (ONE/x + y * x) / (y + ONE); //t1 / t2;
+			writeln("step 8");
+			i++;
+//			break;
+			writeln("i = ", i);
+			
+		}
+        return p;
+}
+
+public void main() {
+	writeln("Hello, world!");
+/+	writeln("eTiny = ", context.eTiny);
+	writeln("tiny min = ", Decimal(1, context.eTiny));
+	writeln("tiny min = ", Decimal(1, context.eTiny - 1));
+	writeln("max = ", context.max());
+	writeln("max1 = ", Decimal(999999999, 99));
+	writeln("dig = ", context.dig());
+	writeln("eps = ", context.epsilon());
+	writeln("smallest = ", context.min_normal()*context.epsilon());
+	writeln("1/epsilon = ", Decimal(1)/context.epsilon());
+	writeln("max * min = ", context.max * context.min_normal);
+	writeln("mant_dig = ", context.mant_dig);
+	writeln("min_exp = ", context.min_exp);
+	writeln("max_exp = ", context.max_exp);+/
+	
+	
+    // TODO: this next one goes crazy -- shows need for checks on construction
+	// TODO: turns out this is being converted to a double (or real) and
+	// then it's really weird.
+//	writeln("bigger = ", Decimal(999999999999));
+//	float f = float.max;
+	// TODO: convert these to assserts
+/+	writeln("f.max = ", f);
+	writeln("f.min = ", float.min);
+	writeln("f = ", 2 * float.min);
+	writeln("d.max = ", Decimal.max());
+	writeln("d.min = ", Decimal.min_normal());
+	writeln("2 * d.min = ", 2 * Decimal.min_normal());
+	writeln("0.1 * d.min = ", 0.1 * Decimal.min_normal());+/
+	// TODO: move this to unittesting
+/+	Decimal dec = Decimal(PI);
+	writeln("pi = ", dec );
+	dec = Decimal(PI, 19);
+	writeln("pi = ", dec );
+	dec = Decimal(1.3, 25);
+	writeln("pi = ", dec );
+	dec = Decimal(0.1, 25);
+	writeln("pi = ", dec );
+	dec = Decimal(2.0, 25);
+	writeln("pi = ", dec );
+	dec = Decimal(200.5, 25);
+	writeln("pi = ", dec );
+	writeln(double.dig);
+	writeln(real.dig);+/
+}
+