diff --git a/src/basic_operations.h b/src/basic_operations.h index a4a4e63..8028a5b 100644 --- a/src/basic_operations.h +++ b/src/basic_operations.h @@ -13,6 +13,7 @@ double logarithm(double num, double base) { + assert(num > 0 && base > 0 && base != 1); double result = log(num) / log(base); return result; } diff --git a/src/combinatorics.h b/src/combinatorics.h index 34e848c..77be3ea 100644 --- a/src/combinatorics.h +++ b/src/combinatorics.h @@ -51,7 +51,7 @@ long long cyclePermutation(int num) long long arrangement(int total, int selected) { long long result; - assert(total > 0 && selected >= 0); + assert(total > 0 && selected >= 0 && selected <= total); result = factorial(total) / factorial(total - selected); return result; } @@ -113,7 +113,7 @@ double cyclePermutationlf(int num) double arrangementlf(int total, int selected) { double result; - assert(total > 0 && selected >= 0); + assert(total > 0 && selected >= 0 && selected <= total); result = factoriallf(total) / factoriallf(total - selected); return result; } diff --git a/src/probability_distribution.h b/src/probability_distribution.h index b7e061d..ffdad07 100644 --- a/src/probability_distribution.h +++ b/src/probability_distribution.h @@ -22,7 +22,8 @@ double binominal(int trials, double successProb, int success) { double result; - assert(trials > 0 && success >= 0 && successProb >= 0 && successProb <= 1); + assert(trials > 0 && success >= 0 && success <= trials && + successProb >= 0 && successProb <= 1); result = combinationlf(trials, success) * pow(successProb, success) * pow((1 - successProb), (trials - success)); @@ -39,6 +40,7 @@ double binominal(int trials, double successProb, int success) double poisson(double lambda, unsigned x) { double result; + assert(lambda >= 0); result = exp(-lambda) * pow(lambda, x) / factoriallf(x); return result; } diff --git a/src/test/main.c b/src/test/main.c index 73e5207..7b84bf6 100644 --- a/src/test/main.c +++ b/src/test/main.c @@ -259,6 +259,10 @@ int main() test(189, round(radians2degrees(convexPolygonSumInteriorAngles(3))) == 180); test(190, round(radians2degrees(regularPolygonInteriorAngle(3))) == 60); test(191, round(radians2degrees(convexPolygonExteriorAngle(3))) == 120); + test(192, arrangement(7, 0) == 1); + test(193, arrangementlf(7, 0) == 1); + test(194, roundTo(sideTriangleLC(5, 7, degrees2radians(179)), 5) == 11.99956); + test(195, roundTo(logarithm(1000, 10), 6) == 3); puts("Passed all tests successfully!"); diff --git a/src/trigonometry.h b/src/trigonometry.h index a7558ef..badf8ed 100644 --- a/src/trigonometry.h +++ b/src/trigonometry.h @@ -45,7 +45,7 @@ double sideRightTriangle(double hypotenuse, double sideA) double sideTriangleLC(double sideA, double sideB, double oppositeAngle) { double result; - assert(sideA > 0 && sideB > 0 && oppositeAngle > 0); + assert(sideA > 0 && sideB > 0 && oppositeAngle > 0 && oppositeAngle < M_PI); result = sqrt(pow(sideA, 2) + pow(sideB, 2) - (2 * sideA * sideB * cos(oppositeAngle))); return result; } @@ -61,7 +61,8 @@ double sideTriangleLC(double sideA, double sideB, double oppositeAngle) double angleTriangleLC(double oppositeSide, double sideA, double sideB) { double result; - assert(sideA > 0 && sideB > 0 && oppositeSide > 0); + assert(sideA > 0 && sideB > 0 && oppositeSide > 0 && + oppositeSide < sideA + sideB && oppositeSide > fabs(sideA - sideB)); result = acos((pow(sideA, 2) + pow(sideB, 2) - pow(oppositeSide, 2)) / (2 * sideA * sideB)); return result; } @@ -77,7 +78,8 @@ double angleTriangleLC(double oppositeSide, double sideA, double sideB) double sideTriangleLS(double oppositeAngle, double sideA, double oppositeAngle2A) { double result; - assert(sideA > 0 && oppositeAngle > 0 && oppositeAngle2A > 0); + assert(sideA > 0 && oppositeAngle > 0 && oppositeAngle < M_PI && + oppositeAngle2A > 0 && oppositeAngle2A < M_PI); result = sideA / sin(oppositeAngle2A) * sin(oppositeAngle); return result; } @@ -93,7 +95,8 @@ double sideTriangleLS(double oppositeAngle, double sideA, double oppositeAngle2A double angleTriangleLS(double oppositeSide, double sideA, double oppositeAngle2A) { double result; - assert(oppositeSide > 0 && sideA > 0 && oppositeAngle2A > 0); + assert(oppositeSide > 0 && sideA > 0 && oppositeAngle2A > 0 && oppositeAngle2A < M_PI && + oppositeSide <= sideA / sin(oppositeAngle2A)); result = asin(oppositeSide / (sideA / sin(oppositeAngle2A))); return result; }