private TestTriangleData GetSquareTriangle(IComputeAreaMethod method) { var a = 10d; var b = 10d; var c = Math.Sqrt(a * a + b * b); return(new TestTriangleData { Triangle = new Triangle(a, b, c, method), AreaValue = (a * b) / 2 }); }
// I'm not considering different types of defining triangle here (like, by side and 2 angles, etc) public Triangle(double a, double b, double c, IComputeAreaMethod computeAreaMethod) { _a = a; _b = b; _c = c; // For simplicity, there is no means to change method afterwards if (computeAreaMethod == null) { throw new ArgumentNullException("computeAreaMethod"); } if (_a < 0 || _b < 0 || _c < 0) { throw new ArgumentOutOfRangeException("Triangle sides cannot be lesser than 0"); } if (!TriangleExists()) { throw new ArgumentException($"Triangle with sides {a}, {b}, {c} cannot exist"); } _computeAreaMethod = computeAreaMethod; }