function QuadrilateralTests(epsilon) { var methods = []; methods.push({name: "area", args: [""]}); methods.push({name: "circumference", args: [""]}); methods.push({name: "side", args: [0,1,2,3]}); methods.push({name: "angle", args: [0,1,2,3]}); var difference; function closeEnough(a, b) { difference = Math.abs(a-b); return difference < epsilon; } function test(f) { var q = f(); for (var i=0; i < methods.length; i++) { var name = methods[i].name; var args = methods[i].args; for (var j=0; j < args.length; j++) { var arg = args[j]; if (!closeEnough(q[name](arg), f[name+arg])) { var errorMessage = "TEST FAILED: " + f.name + "." + name; console.log(errorMessage); console.log("Expected: " + f[name+arg]); console.log("Actual: " + q[name](arg)); console.log("Difference: " + difference); console.log("Epsilon: " + epsilon); throw new Error(errorMessage); } } } } function isoscelesTrapezoid() { return new Quadrilateral(1, Math.sqrt(2), 3, 135, 45); } isoscelesTrapezoid.area = 2; isoscelesTrapezoid.circumference = 6.82842712474619; isoscelesTrapezoid.side0 = 1; isoscelesTrapezoid.side1 = Math.sqrt(2); isoscelesTrapezoid.side2 = 3; isoscelesTrapezoid.side3 = Math.sqrt(2); isoscelesTrapezoid.angle0 = 135; isoscelesTrapezoid.angle1 = 135; isoscelesTrapezoid.angle2 = 45; isoscelesTrapezoid.angle3 = 45; function unitSquare() { return new Quadrilateral(1, 1, 1, 90, 90); } unitSquare.area = 1; unitSquare.circumference = 4; unitSquare.side0 = 1; unitSquare.side1 = 1; unitSquare.side2 = 1; unitSquare.side3 = 1; unitSquare.angle0 = 90; unitSquare.angle1 = 90; unitSquare.angle2 = 90; unitSquare.angle3 = 90; test(unitSquare); test(isoscelesTrapezoid); } QuadrilateralTests(1e-13);