// Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import Big "bignum" const ( sa = "991"; sb = "2432902008176640000"; // 20! sc = "93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000"; // 100! ) var ( a = Big.NatFromString(sa, 10); b = Big.NatFromString(sb, 10); c = Big.NatFromString(sc, 10); ) var test_msg string; func TEST(n uint, b bool) { if !b { panic("TEST failed: ", test_msg, "(", n, ")\n"); } } func TEST_EQ(n uint, x, y *Big.Natural) { if x.Cmp(y) != 0 { println("TEST failed:", test_msg, "(", n, ")\n"); println("x =", x.String(10)); println("y =", y.String(10)); panic(); } } func TestConv() { test_msg = "TestConv"; TEST(0, a.Cmp(Big.Nat(991)) == 0); TEST(1, b.Cmp(Big.Fact(20)) == 0); TEST(2, c.Cmp(Big.Fact(100)) == 0); TEST(3, a.String(10) == sa); TEST(4, b.String(10) == sb); TEST(5, c.String(10) == sc); } func TestShift() { test_msg = "TestShift1L"; TEST(0, b.Shl(0).Cmp(b) == 0); TEST(1, c.Shl(1).Cmp(c) > 0); test_msg = "TestShift1R"; TEST(0, b.Shr(0).Cmp(b) == 0); TEST(1, c.Shr(1).Cmp(c) < 0); test_msg = "TestShift2"; for i := uint(0); i < 100; i++ { TEST(i, c.Shl(i).Shr(i).Cmp(c) == 0); } test_msg = "TestShift3L"; { const m = 3; p := b; f := Big.Nat(1<