101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// Copyright 2010 the V8 project authors. All rights reserved.
201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// Redistribution and use in source and binary forms, with or without
301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// modification, are permitted provided that the following conditions are
401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// met:
501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//
601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//     * Redistributions of source code must retain the above copyright
701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       notice, this list of conditions and the following disclaimer.
801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//     * Redistributions in binary form must reproduce the above
901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       copyright notice, this list of conditions and the following
1001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       disclaimer in the documentation and/or other materials provided
1101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       with the distribution.
1201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//     * Neither the name of Google Inc. nor the names of its
1301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       contributors may be used to endorse or promote products derived
1401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//       from this software without specific prior written permission.
1501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org//
1601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
1801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
1901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
2801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org#include <stdlib.h>
2901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h"
3101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
325de0074a922429f5e0ec2cf140c2d2989bf88140yangguo@chromium.org#include "src/base/platform/platform.h"
33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/bignum.h"
34196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h"
3501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
3601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgusing namespace v8::internal;
3701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
3801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
3901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgstatic const int kBufferSize = 1024;
4001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
4101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgstatic void AssignHexString(Bignum* bignum, const char* str) {
4201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum->AssignHexString(Vector<const char>(str, StrLength(str)));
4301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
4401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
4501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
4601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgstatic void AssignDecimalString(Bignum* bignum, const char* str) {
4701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum->AssignDecimalString(Vector<const char>(str, StrLength(str)));
4801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
4901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
5001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
5101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(Assign) {
5201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
5301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
5401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum2;
5501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0);
5601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
5701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
5801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xA);
5901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
6001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
6101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x20);
6201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
6301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("20", buffer);
6401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
6501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
6601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(0);
6701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
6801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
6901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(0xA);
7001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
7101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
7201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(0x20);
7301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
7401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("20", buffer);
7501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(0x100);
7601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
7701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100", buffer);
7801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
7901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // The first real test, since this will not fit into one bigit.
8001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(0x12345678);
8101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
8201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("12345678", buffer);
8301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
8401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  uint64_t big = V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF);
8501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(big);
8601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
8701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFF", buffer);
8801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
8901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  big = V8_2PART_UINT64_C(0x12345678, 9ABCDEF0);
9001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt64(big);
9101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
9201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("123456789ABCDEF0", buffer);
9301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
9401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignBignum(bignum);
9501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum2.ToHexString(buffer, kBufferSize));
9601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("123456789ABCDEF0", buffer);
9701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
9801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "0");
9901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
10001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
10101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
10201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1");
10301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
10401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
10501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
10601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234567890");
10701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
10801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("499602D2", buffer);
10901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
11001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
11101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
11201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
11301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
11401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "123456789ABCDEF0");
11501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
11601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("123456789ABCDEF0", buffer);
11701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
11801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
11901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
12001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(ShiftLeft) {
12101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
12201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
12301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
12401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
12501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
12601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
12701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
12801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
12901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(1);
13001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
13101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2", buffer);
13201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
13301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
13401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(4);
13501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
13601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10", buffer);
13701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
13801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
13901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(32);
14001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
14101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000000", buffer);
14201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
14301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
14401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(64);
14501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
14601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000", buffer);
14701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
14801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "123456789ABCDEF");
14901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(64);
15001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
15101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("123456789ABCDEF0000000000000000", buffer);
15201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(1);
15301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
15401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2468ACF13579BDE0000000000000000", buffer);
15501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
15601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
15701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
15801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(AddUInt64) {
15901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
16001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
16101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
16201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0xA);
16301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
16401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
16501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
16601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
16701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0xA);
16801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
16901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("B", buffer);
17001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
17101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
17201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0x100);
17301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
17401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("101", buffer);
17501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
17601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
17701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0xFFFF);
17801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
17901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000", buffer);
18001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
18101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
18201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0x1);
18301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
18401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000", buffer);
18501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
18601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
18701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0xFFFF);
18801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
18901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000000000000000000000FFFF", buffer);
19001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
19101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
19201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0x1);
19301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
19401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000000000000000000000000000000000000000000", buffer);
19501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
19601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
19701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
19801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(1);
19901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
20001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000001", buffer);
20101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
20201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
20301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
20401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(0xFFFF);
20501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
20601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000FFFF", buffer);
20701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
20801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
20901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0xA, 00000000));
21001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
21101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A00000000", buffer);
21201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
21301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
21401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0xA, 00000000));
21501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
21601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A00000001", buffer);
21701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
21801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
21901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0x100, 00000000));
22001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
22101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000001", buffer);
22201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
22301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
22401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0xFFFF, 00000000));
22501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
22601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFF00000001", buffer);
22701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
22801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
22901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0x1, 00000000));
23001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
23101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10FFFFFFF", buffer);
23201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
23301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
23401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0xFFFF, 00000000));
23501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
23601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000000000FFFF00000000", buffer);
23701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
23801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
23901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0x1, 00000000));
24001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
24101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000000000000000000FFFFFFFF", buffer);
24201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
24301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
24401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
24501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0x1, 00000000));
24601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
24701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000100000000", buffer);
24801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
24901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
25001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
25101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddUInt64(V8_2PART_UINT64_C(0xFFFF, 00000000));
25201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
25301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000FFFF00000000", buffer);
25401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
25501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
25601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
25701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(AddBignum) {
25801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
25901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
26001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum other;
26101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
26201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1");
26301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
26401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
26501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
26601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
26701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
26801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
26901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
27001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
27101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2", buffer);
27201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
27301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
27401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
27501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
27601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000", buffer);
27701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
27801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFF");
27901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
28001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
28101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000000000000", buffer);
28201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
28301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
28401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
28501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
28601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000000000000000000001", buffer);
28701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
28801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
28901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
29001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
29101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
29201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
29301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000001", buffer);
29401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
29501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
29601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
29701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
29801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000FFFFFFF", buffer);
29901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
30001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
30101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
30201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
30301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000000001000000000000", buffer);
30401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
30501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
30601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
30701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
30801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000000000000FFFFFFFFFFFF", buffer);
30901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
31001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
31101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
31201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
31301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
31401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000001000000000000", buffer);
31501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
31601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.ShiftLeft(64);
31701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // other == "10000000000000000000000000000"
31801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
31901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
32001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
32101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
32201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000001", buffer);
32301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
32401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
32501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
32601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
32701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000FFFFFFF", buffer);
32801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
32901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
33001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
33101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
33201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000010000000000000000000000000000", buffer);
33301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
33401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
33501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
33601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
33701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF", buffer);
33801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
33901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
34001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
34101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
34201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
34301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10010000000000000000000000000", buffer);
34401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
34501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
34601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
34701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(SubtractBignum) {
34801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
34901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
35001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum other;
35101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
35201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1");
35301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "0");
35401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
35501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
35601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
35701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
35801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "2");
35901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "0");
36001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
36101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
36201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2", buffer);
36301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
36401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000");
36501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1");
36601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
36701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
36801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFF", buffer);
36901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
37001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000000000000");
37101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1");
37201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
37301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
37401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFF", buffer);
37501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
37601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000001");
37701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1");
37801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
37901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
38001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000000000000000000000", buffer);
38101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
38201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1000000000001");
38301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
38401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
38501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
38601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
38701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
38801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000FFFFFFF");
38901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
39001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
39101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
39201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFF", buffer);
39301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
39401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000001000000000000");
39501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
39601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
39701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
39801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000000000000000000000", buffer);
39901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
40001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1000000000000000000000000000000FFFFFFFFFFFF");
40101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
40201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
40301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
40401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", buffer);
40501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
40601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
40701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
40801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "10 0000 0000 0000 0000 0000 0000"
40901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
41001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
41101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
41201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFF000000000000", buffer);
41301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
41401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1000000000000");
41501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.ShiftLeft(48);
41601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // other == "1000000000000000000000000"
41701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
41801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
41901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
42001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // bignum == "10000000000000000000000000"
42101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
42201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
42301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("F000000000000000000000000", buffer);
42401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
42501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(0x1);
42601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.ShiftLeft(35);
42701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // other == "800000000"
42801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
42901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(60);
43001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // bignum = FFFFFFF000000000000000
43101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
43201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
43301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFEFFFFFF800000000", buffer);
43401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
43501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000000000000000000000000000000000000000");
43601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
43701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
43801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000000", buffer);
43901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
44001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
44101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.SubtractBignum(other);
44201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
44301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFF", buffer);
44401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
44501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
44601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
44701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(MultiplyUInt32) {
44801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
44901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
45001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
45101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
45201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x25);
45301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
45401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
45501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
45601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "2");
45701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x5);
45801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
45901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
46001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
46101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000");
46201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x9);
46301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
46401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("90000000", buffer);
46501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
46601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000000000000");
46701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFF);
46801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
46901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFF00000000000000", buffer);
47001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
47101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000000000000");
47201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFFFFFF);
47301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
47401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFF00000000000000", buffer);
47501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
47601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1234567ABCD");
47701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFF);
47801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
47901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("12333335552433", buffer);
48001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
48101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1234567ABCD");
48201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFFFFF);
48301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
48401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("12345679998A985433", buffer);
48501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
48601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
48701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x2);
48801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
48901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1FFFFFFFFFFFFFFFE", buffer);
49001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
49101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
49201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x4);
49301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
49401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3FFFFFFFFFFFFFFFC", buffer);
49501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
49601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
49701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xF);
49801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
49901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("EFFFFFFFFFFFFFFF1", buffer);
50001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
50101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
50201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFFFF);
50301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
50401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFEFFFFFFFFFF000001", buffer);
50501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
50601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
50701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
50801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "10 0000 0000 0000 0000 0000 0000"
50901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(2);
51001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
51101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("20000000000000000000000000", buffer);
51201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
51301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
51401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
51501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "10 0000 0000 0000 0000 0000 0000"
51601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xF);
51701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
51801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("F0000000000000000000000000", buffer);
51901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
52001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
52101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
52201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
52301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFF);
52401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
52501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFE00010000000000000000000000000", buffer);
52601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
52701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
52801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
52901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
53001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFFFFFF);
53101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
53201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFEFFFF00010000000000000000000000000", buffer);
53301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
53401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
53501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
53601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
53701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0xFFFFFFFF);
53801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
53901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFEFFFF00010000000000000000000000000", buffer);
54001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
54101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "15611230384529777");
54201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(10000000);
54301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
54401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("210EDD6D4CDD2580EE80", buffer);
54501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
54601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
54701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
54801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(MultiplyUInt64) {
54901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
55001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
55101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
55201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "0");
55301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0x25);
55401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
55501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
55601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
55701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "2");
55801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0x5);
55901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
56001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
56101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
56201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "10000000");
56301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0x9);
56401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
56501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("90000000", buffer);
56601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
56701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000000000000");
56801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xFFFF);
56901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
57001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFF00000000000000", buffer);
57101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
57201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "100000000000000");
57301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF));
57401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
57501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFF00000000000000", buffer);
57601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
57701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1234567ABCD");
57801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xFFF);
57901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
58001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("12333335552433", buffer);
58101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
58201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "1234567ABCD");
58301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(V8_2PART_UINT64_C(0xFF, FFFFFFFF));
58401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
58501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1234567ABCBDCBA985433", buffer);
58601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
58701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
58801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0x2);
58901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
59001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1FFFFFFFFFFFFFFFE", buffer);
59101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
59201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
59301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0x4);
59401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
59501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3FFFFFFFFFFFFFFFC", buffer);
59601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
59701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
59801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xF);
59901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
60001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("EFFFFFFFFFFFFFFF1", buffer);
60101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
60201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFFFF");
60301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF));
60401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
60501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFFFE0000000000000001", buffer);
60601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
60701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
60801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
60901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "10 0000 0000 0000 0000 0000 0000"
61001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(2);
61101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
61201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("20000000000000000000000000", buffer);
61301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
61401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0x1);
61501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
61601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "10 0000 0000 0000 0000 0000 0000"
61701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xF);
61801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
61901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("F0000000000000000000000000", buffer);
62001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
62101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
62201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
62301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
62401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xFFFF);
62501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
62601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFE00010000000000000000000000000", buffer);
62701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
62801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
62901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
63001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
63101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(0xFFFFFFFF);
63201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
63301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFEFFFF00010000000000000000000000000", buffer);
63401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
63501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(0xFFFF);
63601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(100);
63701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  // "FFFF0 0000 0000 0000 0000 0000 0000"
63801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF));
63901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
64001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFEFFFFFFFFFFFF00010000000000000000000000000", buffer);
64101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
64201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "15611230384529777");
64301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt64(V8_2PART_UINT64_C(0x8ac72304, 89e80000));
64401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
64501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1E10EE4B11D15A7F3DE7F3C7680000", buffer);
64601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
64701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
64801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
64901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(MultiplyPowerOfTen) {
65001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
65101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
65201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
65301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
65401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(1);
65501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
65601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3034", buffer);
65701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
65801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
65901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(2);
66001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
66101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1E208", buffer);
66201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
66301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
66401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(3);
66501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
66601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("12D450", buffer);
66701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
66801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
66901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(4);
67001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
67101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("BC4B20", buffer);
67201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
67301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
67401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(5);
67501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
67601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("75AEF40", buffer);
67701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
67801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
67901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(6);
68001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
68101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("498D5880", buffer);
68201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
68301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
68401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(7);
68501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
68601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2DF857500", buffer);
68701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
68801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
68901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(8);
69001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
69101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1CBB369200", buffer);
69201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
69301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
69401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(9);
69501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
69601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("11F5021B400", buffer);
69701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
69801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
69901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(10);
70001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
70101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("B3921510800", buffer);
70201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
70301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
70401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(11);
70501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
70601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("703B4D2A5000", buffer);
70701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
70801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
70901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(12);
71001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
71101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("4625103A72000", buffer);
71201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
71301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
71401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(13);
71501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
71601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2BD72A24874000", buffer);
71701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
71801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
71901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(14);
72001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
72101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1B667A56D488000", buffer);
72201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
72301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
72401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(15);
72501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
72601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("11200C7644D50000", buffer);
72701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
72801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
72901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(16);
73001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
73101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("AB407C9EB0520000", buffer);
73201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
73301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
73401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(17);
73501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
73601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("6B084DE32E3340000", buffer);
73701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
73801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
73901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(18);
74001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
74101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("42E530ADFCE0080000", buffer);
74201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
74301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
74401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(19);
74501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
74601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("29CF3E6CBE0C0500000", buffer);
74701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
74801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
74901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(20);
75001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
75101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1A218703F6C783200000", buffer);
75201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
75301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
75401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(21);
75501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
75601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1054F4627A3CB1F400000", buffer);
75701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
75801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
75901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(22);
76001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
76101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A3518BD8C65EF38800000", buffer);
76201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
76301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
76401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(23);
76501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
76601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("6612F7677BFB5835000000", buffer);
76701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
76801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
76901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(24);
77001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
77101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3FCBDAA0AD7D17212000000", buffer);
77201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
77301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
77401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(25);
77501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
77601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("27DF68A46C6E2E74B4000000", buffer);
77701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
77801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
77901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(26);
78001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
78101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("18EBA166C3C4DD08F08000000", buffer);
78201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
78301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
78401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(27);
78501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
78601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("F9344E03A5B0A259650000000", buffer);
78701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
78801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
78901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(28);
79001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
79101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("9BC0B0C2478E6577DF20000000", buffer);
79201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
79301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
79401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(29);
79501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
79601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("61586E796CB8FF6AEB740000000", buffer);
79701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
79801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
79901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(30);
80001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
80101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3CD7450BE3F39FA2D32880000000", buffer);
80201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
80301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
80401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(31);
80501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
80601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("26068B276E7843C5C3F9500000000", buffer);
80701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
80801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
80901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(50);
81001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
81101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("149D1B4CFED03B23AB5F4E1196EF45C08000000000000", buffer);
81201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
81301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
81401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(100);
81501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
81601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("5827249F27165024FBC47DFCA9359BF316332D1B91ACEECF471FBAB06D9B2"
81701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000", buffer);
81801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
81901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
82001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(200);
82101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
82201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("64C1F5C06C3816AFBF8DAFD5A3D756365BB0FD020E6F084E759C1F7C99E4F"
82301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "55B9ACC667CEC477EB958C2AEEB3C6C19BA35A1AD30B35C51EB72040920000"
82401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000000000000000000000000", buffer);
82501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
82601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
82701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(500);
82801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
82901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("96741A625EB5D7C91039FEB5C5ACD6D9831EDA5B083D800E6019442C8C8223"
83001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "3EAFB3501FE2058062221E15121334928880827DEE1EC337A8B26489F3A40A"
83101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "CB440A2423734472D10BFCE886F41B3AF9F9503013D86D088929CA86EEB4D8"
83201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B9C831D0BD53327B994A0326227CFD0ECBF2EB48B02387AAE2D4CCCDF1F1A1"
83301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B8CC4F1FA2C56AD40D0E4DAA9C28CDBF0A549098EA13200000000000000000"
83401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "00000000000000000000000000000000000000000000000000000000000000"
83501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000000000000000000000000", buffer);
83601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
83701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignDecimalString(&bignum, "1234");
83801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(1000);
83901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
84001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1258040F99B1CD1CC9819C676D413EA50E4A6A8F114BB0C65418C62D399B81"
84101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6361466CA8E095193E1EE97173553597C96673AF67FAFE27A66E7EF2E5EF2E"
84201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E3F5F5070CC17FE83BA53D40A66A666A02F9E00B0E11328D2224B8694C7372"
84301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F3D536A0AD1985911BD361496F268E8B23112500EAF9B88A9BC67B2AB04D38"
84401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "7FEFACD00F5AF4F764F9ABC3ABCDE54612DE38CD90CB6647CA389EA0E86B16"
84501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "BF7A1F34086E05ADBE00BD1673BE00FAC4B34AF1091E8AD50BA675E0381440"
84601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "EA8E9D93E75D816BAB37C9844B1441C38FC65CF30ABB71B36433AF26DD97BD"
84701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "ABBA96C03B4919B8F3515B92826B85462833380DC193D79F69D20DD6038C99"
84801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6114EF6C446F0BA28CC772ACBA58B81C04F8FFDE7B18C4E5A3ABC51E637FDF"
84901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6E37FDFF04C940919390F4FF92000000000000000000000000000000000000"
85001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "00000000000000000000000000000000000000000000000000000000000000"
85101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "00000000000000000000000000000000000000000000000000000000000000"
85201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "00000000000000000000000000000000000000000000000000000000000000"
85301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000000", buffer);
85401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
85501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum2;
85601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "3DA774C07FB5DF54284D09C675A492165B830D5DAAEB2A7501"
85701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "DA17CF9DFA1CA2282269F92A25A97314296B717E3DCBB9FE17"
85801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "41A842FE2913F540F40796F2381155763502C58B15AF7A7F88"
85901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "6F744C9164FF409A28F7FA0C41F89ED79C1BE9F322C8578B97"
86001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "841F1CBAA17D901BE1230E3C00E1C643AF32638B5674E01FEA"
86101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "96FC90864E621B856A9E1CE56E6EB545B9C2F8F0CC10DDA88D"
86201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "CC6D282605F8DB67044F2DFD3695E7BA63877AE16701536AE6"
86301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "567C794D0BFE338DFBB42D92D4215AF3BB22BF0A8B283FDDC2"
86401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org                            "C667A10958EA6D2");
86501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum2.ToHexString(buffer, kBufferSize));
86601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("3DA774C07FB5DF54284D09C675A492165B830D5DAAEB2A7501"
86701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "DA17CF9DFA1CA2282269F92A25A97314296B717E3DCBB9FE17"
86801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "41A842FE2913F540F40796F2381155763502C58B15AF7A7F88"
86901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6F744C9164FF409A28F7FA0C41F89ED79C1BE9F322C8578B97"
87001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "841F1CBAA17D901BE1230E3C00E1C643AF32638B5674E01FEA"
87101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "96FC90864E621B856A9E1CE56E6EB545B9C2F8F0CC10DDA88D"
87201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "CC6D282605F8DB67044F2DFD3695E7BA63877AE16701536AE6"
87301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "567C794D0BFE338DFBB42D92D4215AF3BB22BF0A8B283FDDC2"
87401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "C667A10958EA6D2", buffer);
87501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
87601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
87701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(1);
87801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
87901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2688A8F84FD1AB949930261C0986DB4DF931E85A8AD2FA8921284EE1C2BC51"
88001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E55915823BBA5789E7EC99E326EEE69F543ECE890929DED9AC79489884BE57"
88101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "630AD569E121BB76ED8DAC8FB545A8AFDADF1F8860599AFC47A93B6346C191"
88201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "7237F5BD36B73EB29371F4A4EE7A116CB5E8E5808D1BEA4D7F7E3716090C13"
88301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F29E5DDA53F0FD513362A2D20F6505314B9419DB967F8A8A89589FC43917C3"
88401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "BB892062B17CBE421DB0D47E34ACCCE060D422CFF60DCBD0277EE038BD509C"
88501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "7BC494D8D854F5B76696F927EA99BC00C4A5D7928434", buffer);
88601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
88701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
88801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(2);
88901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
89001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1815699B31E30B3CDFBE17D185F44910BBBF313896C3DC95B4B9314D19B5B32"
89101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F57AD71655476B630F3E02DF855502394A74115A5BA2B480BCBCD5F52F6F69D"
89201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E6C5622CB5152A54788BD9D14B896DE8CB73B53C3800DDACC9C51E0C38FAE76"
89301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "2F9964232872F9C2738E7150C4AE3F1B18F70583172706FAEE26DC5A78C77A2"
89401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "FAA874769E52C01DA5C3499F233ECF3C90293E0FB69695D763DAA3AEDA5535B"
89501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "43DAEEDF6E9528E84CEE0EC000C3C8495C1F9C89F6218AF4C23765261CD5ADD"
89601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0787351992A01E5BB8F2A015807AE7A6BB92A08", buffer);
89701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
89801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
89901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(5);
90001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
90101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("5E13A4863ADEE3E5C9FE8D0A73423D695D62D8450CED15A8C9F368952C6DC3"
90201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F0EE7D82F3D1EFB7AF38A3B3920D410AFCAD563C8F5F39116E141A3C5C14B3"
90301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "58CD73077EA35AAD59F6E24AD98F10D5555ABBFBF33AC361EAF429FD5FBE94"
90401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "17DA9EF2F2956011F9F93646AA38048A681D984ED88127073443247CCC167C"
90501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B354A32206EF5A733E73CF82D795A1AD598493211A6D613C39515E0E0F6304"
90601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "DCD9C810F3518C7F6A7CB6C81E99E02FCC65E8FDB7B7AE97306CC16A8631CE"
90701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0A2AEF6568276BE4C176964A73C153FDE018E34CB4C2F40", buffer);
90801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
90901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
91001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(10);
91101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
91201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("8F8CB8EB51945A7E815809F6121EF2F4E61EF3405CD9432CAD2709749EEAFD"
91301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "1B81E843F14A3667A7BDCCC9E0BB795F63CDFDB62844AC7438976C885A0116"
91401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "29607DA54F9C023CC366570B7637ED0F855D931752038A614922D0923E382C"
91501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B8E5F6C975672DB76E0DE471937BB9EDB11E28874F1C122D5E1EF38CECE9D0"
91601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0723056BCBD4F964192B76830634B1D322B7EB0062F3267E84F5C824343A77"
91701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "4B7DCEE6DD464F01EBDC8C671BB18BB4EF4300A42474A6C77243F2A12B03BF"
91801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0443C38A1C0D2701EDB393135AE0DEC94211F9D4EB51F990800", buffer);
91901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
92001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
92101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(50);
92201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
92301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("107A8BE345E24407372FC1DE442CBA696BC23C4FFD5B4BDFD9E5C39559815"
92401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "86628CF8472D2D589F2FC2BAD6E0816EC72CBF85CCA663D8A1EC6C51076D8"
92501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "2D247E6C26811B7EC4D4300FB1F91028DCB7B2C4E7A60C151161AA7E65E79"
92601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B40917B12B2B5FBE7745984D4E8EFA31F9AE6062427B068B144A9CB155873"
92701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E7C0C9F0115E5AC72DC5A73C4796DB970BF9205AB8C77A6996EB1B417F9D1"
92801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6232431E6313C392203601B9C22CC10DDA88DCC6D282605F8DB67044F2DFD"
92901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "3695E7BA63877AE16701536AE6567C794D0BFE338DFBB42D924CF964BD2C0"
93001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F586E03A2FCD35A408000000000000", buffer);
93101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
93201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
93301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(100);
93401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
93501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("46784A90ACD0ED3E7759CC585FB32D36EB6034A6F78D92604E3BAA5ED3D8B"
93601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6E60E854439BE448897FB4B7EA5A3D873AA0FCB3CFFD80D0530880E45F511"
93701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "722A50CE7E058B5A6F5464DB7500E34984EE3202A9441F44FA1554C0CEA96"
93801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B438A36F25E7C9D56D71AE2CD313EC37534DA299AC0854FC48591A7CF3171"
93901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "31265AA4AE62DE32344CE7BEEEF894AE686A2DAAFE5D6D9A10971FFD9C064"
94001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "5079B209E1048F58B5192D41D84336AC4C8C489EEF00939CFC9D55C122036"
94101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "01B9C22CC10DDA88DCC6D282605F8DB67044F2DFD3695E7BA3F67B96D3A32"
94201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E11FB5561B68744C4035B0800DC166D49D98E3FD1D5BB2000000000000000"
94301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000", buffer);
94401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
94501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
94601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(200);
94701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
94801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("508BD351221DF139D72D88CDC0416845A53EE2D0E6B98352509A9AC312F8C"
94901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6CB1A144889416201E0B6CE66EA3EBE259B5FD79ECFC1FD77963CE516CC7E"
95001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "2FE73D4B5B710C19F6BCB092C7A2FD76286543B8DBD2C596DFF2C896720BA"
95101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "DFF7BC9C366ACEA3A880AEC287C5E6207DF2739B5326FC19D773BD830B109"
95201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "ED36C7086544BF8FDB9D4B73719C2B5BC2F571A5937EC46876CD428281F6B"
95301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F287E1E07F25C1B1D46BC37324FF657A8B2E0071DB83B86123CA34004F406"
95401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "001082D7945E90C6E8C9A9FEC2B44BE0DDA46E9F52B152E4D1336D2FCFBC9"
95501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "96E30CA0082256737365158FE36482AA7EB9DAF2AB128F10E7551A3CD5BE6"
95601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0A922F3A7D5EED38B634A7EC95BCF7021BA6820A292000000000000000000"
95701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "00000000000000000000000000000000", buffer);
95801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
95901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignBignum(bignum2);
96001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByPowerOfTen(500);
96101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
96201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("7845F900E475B5086885BAAAE67C8E85185ACFE4633727F82A4B06B5582AC"
96301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "BE933C53357DA0C98C20C5AC900C4D76A97247DF52B79F48F9E35840FB715"
96401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "D392CE303E22622B0CF82D9471B398457DD3196F639CEE8BBD2C146873841"
96501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "F0699E6C41F04FC7A54B48CEB995BEB6F50FE81DE9D87A8D7F849CC523553"
96601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "7B7BBBC1C7CAAFF6E9650BE03B308C6D31012AEF9580F70D3EE2083ADE126"
96701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "8940FA7D6308E239775DFD2F8C97FF7EBD525DAFA6512216F7047A62A93DC"
96801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "38A0165BDC67E250DCC96A0181DE935A70B38704DC71819F02FC5261FF7E1"
96901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "E5F11907678B0A3E519FF4C10A867B0C26CE02BE6960BA8621A87303C101C"
97001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "3F88798BB9F7739655946F8B5744E6B1EAF10B0C5621330F0079209033C69"
97101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "20DE2E2C8D324F0624463735D482BF291926C22A910F5B80FA25170B6B57D"
97201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "8D5928C7BCA3FE87461275F69BD5A1B83181DAAF43E05FC3C72C4E93111B6"
97301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "6205EBF49B28FEDFB7E7526CBDA658A332000000000000000000000000000"
97401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000000000000000000000000000000000000000"
97501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "0000000000000000000000000000000000000", buffer);
97601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
97701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
97801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
97901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(DivideModuloIntBignum) {
98001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
98101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
98201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum other;
98301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum third;
98401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
98501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
98601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(2);
98701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(5, bignum.DivideModuloIntBignum(other));
98801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
98901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
99001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
99101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
99201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(500);
99301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(2);
99401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.ShiftLeft(500);
99501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(5, bignum.DivideModuloIntBignum(other));
99601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("0", buffer);
99701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
99801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(11);
99901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(2);
100001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(5, bignum.DivideModuloIntBignum(other));
100101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
100201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
100301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
100401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
100501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(500);
100601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(1);
100701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(other);
100801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignUInt16(2);
100901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.ShiftLeft(500);
101001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(5, bignum.DivideModuloIntBignum(other));
101101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
101201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
101301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
101401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
101501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(500);
101601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignBignum(bignum);
101701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x1234);
101801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  third.AssignUInt16(0xFFF);
101901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AddBignum(third);
102001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0x1234, bignum.DivideModuloIntBignum(other));
102101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
102201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFF", buffer);
102301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
102401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
102501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1234567890");
102601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, bignum.DivideModuloIntBignum(other));
102701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
102801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
102901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
103001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "12345678");
103101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "3789012");
103201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(5, bignum.DivideModuloIntBignum(other));
103301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
103401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("D9861E", buffer);
103501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
103601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "70000001");
103701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "1FFFFFFF");
103801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(3, bignum.DivideModuloIntBignum(other));
103901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
104001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000004", buffer);
104101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
104201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "28000000");
104301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&other, "12A05F20");
104401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(2, bignum.DivideModuloIntBignum(other));
104501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
104601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2BF41C0", buffer);
104701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
104801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
104901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.ShiftLeft(500);
105001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.AssignBignum(bignum);
105101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.MultiplyByUInt32(0x1234);
105201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  third.AssignUInt16(0xFFF);
105301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  other.SubtractBignum(third);
105401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0x1234, bignum.DivideModuloIntBignum(other));
105501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
105601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1232DCC", buffer);
105701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, bignum.DivideModuloIntBignum(other));
105801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
105901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1232DCC", buffer);
106001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
106101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
106201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
106301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(Compare) {
106401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum1;
106501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum2;
106601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.AssignUInt16(1);
106701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
106801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum1, bignum2));
106901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::Equal(bignum1, bignum2));
107001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::LessEqual(bignum1, bignum2));
107101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::Less(bignum1, bignum2));
107201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
107301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.AssignUInt16(0);
107401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
107501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
107601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
107701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::Equal(bignum1, bignum2));
107801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::Equal(bignum2, bignum1));
107901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::LessEqual(bignum1, bignum2));
108001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::LessEqual(bignum2, bignum1));
108101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::Less(bignum1, bignum2));
108201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::Less(bignum2, bignum1));
108301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
108401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "1234567890ABCDEF12345");
108501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "1234567890ABCDEF12345");
108601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum1, bignum2));
108701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
108801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "1234567890ABCDEF12345");
108901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "1234567890ABCDEF12346");
109001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
109101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
109201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
109301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "1234567890ABCDEF12345");
109401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(500);
109501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "1234567890ABCDEF12345");
109601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(500);
109701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum1, bignum2));
109801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
109901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "1234567890ABCDEF12345");
110001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(500);
110101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "1234567890ABCDEF12346");
110201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(500);
110301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
110401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
110501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
110601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.AssignUInt16(1);
110701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(64);
110801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "10000000000000000");
110901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum1, bignum2));
111001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum2, bignum1));
111101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
111201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.AssignUInt16(1);
111301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(64);
111401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "10000000000000001");
111501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
111601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
111701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
111801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.AssignUInt16(1);
111901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(96);
112001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum2, "10000000000000001");
112101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(32);
112201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
112301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
112401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
112501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "FFFFFFFFFFFFFFFF");
112601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
112701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(64);
112801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
112901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
113001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
113101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "FFFFFFFFFFFFFFFF");
113201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(32);
113301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
113401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(96);
113501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
113601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
113701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
113801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "FFFFFFFFFFFFFFFF");
113901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(32);
114001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
114101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(95);
114201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum1, bignum2));
114301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum2, bignum1));
114401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
114501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "FFFFFFFFFFFFFFFF");
114601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum1.ShiftLeft(32);
114701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
114801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(100);
114901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
115001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
115101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
115201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "100000000000000");
115301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
115401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(14*4);
115501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum1, bignum2));
115601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::Compare(bignum2, bignum1));
115701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
115801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "100000000000001");
115901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(1);
116001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(14*4);
116101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum1, bignum2));
116201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum2, bignum1));
116301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
116401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum1, "200000000000000");
116501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.AssignUInt16(3);
116601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum2.ShiftLeft(14*4);
116701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::Compare(bignum1, bignum2));
116801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::Compare(bignum2, bignum1));
116901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
117001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
117101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
117201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(PlusCompare) {
117301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum a;
117401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum b;
117501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum c;
117601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.AssignUInt16(1);
117701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.AssignUInt16(0);
117801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.AssignUInt16(1);
117901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
118001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::PlusEqual(a, b, c));
118101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::PlusLessEqual(a, b, c));
118201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::PlusLess(a, b, c));
118301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
118401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.AssignUInt16(0);
118501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.AssignUInt16(0);
118601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.AssignUInt16(1);
118701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
118801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::PlusCompare(c, b, a));
118901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::PlusEqual(a, b, c));
119001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::PlusEqual(c, b, a));
119101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::PlusLessEqual(a, b, c));
119201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::PlusLessEqual(c, b, a));
119301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(Bignum::PlusLess(a, b, c));
119401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(!Bignum::PlusLess(c, b, a));
119501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
119601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890ABCDEF12345");
119701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.AssignUInt16(1);
119801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
119901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::PlusCompare(a, b, c));
120001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
120101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890ABCDEF12344");
120201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.AssignUInt16(1);
120301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
120401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
120501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
120601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
120701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4);
120801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
120901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
121001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
121101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
121201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
121301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4);
121401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12344");
121501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
121601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
121701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
121801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
121901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4);
122001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12346");
122101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
122201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
122301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
122401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567891");
122501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4);
122601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
122701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
122801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
122901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
123001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567889");
123101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4);
123201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
123301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
123401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
123501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
123601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
123701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
123801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
123901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
124001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
124101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.ShiftLeft(32);
124201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
124301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
124401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
124501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
124601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12344");
124701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
124801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
124901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.ShiftLeft(32);
125001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
125101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
125201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
125301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
125401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12346");
125501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
125601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
125701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.ShiftLeft(32);
125801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
125901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
126001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567891");
126101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
126201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
126301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
126401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
126501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.ShiftLeft(32);
126601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
126701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
126801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567889");
126901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
127001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
127101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
127201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF12345");
127301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  c.ShiftLeft(32);
127401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
127501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
127601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
127701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
127801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
127901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
128001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF1234500000000");
128101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
128201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
128301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
128401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
128501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12344");
128601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
128701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF1234500000000");
128801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
128901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
129001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
129101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
129201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12346");
129301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
129401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF1234500000000");
129501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
129601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
129701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567891");
129801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
129901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
130001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
130101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF1234500000000");
130201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
130301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
130401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567889");
130501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
130601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
130701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(32);
130801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "1234567890ABCDEF1234500000000");
130901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
131001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
131101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
131201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
131301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
131401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "123456789000000000ABCDEF12345");
131501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
131601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
131701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
131801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
131901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12346");
132001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "123456789000000000ABCDEF12345");
132101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(1, Bignum::PlusCompare(a, b, c));
132201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
132301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
132401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
132501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12344");
132601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "123456789000000000ABCDEF12345");
132701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
132801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
132901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
133001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
133101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
133201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(16);
133301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "12345678900000ABCDEF123450000");
133401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(0, Bignum::PlusCompare(a, b, c));
133501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
133601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
133701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
133801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12344");
133901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(16);
134001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "12345678900000ABCDEF123450000");
134101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
134201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
134301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
134401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
134501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12345");
134601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(16);
134701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "12345678900000ABCDEF123450001");
134801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(-1, Bignum::PlusCompare(a, b, c));
134901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
135001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&a, "1234567890");
135101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  a.ShiftLeft(11*4 + 32);
135201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&b, "ABCDEF12346");
135301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  b.ShiftLeft(16);
135401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&c, "12345678900000ABCDEF123450000");
135501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ(+1, Bignum::PlusCompare(a, b, c));
135601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
135701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
135801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
135901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(Square) {
136001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
136101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
136201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
136301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(1);
136401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.Square();
136501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
136601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
136701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
136801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(2);
136901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.Square();
137001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
137101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("4", buffer);
137201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
137301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignUInt16(10);
137401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.Square();
137501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
137601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("64", buffer);
137701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
137801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFF");
137901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.Square();
138001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
138101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFE0000001", buffer);
138201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
138301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  AssignHexString(&bignum, "FFFFFFFFFFFFFF");
138401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.Square();
138501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
138601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FFFFFFFFFFFFFE00000000000001", buffer);
138701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
138801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
138901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
139001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgTEST(AssignPowerUInt16) {
139101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  Bignum bignum;
139201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  char buffer[kBufferSize];
139301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
139401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(1, 0);
139501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
139601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
139701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
139801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(1, 1);
139901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
140001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
140101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
140201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(1, 2);
140301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
140401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
140501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
140601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(2, 0);
140701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
140801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
140901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
141001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(2, 1);
141101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
141201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2", buffer);
141301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
141401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(2, 2);
141501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
141601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("4", buffer);
141701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
141801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 1);
141901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
142001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10", buffer);
142101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
142201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 2);
142301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
142401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100", buffer);
142501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
142601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 5);
142701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
142801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000", buffer);
142901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
143001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 8);
143101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
143201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("100000000", buffer);
143301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
143401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 16);
143501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
143601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000", buffer);
143701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
143801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(16, 30);
143901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
144001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1000000000000000000000000000000", buffer);
144101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
144201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 0);
144301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
144401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
144501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
144601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 1);
144701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
144801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("A", buffer);
144901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
145001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 2);
145101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
145201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("64", buffer);
145301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
145401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 5);
145501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
145601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("186A0", buffer);
145701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
145801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 8);
145901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
146001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("5F5E100", buffer);
146101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
146201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 16);
146301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
146401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("2386F26FC10000", buffer);
146501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
146601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 30);
146701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
146801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("C9F2C9CD04674EDEA40000000", buffer);
146901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
147001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(10, 31);
147101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
147201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("7E37BE2022C0914B2680000000", buffer);
147301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
147401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(2, 0);
147501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
147601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
147701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
147801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(2, 100);
147901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
148001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("10000000000000000000000000", buffer);
148101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
148201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(17, 0);
148301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
148401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1", buffer);
148501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
148601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(17, 99);
148701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
148801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("1942BB9853FAD924A3D4DD92B89B940E0207BEF05DB9C26BC1B757"
148901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "80BE0C5A2C2990E02A681224F34ED68558CE4C6E33760931",
149001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           buffer);
149101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org
149201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  bignum.AssignPowerUInt16(0xFFFF, 99);
149301fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK(bignum.ToHexString(buffer, kBufferSize));
149401fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org  CHECK_EQ("FF9D12F09B886C54E77E7439C7D2DED2D34F669654C0C2B6B8C288250"
149501fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "5A2211D0E3DC9A61831349EAE674B11D56E3049D7BD79DAAD6C9FA2BA"
149601fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "528E3A794299F2EE9146A324DAFE3E88967A0358233B543E233E575B9"
149701fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "DD4E3AA7942146426C328FF55BFD5C45E0901B1629260AF9AE2F310C5"
149801fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "50959FAF305C30116D537D80CF6EBDBC15C5694062AF1AC3D956D0A41"
149901fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "B7E1B79FF11E21D83387A1CE1F5882B31E4B5D8DE415BDBE6854466DF"
150001fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           "343362267A7E8833119D31D02E18DB5B0E8F6A64B0ED0D0062FFFF",
150101fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org           buffer);
150201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.org}
1503