public void TestSqrt()
{
BigInteger bi;
int val, sqrtVal;
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
val = rand.Next();
bi = new BigInteger(val);
sqrtVal = (int)Math.Floor(Math.Sqrt(val));
Assert.AreEqual(sqrtVal, bi.sqrt());
}
bi = new BigInteger();
Assert.AreEqual(0, bi.sqrt());
bi = new BigInteger("48234798239584935745984795837", 10);
Assert.AreEqual(219624220521291, bi.sqrt());
bi = new BigInteger("4823479823958493574598479580945895480904590958034958034580948509485094850934095809458408509485094850948509803459834037", 10);
Assert.AreEqual("69451276618637425696010359184467375646677653070095660334837", bi.sqrt().ToString());
bi = new BigInteger("902380594730957598498379487239749823749832749823749823759823759823649623984623974627682368236423764823649823749823749823794872398472398479238479382749823794823794823749823794823794872398479238479823749823749823749823749823749823740239480293840923804923804923809482304982", 10);
Assert.AreEqual("949937153042746085485800690340716910200218535446376464883006159759187016711766033117259286191698487700345112712284215083646265481183724", bi.sqrt().ToString());
}