public class BabylonianSqrtTests
public void TestPositiveNumber()
Assert.That(BabylonianSqrt.Sqrt(9), Is.EqualTo(3).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(25), Is.EqualTo(5).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(2), Is.EqualTo(1.4142).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(10), Is.EqualTo(3.1622).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(0), Is.EqualTo(0).Within(0.0001));
public void TestSmallNumber()
Assert.That(BabylonianSqrt.Sqrt(0.01), Is.EqualTo(0.1).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(0.04), Is.EqualTo(0.2).Within(0.0001));
public void TestLargeNumber()
Assert.That(BabylonianSqrt.Sqrt(10000), Is.EqualTo(100).Within(0.0001));
Assert.That(BabylonianSqrt.Sqrt(1000000), Is.EqualTo(1000).Within(0.0001));
public void TestNegativeNumberThrowsException()
Assert.Throws<ArgumentException>(() => BabylonianSqrt.Sqrt(-1));
public class BabylonianSqrt
public static double Sqrt(double number, double tolerance = 0.0001)
throw new ArgumentException("Cannot calculate square root of a negative number.");
double guess = number / 2;
nextGuess = (guess + number / guess) / 2;
if(Math.Abs(guess - nextGuess) < tolerance)
public static void Main(string[] args)
Console.WriteLine("-------------- STARTING UNIT TESTING ---------------");
new NUnitLite.AutoRun().Execute(["--noc" ]);