diff options
Diffstat (limited to 'src/pkg/bignum/bignum_test.go')
-rw-r--r-- | src/pkg/bignum/bignum_test.go | 616 |
1 files changed, 308 insertions, 308 deletions
diff --git a/src/pkg/bignum/bignum_test.go b/src/pkg/bignum/bignum_test.go index 73edc9345..532fc9740 100644 --- a/src/pkg/bignum/bignum_test.go +++ b/src/pkg/bignum/bignum_test.go @@ -5,62 +5,62 @@ package bignum import ( - "fmt"; - "testing"; + "fmt" + "testing" ) const ( - sa = "991"; - sb = "2432902008176640000"; // 20! - sc = "933262154439441526816992388562667004907159682643816214685929" + + sa = "991" + sb = "2432902008176640000" // 20! + sc = "933262154439441526816992388562667004907159682643816214685929" + "638952175999932299156089414639761565182862536979208272237582" + - "51185210916864000000000000000000000000"; // 100! - sp = "170141183460469231731687303715884105727"; // prime + "51185210916864000000000000000000000000" // 100! + sp = "170141183460469231731687303715884105727" // prime ) func natFromString(s string, base uint, slen *int) Natural { - x, _, len := NatFromString(s, base); + x, _, len := NatFromString(s, base) if slen != nil { *slen = len } - return x; + return x } func intFromString(s string, base uint, slen *int) *Integer { - x, _, len := IntFromString(s, base); + x, _, len := IntFromString(s, base) if slen != nil { *slen = len } - return x; + return x } func ratFromString(s string, base uint, slen *int) *Rational { - x, _, len := RatFromString(s, base); + x, _, len := RatFromString(s, base) if slen != nil { *slen = len } - return x; + return x } var ( - nat_zero = Nat(0); - nat_one = Nat(1); - nat_two = Nat(2); - a = natFromString(sa, 10, nil); - b = natFromString(sb, 10, nil); - c = natFromString(sc, 10, nil); - p = natFromString(sp, 10, nil); - int_zero = Int(0); - int_one = Int(1); - int_two = Int(2); - ip = intFromString(sp, 10, nil); - rat_zero = Rat(0, 1); - rat_half = Rat(1, 2); - rat_one = Rat(1, 1); - rat_two = Rat(2, 1); + nat_zero = Nat(0) + nat_one = Nat(1) + nat_two = Nat(2) + a = natFromString(sa, 10, nil) + b = natFromString(sb, 10, nil) + c = natFromString(sc, 10, nil) + p = natFromString(sp, 10, nil) + int_zero = Int(0) + int_one = Int(1) + int_two = Int(2) + ip = intFromString(sp, 10, nil) + rat_zero = Rat(0, 1) + rat_half = Rat(1, 2) + rat_one = Rat(1, 1) + rat_two = Rat(2, 1) ) @@ -96,11 +96,11 @@ func rat_eq(n uint, x, y *Rational) { func TestNatConv(t *testing.T) { - tester = t; - test_msg = "NatConvA"; + tester = t + test_msg = "NatConvA" type entry1 struct { - x uint64; - s string; + x uint64 + s string } tab := []entry1{ entry1{0, "0"}, @@ -108,51 +108,51 @@ func TestNatConv(t *testing.T) { entry1{65535, "65535"}, entry1{4294967295, "4294967295"}, entry1{18446744073709551615, "18446744073709551615"}, - }; + } for i, e := range tab { - test(100+uint(i), Nat(e.x).String() == e.s); - test(200+uint(i), natFromString(e.s, 0, nil).Value() == e.x); + test(100+uint(i), Nat(e.x).String() == e.s) + test(200+uint(i), natFromString(e.s, 0, nil).Value() == e.x) } - test_msg = "NatConvB"; + test_msg = "NatConvB" for i := uint(0); i < 100; i++ { test(i, Nat(uint64(i)).String() == fmt.Sprintf("%d", i)) } - test_msg = "NatConvC"; - z := uint64(7); + test_msg = "NatConvC" + z := uint64(7) for i := uint(0); i <= 64; i++ { - test(i, Nat(z).Value() == z); - z <<= 1; - } - - test_msg = "NatConvD"; - nat_eq(0, a, Nat(991)); - nat_eq(1, b, Fact(20)); - nat_eq(2, c, Fact(100)); - test(3, a.String() == sa); - test(4, b.String() == sb); - test(5, c.String() == sc); - - test_msg = "NatConvE"; - var slen int; - nat_eq(10, natFromString("0", 0, nil), nat_zero); - nat_eq(11, natFromString("123", 0, nil), Nat(123)); - nat_eq(12, natFromString("077", 0, nil), Nat(7*8+7)); - nat_eq(13, natFromString("0x1f", 0, nil), Nat(1*16+15)); - nat_eq(14, natFromString("0x1fg", 0, &slen), Nat(1*16+15)); - test(4, slen == 4); - - test_msg = "NatConvF"; - tmp := c.Mul(c); + test(i, Nat(z).Value() == z) + z <<= 1 + } + + test_msg = "NatConvD" + nat_eq(0, a, Nat(991)) + nat_eq(1, b, Fact(20)) + nat_eq(2, c, Fact(100)) + test(3, a.String() == sa) + test(4, b.String() == sb) + test(5, c.String() == sc) + + test_msg = "NatConvE" + var slen int + nat_eq(10, natFromString("0", 0, nil), nat_zero) + nat_eq(11, natFromString("123", 0, nil), Nat(123)) + nat_eq(12, natFromString("077", 0, nil), Nat(7*8+7)) + nat_eq(13, natFromString("0x1f", 0, nil), Nat(1*16+15)) + nat_eq(14, natFromString("0x1fg", 0, &slen), Nat(1*16+15)) + test(4, slen == 4) + + test_msg = "NatConvF" + tmp := c.Mul(c) for base := uint(2); base <= 16; base++ { nat_eq(base, natFromString(tmp.ToString(base), base, nil), tmp) } - test_msg = "NatConvG"; - x := Nat(100); - y, _, _ := NatFromString(fmt.Sprintf("%b", &x), 2); - nat_eq(100, y, x); + test_msg = "NatConvG" + x := Nat(100) + y, _, _ := NatFromString(fmt.Sprintf("%b", &x), 2) + nat_eq(100, y, x) } @@ -160,16 +160,16 @@ func abs(x int64) uint64 { if x < 0 { x = -x } - return uint64(x); + return uint64(x) } func TestIntConv(t *testing.T) { - tester = t; - test_msg = "IntConvA"; + tester = t + test_msg = "IntConvA" type entry2 struct { - x int64; - s string; + x int64 + s string } tab := []entry2{ entry2{0, "0"}, @@ -181,92 +181,92 @@ func TestIntConv(t *testing.T) { entry2{2147483647, "2147483647"}, entry2{-9223372036854775808, "-9223372036854775808"}, entry2{9223372036854775807, "9223372036854775807"}, - }; + } for i, e := range tab { - test(100+uint(i), Int(e.x).String() == e.s); - test(200+uint(i), intFromString(e.s, 0, nil).Value() == e.x); - test(300+uint(i), Int(e.x).Abs().Value() == abs(e.x)); - } - - test_msg = "IntConvB"; - var slen int; - int_eq(0, intFromString("0", 0, nil), int_zero); - int_eq(1, intFromString("-0", 0, nil), int_zero); - int_eq(2, intFromString("123", 0, nil), Int(123)); - int_eq(3, intFromString("-123", 0, nil), Int(-123)); - int_eq(4, intFromString("077", 0, nil), Int(7*8+7)); - int_eq(5, intFromString("-077", 0, nil), Int(-(7*8 + 7))); - int_eq(6, intFromString("0x1f", 0, nil), Int(1*16+15)); - int_eq(7, intFromString("-0x1f", 0, &slen), Int(-(1*16 + 15))); - test(7, slen == 5); - int_eq(8, intFromString("+0x1f", 0, &slen), Int(+(1*16 + 15))); - test(8, slen == 5); - int_eq(9, intFromString("0x1fg", 0, &slen), Int(1*16+15)); - test(9, slen == 4); - int_eq(10, intFromString("-0x1fg", 0, &slen), Int(-(1*16 + 15))); - test(10, slen == 5); + test(100+uint(i), Int(e.x).String() == e.s) + test(200+uint(i), intFromString(e.s, 0, nil).Value() == e.x) + test(300+uint(i), Int(e.x).Abs().Value() == abs(e.x)) + } + + test_msg = "IntConvB" + var slen int + int_eq(0, intFromString("0", 0, nil), int_zero) + int_eq(1, intFromString("-0", 0, nil), int_zero) + int_eq(2, intFromString("123", 0, nil), Int(123)) + int_eq(3, intFromString("-123", 0, nil), Int(-123)) + int_eq(4, intFromString("077", 0, nil), Int(7*8+7)) + int_eq(5, intFromString("-077", 0, nil), Int(-(7*8 + 7))) + int_eq(6, intFromString("0x1f", 0, nil), Int(1*16+15)) + int_eq(7, intFromString("-0x1f", 0, &slen), Int(-(1*16 + 15))) + test(7, slen == 5) + int_eq(8, intFromString("+0x1f", 0, &slen), Int(+(1*16 + 15))) + test(8, slen == 5) + int_eq(9, intFromString("0x1fg", 0, &slen), Int(1*16+15)) + test(9, slen == 4) + int_eq(10, intFromString("-0x1fg", 0, &slen), Int(-(1*16 + 15))) + test(10, slen == 5) } func TestRatConv(t *testing.T) { - tester = t; - test_msg = "RatConv"; - var slen int; - rat_eq(0, ratFromString("0", 0, nil), rat_zero); - rat_eq(1, ratFromString("0/1", 0, nil), rat_zero); - rat_eq(2, ratFromString("0/01", 0, nil), rat_zero); - rat_eq(3, ratFromString("0x14/10", 0, &slen), rat_two); - test(4, slen == 7); - rat_eq(5, ratFromString("0.", 0, nil), rat_zero); - rat_eq(6, ratFromString("0.001f", 10, nil), Rat(1, 1000)); - rat_eq(7, ratFromString(".1", 0, nil), Rat(1, 10)); - rat_eq(8, ratFromString("10101.0101", 2, nil), Rat(0x155, 1<<4)); - rat_eq(9, ratFromString("-0003.145926", 10, &slen), Rat(-3145926, 1000000)); - test(10, slen == 12); - rat_eq(11, ratFromString("1e2", 0, nil), Rat(100, 1)); - rat_eq(12, ratFromString("1e-2", 0, nil), Rat(1, 100)); - rat_eq(13, ratFromString("1.1e2", 0, nil), Rat(110, 1)); - rat_eq(14, ratFromString(".1e2x", 0, &slen), Rat(10, 1)); - test(15, slen == 4); + tester = t + test_msg = "RatConv" + var slen int + rat_eq(0, ratFromString("0", 0, nil), rat_zero) + rat_eq(1, ratFromString("0/1", 0, nil), rat_zero) + rat_eq(2, ratFromString("0/01", 0, nil), rat_zero) + rat_eq(3, ratFromString("0x14/10", 0, &slen), rat_two) + test(4, slen == 7) + rat_eq(5, ratFromString("0.", 0, nil), rat_zero) + rat_eq(6, ratFromString("0.001f", 10, nil), Rat(1, 1000)) + rat_eq(7, ratFromString(".1", 0, nil), Rat(1, 10)) + rat_eq(8, ratFromString("10101.0101", 2, nil), Rat(0x155, 1<<4)) + rat_eq(9, ratFromString("-0003.145926", 10, &slen), Rat(-3145926, 1000000)) + test(10, slen == 12) + rat_eq(11, ratFromString("1e2", 0, nil), Rat(100, 1)) + rat_eq(12, ratFromString("1e-2", 0, nil), Rat(1, 100)) + rat_eq(13, ratFromString("1.1e2", 0, nil), Rat(110, 1)) + rat_eq(14, ratFromString(".1e2x", 0, &slen), Rat(10, 1)) + test(15, slen == 4) } func add(x, y Natural) Natural { - z1 := x.Add(y); - z2 := y.Add(x); + z1 := x.Add(y) + z2 := y.Add(x) if z1.Cmp(z2) != 0 { tester.Fatalf("addition not symmetric:\n\tx = %v\n\ty = %t", x, y) } - return z1; + return z1 } func sum(n uint64, scale Natural) Natural { - s := nat_zero; + s := nat_zero for ; n > 0; n-- { s = add(s, Nat(n).Mul(scale)) } - return s; + return s } func TestNatAdd(t *testing.T) { - tester = t; - test_msg = "NatAddA"; - nat_eq(0, add(nat_zero, nat_zero), nat_zero); - nat_eq(1, add(nat_zero, c), c); + tester = t + test_msg = "NatAddA" + nat_eq(0, add(nat_zero, nat_zero), nat_zero) + nat_eq(1, add(nat_zero, c), c) - test_msg = "NatAddB"; + test_msg = "NatAddB" for i := uint64(0); i < 100; i++ { - t := Nat(i); - nat_eq(uint(i), sum(i, c), t.Mul(t).Add(t).Shr(1).Mul(c)); + t := Nat(i) + nat_eq(uint(i), sum(i, c), t.Mul(t).Add(t).Shr(1).Mul(c)) } } func mul(x, y Natural) Natural { - z1 := x.Mul(y); - z2 := y.Mul(x); + z1 := x.Mul(y) + z2 := y.Mul(x) if z1.Cmp(z2) != 0 { tester.Fatalf("multiplication not symmetric:\n\tx = %v\n\ty = %t", x, y) } @@ -276,40 +276,40 @@ func mul(x, y Natural) Natural { if !y.IsZero() && z1.Div(y).Cmp(x) != 0 { tester.Fatalf("multiplication/division not inverse (B):\n\tx = %v\n\ty = %t", x, y) } - return z1; + return z1 } func TestNatSub(t *testing.T) { - tester = t; - test_msg = "NatSubA"; - nat_eq(0, nat_zero.Sub(nat_zero), nat_zero); - nat_eq(1, c.Sub(nat_zero), c); + tester = t + test_msg = "NatSubA" + nat_eq(0, nat_zero.Sub(nat_zero), nat_zero) + nat_eq(1, c.Sub(nat_zero), c) - test_msg = "NatSubB"; + test_msg = "NatSubB" for i := uint64(0); i < 100; i++ { - t := sum(i, c); + t := sum(i, c) for j := uint64(0); j <= i; j++ { t = t.Sub(mul(Nat(j), c)) } - nat_eq(uint(i), t, nat_zero); + nat_eq(uint(i), t, nat_zero) } } func TestNatMul(t *testing.T) { - tester = t; - test_msg = "NatMulA"; - nat_eq(0, mul(c, nat_zero), nat_zero); - nat_eq(1, mul(c, nat_one), c); - - test_msg = "NatMulB"; - nat_eq(0, b.Mul(MulRange(0, 100)), nat_zero); - nat_eq(1, b.Mul(MulRange(21, 100)), c); - - test_msg = "NatMulC"; - const n = 100; - p := b.Mul(c).Shl(n); + tester = t + test_msg = "NatMulA" + nat_eq(0, mul(c, nat_zero), nat_zero) + nat_eq(1, mul(c, nat_one), c) + + test_msg = "NatMulB" + nat_eq(0, b.Mul(MulRange(0, 100)), nat_zero) + nat_eq(1, b.Mul(MulRange(21, 100)), c) + + test_msg = "NatMulC" + const n = 100 + p := b.Mul(c).Shl(n) for i := uint(0); i < n; i++ { nat_eq(i, mul(b.Shl(i), c.Shl(n-i)), p) } @@ -317,17 +317,17 @@ func TestNatMul(t *testing.T) { func TestNatDiv(t *testing.T) { - tester = t; - test_msg = "NatDivA"; - nat_eq(0, c.Div(nat_one), c); - nat_eq(1, c.Div(Nat(100)), Fact(99)); - nat_eq(2, b.Div(c), nat_zero); - nat_eq(4, nat_one.Shl(100).Div(nat_one.Shl(90)), nat_one.Shl(10)); - nat_eq(5, c.Div(b), MulRange(21, 100)); - - test_msg = "NatDivB"; - const n = 100; - p := Fact(n); + tester = t + test_msg = "NatDivA" + nat_eq(0, c.Div(nat_one), c) + nat_eq(1, c.Div(Nat(100)), Fact(99)) + nat_eq(2, b.Div(c), nat_zero) + nat_eq(4, nat_one.Shl(100).Div(nat_one.Shl(90)), nat_one.Shl(10)) + nat_eq(5, c.Div(b), MulRange(21, 100)) + + test_msg = "NatDivB" + const n = 100 + p := Fact(n) for i := uint(0); i < n; i++ { nat_eq(100+i, p.Div(MulRange(1, i)), MulRange(i+1, n)) } @@ -335,10 +335,10 @@ func TestNatDiv(t *testing.T) { func TestIntQuoRem(t *testing.T) { - tester = t; - test_msg = "IntQuoRem"; + tester = t + test_msg = "IntQuoRem" type T struct { - x, y, q, r int64; + x, y, q, r int64 } a := []T{ T{+8, +3, +2, +2}, @@ -349,25 +349,25 @@ func TestIntQuoRem(t *testing.T) { T{+1, -2, 0, +1}, T{-1, +2, 0, -1}, T{-1, -2, 0, -1}, - }; + } for i := uint(0); i < uint(len(a)); i++ { - e := &a[i]; - x, y := Int(e.x).Mul(ip), Int(e.y).Mul(ip); - q, r := Int(e.q), Int(e.r).Mul(ip); - qq, rr := x.QuoRem(y); - int_eq(4*i+0, x.Quo(y), q); - int_eq(4*i+1, x.Rem(y), r); - int_eq(4*i+2, qq, q); - int_eq(4*i+3, rr, r); + e := &a[i] + x, y := Int(e.x).Mul(ip), Int(e.y).Mul(ip) + q, r := Int(e.q), Int(e.r).Mul(ip) + qq, rr := x.QuoRem(y) + int_eq(4*i+0, x.Quo(y), q) + int_eq(4*i+1, x.Rem(y), r) + int_eq(4*i+2, qq, q) + int_eq(4*i+3, rr, r) } } func TestIntDivMod(t *testing.T) { - tester = t; - test_msg = "IntDivMod"; + tester = t + test_msg = "IntDivMod" type T struct { - x, y, q, r int64; + x, y, q, r int64 } a := []T{ T{+8, +3, +2, +2}, @@ -378,144 +378,144 @@ func TestIntDivMod(t *testing.T) { T{+1, -2, 0, +1}, T{-1, +2, -1, +1}, T{-1, -2, +1, +1}, - }; + } for i := uint(0); i < uint(len(a)); i++ { - e := &a[i]; - x, y := Int(e.x).Mul(ip), Int(e.y).Mul(ip); - q, r := Int(e.q), Int(e.r).Mul(ip); - qq, rr := x.DivMod(y); - int_eq(4*i+0, x.Div(y), q); - int_eq(4*i+1, x.Mod(y), r); - int_eq(4*i+2, qq, q); - int_eq(4*i+3, rr, r); + e := &a[i] + x, y := Int(e.x).Mul(ip), Int(e.y).Mul(ip) + q, r := Int(e.q), Int(e.r).Mul(ip) + qq, rr := x.DivMod(y) + int_eq(4*i+0, x.Div(y), q) + int_eq(4*i+1, x.Mod(y), r) + int_eq(4*i+2, qq, q) + int_eq(4*i+3, rr, r) } } func TestNatMod(t *testing.T) { - tester = t; - test_msg = "NatModA"; + tester = t + test_msg = "NatModA" for i := uint(0); ; i++ { - d := nat_one.Shl(i); + d := nat_one.Shl(i) if d.Cmp(c) < 0 { nat_eq(i, c.Add(d).Mod(c), d) } else { - nat_eq(i, c.Add(d).Div(c), nat_two); - nat_eq(i, c.Add(d).Mod(c), d.Sub(c)); - break; + nat_eq(i, c.Add(d).Div(c), nat_two) + nat_eq(i, c.Add(d).Mod(c), d.Sub(c)) + break } } } func TestNatShift(t *testing.T) { - tester = t; - test_msg = "NatShift1L"; - test(0, b.Shl(0).Cmp(b) == 0); - test(1, c.Shl(1).Cmp(c) > 0); + tester = t + test_msg = "NatShift1L" + test(0, b.Shl(0).Cmp(b) == 0) + test(1, c.Shl(1).Cmp(c) > 0) - test_msg = "NatShift1R"; - test(3, b.Shr(0).Cmp(b) == 0); - test(4, c.Shr(1).Cmp(c) < 0); + test_msg = "NatShift1R" + test(3, b.Shr(0).Cmp(b) == 0) + test(4, c.Shr(1).Cmp(c) < 0) - test_msg = "NatShift2"; + test_msg = "NatShift2" for i := uint(0); i < 100; i++ { test(i, c.Shl(i).Shr(i).Cmp(c) == 0) } - test_msg = "NatShift3L"; + test_msg = "NatShift3L" { - const m = 3; - p := b; - f := Nat(1 << m); + const m = 3 + p := b + f := Nat(1 << m) for i := uint(0); i < 100; i++ { - nat_eq(i, b.Shl(i*m), p); - p = mul(p, f); + nat_eq(i, b.Shl(i*m), p) + p = mul(p, f) } } - test_msg = "NatShift3R"; + test_msg = "NatShift3R" { - p := c; + p := c for i := uint(0); !p.IsZero(); i++ { - nat_eq(i, c.Shr(i), p); - p = p.Shr(1); + nat_eq(i, c.Shr(i), p) + p = p.Shr(1) } } } func TestIntShift(t *testing.T) { - tester = t; - test_msg = "IntShift1L"; - test(0, ip.Shl(0).Cmp(ip) == 0); - test(1, ip.Shl(1).Cmp(ip) > 0); + tester = t + test_msg = "IntShift1L" + test(0, ip.Shl(0).Cmp(ip) == 0) + test(1, ip.Shl(1).Cmp(ip) > 0) - test_msg = "IntShift1R"; - test(0, ip.Shr(0).Cmp(ip) == 0); - test(1, ip.Shr(1).Cmp(ip) < 0); + test_msg = "IntShift1R" + test(0, ip.Shr(0).Cmp(ip) == 0) + test(1, ip.Shr(1).Cmp(ip) < 0) - test_msg = "IntShift2"; + test_msg = "IntShift2" for i := uint(0); i < 100; i++ { test(i, ip.Shl(i).Shr(i).Cmp(ip) == 0) } - test_msg = "IntShift3L"; + test_msg = "IntShift3L" { - const m = 3; - p := ip; - f := Int(1 << m); + const m = 3 + p := ip + f := Int(1 << m) for i := uint(0); i < 100; i++ { - int_eq(i, ip.Shl(i*m), p); - p = p.Mul(f); + int_eq(i, ip.Shl(i*m), p) + p = p.Mul(f) } } - test_msg = "IntShift3R"; + test_msg = "IntShift3R" { - p := ip; + p := ip for i := uint(0); p.IsPos(); i++ { - int_eq(i, ip.Shr(i), p); - p = p.Shr(1); + int_eq(i, ip.Shr(i), p) + p = p.Shr(1) } } - test_msg = "IntShift4R"; - int_eq(0, Int(-43).Shr(1), Int(-43>>1)); - int_eq(0, Int(-1024).Shr(100), Int(-1)); - int_eq(1, ip.Neg().Shr(10), ip.Neg().Div(Int(1).Shl(10))); + test_msg = "IntShift4R" + int_eq(0, Int(-43).Shr(1), Int(-43>>1)) + int_eq(0, Int(-1024).Shr(100), Int(-1)) + int_eq(1, ip.Neg().Shr(10), ip.Neg().Div(Int(1).Shl(10))) } func TestNatBitOps(t *testing.T) { - tester = t; + tester = t - x := uint64(0xf08e6f56bd8c3941); - y := uint64(0x3984ef67834bc); + x := uint64(0xf08e6f56bd8c3941) + y := uint64(0x3984ef67834bc) - bx := Nat(x); - by := Nat(y); + bx := Nat(x) + by := Nat(y) - test_msg = "NatAnd"; - bz := Nat(x & y); + test_msg = "NatAnd" + bz := Nat(x & y) for i := uint(0); i < 100; i++ { nat_eq(i, bx.Shl(i).And(by.Shl(i)), bz.Shl(i)) } - test_msg = "NatAndNot"; - bz = Nat(x &^ y); + test_msg = "NatAndNot" + bz = Nat(x &^ y) for i := uint(0); i < 100; i++ { nat_eq(i, bx.Shl(i).AndNot(by.Shl(i)), bz.Shl(i)) } - test_msg = "NatOr"; - bz = Nat(x | y); + test_msg = "NatOr" + bz = Nat(x | y) for i := uint(0); i < 100; i++ { nat_eq(i, bx.Shl(i).Or(by.Shl(i)), bz.Shl(i)) } - test_msg = "NatXor"; - bz = Nat(x ^ y); + test_msg = "NatXor" + bz = Nat(x ^ y) for i := uint(0); i < 100; i++ { nat_eq(i, bx.Shl(i).Xor(by.Shl(i)), bz.Shl(i)) } @@ -523,77 +523,77 @@ func TestNatBitOps(t *testing.T) { func TestIntBitOps1(t *testing.T) { - tester = t; - test_msg = "IntBitOps1"; + tester = t + test_msg = "IntBitOps1" type T struct { - x, y int64; + x, y int64 } a := []T{ T{+7, +3}, T{+7, -3}, T{-7, +3}, T{-7, -3}, - }; + } for i := uint(0); i < uint(len(a)); i++ { - e := &a[i]; - int_eq(4*i+0, Int(e.x).And(Int(e.y)), Int(e.x&e.y)); - int_eq(4*i+1, Int(e.x).AndNot(Int(e.y)), Int(e.x&^e.y)); - int_eq(4*i+2, Int(e.x).Or(Int(e.y)), Int(e.x|e.y)); - int_eq(4*i+3, Int(e.x).Xor(Int(e.y)), Int(e.x^e.y)); + e := &a[i] + int_eq(4*i+0, Int(e.x).And(Int(e.y)), Int(e.x&e.y)) + int_eq(4*i+1, Int(e.x).AndNot(Int(e.y)), Int(e.x&^e.y)) + int_eq(4*i+2, Int(e.x).Or(Int(e.y)), Int(e.x|e.y)) + int_eq(4*i+3, Int(e.x).Xor(Int(e.y)), Int(e.x^e.y)) } } func TestIntBitOps2(t *testing.T) { - tester = t; + tester = t - test_msg = "IntNot"; - int_eq(0, Int(-2).Not(), Int(1)); - int_eq(0, Int(-1).Not(), Int(0)); - int_eq(0, Int(0).Not(), Int(-1)); - int_eq(0, Int(1).Not(), Int(-2)); - int_eq(0, Int(2).Not(), Int(-3)); + test_msg = "IntNot" + int_eq(0, Int(-2).Not(), Int(1)) + int_eq(0, Int(-1).Not(), Int(0)) + int_eq(0, Int(0).Not(), Int(-1)) + int_eq(0, Int(1).Not(), Int(-2)) + int_eq(0, Int(2).Not(), Int(-3)) - test_msg = "IntAnd"; + test_msg = "IntAnd" for x := int64(-15); x < 5; x++ { - bx := Int(x); + bx := Int(x) for y := int64(-5); y < 15; y++ { - by := Int(y); - for i := uint(50); i < 70; i++ { // shift across 64bit boundary + by := Int(y) + for i := uint(50); i < 70; i++ { // shift across 64bit boundary int_eq(i, bx.Shl(i).And(by.Shl(i)), Int(x&y).Shl(i)) } } } - test_msg = "IntAndNot"; + test_msg = "IntAndNot" for x := int64(-15); x < 5; x++ { - bx := Int(x); + bx := Int(x) for y := int64(-5); y < 15; y++ { - by := Int(y); - for i := uint(50); i < 70; i++ { // shift across 64bit boundary - int_eq(2*i+0, bx.Shl(i).AndNot(by.Shl(i)), Int(x&^y).Shl(i)); - int_eq(2*i+1, bx.Shl(i).And(by.Shl(i).Not()), Int(x&^y).Shl(i)); + by := Int(y) + for i := uint(50); i < 70; i++ { // shift across 64bit boundary + int_eq(2*i+0, bx.Shl(i).AndNot(by.Shl(i)), Int(x&^y).Shl(i)) + int_eq(2*i+1, bx.Shl(i).And(by.Shl(i).Not()), Int(x&^y).Shl(i)) } } } - test_msg = "IntOr"; + test_msg = "IntOr" for x := int64(-15); x < 5; x++ { - bx := Int(x); + bx := Int(x) for y := int64(-5); y < 15; y++ { - by := Int(y); - for i := uint(50); i < 70; i++ { // shift across 64bit boundary + by := Int(y) + for i := uint(50); i < 70; i++ { // shift across 64bit boundary int_eq(i, bx.Shl(i).Or(by.Shl(i)), Int(x|y).Shl(i)) } } } - test_msg = "IntXor"; + test_msg = "IntXor" for x := int64(-15); x < 5; x++ { - bx := Int(x); + bx := Int(x) for y := int64(-5); y < 15; y++ { - by := Int(y); - for i := uint(50); i < 70; i++ { // shift across 64bit boundary + by := Int(y) + for i := uint(50); i < 70; i++ { // shift across 64bit boundary int_eq(i, bx.Shl(i).Xor(by.Shl(i)), Int(x^y).Shl(i)) } } @@ -602,27 +602,27 @@ func TestIntBitOps2(t *testing.T) { func TestNatCmp(t *testing.T) { - tester = t; - test_msg = "NatCmp"; - test(0, a.Cmp(a) == 0); - test(1, a.Cmp(b) < 0); - test(2, b.Cmp(a) > 0); - test(3, a.Cmp(c) < 0); - d := c.Add(b); - test(4, c.Cmp(d) < 0); - test(5, d.Cmp(c) > 0); + tester = t + test_msg = "NatCmp" + test(0, a.Cmp(a) == 0) + test(1, a.Cmp(b) < 0) + test(2, b.Cmp(a) > 0) + test(3, a.Cmp(c) < 0) + d := c.Add(b) + test(4, c.Cmp(d) < 0) + test(5, d.Cmp(c) > 0) } func TestNatLog2(t *testing.T) { - tester = t; - test_msg = "NatLog2A"; - test(0, nat_one.Log2() == 0); - test(1, nat_two.Log2() == 1); - test(2, Nat(3).Log2() == 1); - test(3, Nat(4).Log2() == 2); - - test_msg = "NatLog2B"; + tester = t + test_msg = "NatLog2A" + test(0, nat_one.Log2() == 0) + test(1, nat_two.Log2() == 1) + test(2, Nat(3).Log2() == 1) + test(3, Nat(4).Log2() == 2) + + test_msg = "NatLog2B" for i := uint(0); i < 100; i++ { test(i, nat_one.Shl(i).Log2() == i) } @@ -630,19 +630,19 @@ func TestNatLog2(t *testing.T) { func TestNatGcd(t *testing.T) { - tester = t; - test_msg = "NatGcdA"; - f := Nat(99991); - nat_eq(0, b.Mul(f).Gcd(c.Mul(f)), MulRange(1, 20).Mul(f)); + tester = t + test_msg = "NatGcdA" + f := Nat(99991) + nat_eq(0, b.Mul(f).Gcd(c.Mul(f)), MulRange(1, 20).Mul(f)) } func TestNatPow(t *testing.T) { - tester = t; - test_msg = "NatPowA"; - nat_eq(0, nat_two.Pow(0), nat_one); + tester = t + test_msg = "NatPowA" + nat_eq(0, nat_two.Pow(0), nat_one) - test_msg = "NatPowB"; + test_msg = "NatPowB" for i := uint(0); i < 100; i++ { nat_eq(i, nat_two.Pow(i), nat_one.Shl(i)) } @@ -650,15 +650,15 @@ func TestNatPow(t *testing.T) { func TestNatPop(t *testing.T) { - tester = t; - test_msg = "NatPopA"; - test(0, nat_zero.Pop() == 0); - test(1, nat_one.Pop() == 1); - test(2, Nat(10).Pop() == 2); - test(3, Nat(30).Pop() == 4); - test(4, Nat(0x1248f).Shl(33).Pop() == 8); - - test_msg = "NatPopB"; + tester = t + test_msg = "NatPopA" + test(0, nat_zero.Pop() == 0) + test(1, nat_one.Pop() == 1) + test(2, Nat(10).Pop() == 2) + test(3, Nat(30).Pop() == 4) + test(4, Nat(0x1248f).Shl(33).Pop() == 8) + + test_msg = "NatPopB" for i := uint(0); i < 100; i++ { test(i, nat_one.Shl(i).Sub(nat_one).Pop() == i) } |