--- bigint_int.d Mon Mar 14 17:20:37 2005 +++ fixes/bigint_int.d Mon Mar 21 13:07:55 2005 @@ -179,6 +179,12 @@ assert(a.toString() == "123456"); a = new Int("0x123456"); assert(a.toHexString() == "123456"); + + a = new Int("0"); + assert (a.toString == "0"); + assert (ZERO.toString == "0"); + assert (a == ZERO); + assert (a == new Int(0)); } invariant @@ -223,7 +229,7 @@ { d.length = 2; d[0] = n; - d[1] = n < 0 ? -1 : 0; + d[1] = n < 0 ? -1U : 0; } static Int opCall(int n) { return new Int(n); } @@ -242,7 +248,7 @@ { d.length = 3; *(cast(ulong*)d) = n; - d[2] = n < 0 ? -1 : 0; + d[2] = n < 0 ? -1U : 0; minimize(this); } @@ -326,9 +332,8 @@ uint len = bigintLLMinimize(d, d.length); if (len == 0) { - uint[2] t; - t[0] = t[1] = isNegative ? -1 : 0; - d = t; + d.length = 2; + d[] = isNegative ? -1U : 0; } else { @@ -348,7 +353,7 @@ { d.length = x.length + 1; d[0..x.length] = x[0..x.length]; - d[x.length] = isNegative ? -1 : 0; + d[x.length] = isNegative ? -1U : 0; minimize(this); } @@ -594,7 +599,7 @@ r.d[0] = t; uint carry = t > 0xFFFFFFFF; - carry = bigintLLIncV(&r.d[1], &x.d[1], (y<0?-1:0), carry, x.d.length-1); + carry = bigintLLIncV(&r.d[1], &x.d[1], cast(uint) (y<0?-1:0), carry, x.d.length-1); r.d[x.d.length] = x.d[x.d.length-1] + (y<0?-1:0) + carry; return minimize(r); } @@ -651,7 +656,7 @@ r.d[0] = t; uint carry = t > 0xFFFFFFFF; - carry = bigintLLDecV(&r.d[1], &x.d[1], (y<0?-1:0), carry, x.d.length-1); + carry = bigintLLDecV(&r.d[1], &x.d[1], cast(uint) (y<0?-1:0), carry, x.d.length-1); r.d[x.d.length] = x.d[x.d.length-1] - (y<0?-1:0) - carry; return minimize(r); } @@ -1521,7 +1526,7 @@ Int r = new Int; r.d.length = y + 2; r.d[y] = x; - r.d[y+1] = x<0 ? -1 : 0; + r.d[y+1] = x<0 ? -1U : 0; return r; }