mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-01-31 16:57:55 +00:00
475 lines
9.3 KiB
Nix
475 lines
9.3 KiB
Nix
# Being a math library implementation, we should be careful of making tests
|
|
# here to be consistent with the other math libraries. All of the answers here
|
|
# should be sourced from another tool such as a calculator.
|
|
#
|
|
# For future references, the initial maintainer (foodogsquared) basically used
|
|
# GNOME Calculator which uses libmath.
|
|
{ pkgs, lib, self }:
|
|
|
|
let
|
|
# The typical rounding procedure for our results. 10 decimal places should be
|
|
# enough to test accuracy at least for a basic math subset like this.
|
|
round' = self.math.round' (-10);
|
|
in
|
|
lib.runTests {
|
|
testMathIsOdd = {
|
|
expr = self.math.isOdd 45;
|
|
expected = true;
|
|
};
|
|
|
|
testMathIsOdd2 = {
|
|
expr = self.math.isOdd 10;
|
|
expected = false;
|
|
};
|
|
|
|
testMathIsEven = {
|
|
expr = self.math.isEven 45;
|
|
expected = false;
|
|
};
|
|
|
|
testMathIsEven2 = {
|
|
expr = self.math.isEven 10;
|
|
expected = true;
|
|
};
|
|
|
|
testMathPowPositive = {
|
|
expr = self.math.pow 2 8;
|
|
expected = 256;
|
|
};
|
|
|
|
testMathPowNegative = {
|
|
expr = self.math.pow 2.0 (-1);
|
|
expected = 0.5;
|
|
};
|
|
|
|
testMathPowZero = {
|
|
expr = self.math.pow 31 0;
|
|
expected = 1;
|
|
};
|
|
|
|
testsMathPowWithFloat = {
|
|
expr = self.math.pow 2 7.0;
|
|
expected = 128.0;
|
|
};
|
|
|
|
testMathAbsoluteValue = {
|
|
expr = self.math.abs 5493;
|
|
expected = 5493;
|
|
};
|
|
|
|
testMathAbsoluteValue2 = {
|
|
expr = self.math.abs (-435354);
|
|
expected = 435354;
|
|
};
|
|
|
|
testMathPercentage = {
|
|
expr = self.math.percentage 50 100;
|
|
expected = 50;
|
|
};
|
|
|
|
testMathPercentage2 = {
|
|
expr = self.math.percentage 13 453;
|
|
expected = 58.89;
|
|
};
|
|
|
|
testMathPercentageNegative = {
|
|
expr = self.math.percentage (-20) 500;
|
|
expected = -100;
|
|
};
|
|
|
|
testMathPercentageNegative2 = {
|
|
expr = self.math.percentage (-64) 843;
|
|
expected = -539.52;
|
|
};
|
|
|
|
testMathPercentageZero = {
|
|
expr = self.math.percentage 0 45723;
|
|
expected = 0;
|
|
};
|
|
|
|
testMathPercentageZero2 = {
|
|
expr = self.math.percentage 0 (-3423);
|
|
expected = 0;
|
|
};
|
|
|
|
testMathGrow = {
|
|
expr = self.math.grow 500 12;
|
|
expected = 72;
|
|
};
|
|
|
|
testMathGrow2 = {
|
|
expr = self.math.grow 55.5 5.5;
|
|
expected = 8.5525;
|
|
};
|
|
|
|
testMathGrowVariantMax = {
|
|
expr = self.math.grow' 0 255 130 100;
|
|
expected = 255;
|
|
};
|
|
|
|
testMathGrowVariantMin = {
|
|
expr = self.math.grow' 0 255 130 (-500);
|
|
expected = 0;
|
|
};
|
|
|
|
testMathFloor = {
|
|
expr = self.math.floor 3.467;
|
|
expected = 3;
|
|
};
|
|
|
|
testMathFloor2 = {
|
|
expr = self.math.floor 3.796;
|
|
expected = 3;
|
|
};
|
|
|
|
testMathCeil = {
|
|
expr = self.math.ceil 3.469;
|
|
expected = 4;
|
|
};
|
|
|
|
testMathCeil2 = {
|
|
expr = self.math.ceil 3.796;
|
|
expected = 4;
|
|
};
|
|
|
|
testMathRoundDown = {
|
|
expr = self.math.round 2.3;
|
|
expected = 2;
|
|
};
|
|
|
|
testMathRoundUp = {
|
|
expr = self.math.round 2.8;
|
|
expected = 3;
|
|
};
|
|
|
|
testMathRoundOnes = {
|
|
expr = self.math.round' 0 5.65;
|
|
expected = 6;
|
|
};
|
|
|
|
testMathRoundTens = {
|
|
expr = self.math.round' 1 5.65;
|
|
expected = 10;
|
|
};
|
|
|
|
testMathRoundHundreds = {
|
|
expr = self.math.round' 2 5.65;
|
|
expected = 0;
|
|
};
|
|
|
|
testMathRoundTenth = {
|
|
expr = self.math.round' (-1) 5.65;
|
|
expected = 5.7;
|
|
};
|
|
|
|
testMathRoundHundredth = {
|
|
expr = self.math.round' (-2) 5.655;
|
|
expected = 5.66;
|
|
};
|
|
|
|
testMathWithinRange = {
|
|
expr = self.math.isWithinRange (-100) 100 50;
|
|
expected = true;
|
|
};
|
|
|
|
testMathWithinRange2 = {
|
|
expr = self.math.isWithinRange 5 10 (-5);
|
|
expected = false;
|
|
};
|
|
|
|
testMathWithinRangeExclusive = {
|
|
expr = self.math.isWithinRange' 5 10 (-5);
|
|
expected = false;
|
|
};
|
|
|
|
testMathWithinRangeExclusive2 = {
|
|
expr = self.math.isWithinRange' 5 10 10;
|
|
expected = false;
|
|
};
|
|
|
|
testMathWithinRangeExclusive3 = {
|
|
expr = self.math.isWithinRange' (-100) 100 750;
|
|
expected = false;
|
|
};
|
|
|
|
testMathFactorial = {
|
|
expr = self.math.factorial 3;
|
|
expected = 6;
|
|
};
|
|
|
|
testMathFactorial2 = {
|
|
expr = self.math.factorial 10;
|
|
expected = 3628800;
|
|
};
|
|
|
|
testMathFactorialZero = {
|
|
expr = self.math.factorial 0;
|
|
expected = 1;
|
|
};
|
|
|
|
testMathSummate = {
|
|
expr = self.math.summate [ 1 2 3 4 ];
|
|
expected = 10;
|
|
};
|
|
|
|
testMathSummate2 = {
|
|
expr = self.math.summate [ 1 2 3 4.5 5.6 6.7 ];
|
|
expected = 22.8;
|
|
};
|
|
|
|
testMathProduct = {
|
|
expr = self.math.product [ 1 2 3 4 ];
|
|
expected = 24;
|
|
};
|
|
|
|
testMathProduct2 = {
|
|
expr = self.math.product [ 1.5 2 3 4.6 ];
|
|
expected = 41.4;
|
|
};
|
|
|
|
testMathSqrt = {
|
|
expr = round' (self.math.sqrt 4);
|
|
expected = 2;
|
|
};
|
|
|
|
testMathSqrt2 = {
|
|
expr = self.math.sqrt 169;
|
|
expected = 13;
|
|
};
|
|
|
|
testMathSqrt3 = {
|
|
expr = round' (self.math.sqrt 12);
|
|
expected = 3.4641016151;
|
|
};
|
|
|
|
testMathSqrt4 = {
|
|
expr = round' (self.math.sqrt 2);
|
|
expected = 1.4142135624;
|
|
};
|
|
|
|
testMathMod = {
|
|
expr = self.math.mod 5 4;
|
|
expected = 1;
|
|
};
|
|
|
|
testMathMod2 = {
|
|
expr = self.math.mod 1245 4.5;
|
|
expected = 3;
|
|
};
|
|
|
|
testMathModPositiveOperands = {
|
|
expr = self.math.mod 19 12;
|
|
expected = 7;
|
|
};
|
|
|
|
testMathModNegativeDividend = {
|
|
expr = self.math.mod (-19) 12;
|
|
expected = 5;
|
|
};
|
|
|
|
testMathModNegativeDivisor = {
|
|
expr = self.math.mod 19 (-12);
|
|
expected = -5;
|
|
};
|
|
|
|
testMathModNegativeOperands = {
|
|
expr = self.math.mod (-19) (-12);
|
|
expected = -7;
|
|
};
|
|
|
|
testMathRemainder = {
|
|
expr = self.math.remainder 65.5 3;
|
|
expected = 2.5;
|
|
};
|
|
|
|
testMathRemainder2 = {
|
|
expr = self.math.remainder 1.5 3;
|
|
expected = 1.5;
|
|
};
|
|
|
|
testMathRemainder3 = {
|
|
expr = self.math.remainder 4.25 2;
|
|
expected = 0.25;
|
|
};
|
|
|
|
testMathRemainder4 = {
|
|
expr = self.math.remainder 6 6;
|
|
expected = 0;
|
|
};
|
|
|
|
testMathRemainder5 = {
|
|
expr = self.math.remainder 6.5 6;
|
|
expected = 0.5;
|
|
};
|
|
|
|
testMathRemainder6 = {
|
|
expr = self.math.remainder 7856.5 20;
|
|
expected = 16.5;
|
|
};
|
|
|
|
# Computers and their quirky floating-values implementations...
|
|
testMathRemainder7 = {
|
|
expr = self.math.remainder 7568639.2 45633;
|
|
expected = 39194.200000000186;
|
|
};
|
|
|
|
testMathRemainder8 = {
|
|
expr = self.math.remainder 567.5 3.5;
|
|
expected = 0.5;
|
|
};
|
|
|
|
testMathRemainderPositiveOperands = {
|
|
expr = self.math.remainder 54.5 20.5;
|
|
expected = 13.5;
|
|
};
|
|
|
|
testMathRemainderNegativeDividend = {
|
|
expr = self.math.remainder (-54.5) 20.5;
|
|
expected = 7;
|
|
};
|
|
|
|
testMathRemainderNegativeDivisor = {
|
|
expr = self.math.remainder 54.5 (-20.5);
|
|
expected = -7;
|
|
};
|
|
|
|
testMathRemainderNegativeOperands = {
|
|
expr = self.math.remainder (-54.5) (-20.5);
|
|
expected = -13.5;
|
|
};
|
|
|
|
testMathExp = {
|
|
expr = self.math.exp 1;
|
|
expected = 2.7182818284590452353602874713527;
|
|
};
|
|
|
|
testMathExp2 = {
|
|
expr = self.math.exp (-1);
|
|
expected = 0.36787944117144233;
|
|
};
|
|
|
|
testMathExp3 = {
|
|
expr = round' (self.math.exp 2);
|
|
expected = 7.3890560989;
|
|
};
|
|
|
|
testDegreesToRadians = {
|
|
expr = self.math.degreesToRadians 180;
|
|
expected = self.math.constants.pi;
|
|
};
|
|
|
|
testDegreesToRadians2 = {
|
|
expr = self.math.degreesToRadians 360;
|
|
expected = self.math.constants.pi * 2;
|
|
};
|
|
|
|
testDegreesToRadians3 = {
|
|
expr = self.math.round' (-5) (self.math.degreesToRadians 95);
|
|
expected = 1.65806;
|
|
};
|
|
|
|
testRadiansToDegrees = {
|
|
expr = self.math.radiansToDegrees self.math.constants.pi;
|
|
expected = 180;
|
|
};
|
|
|
|
testRadiansToDegrees2 = {
|
|
expr = self.math.round' (-3) (self.math.radiansToDegrees 180);
|
|
expected = 10313.24;
|
|
};
|
|
|
|
testRadiansToDegrees3 = {
|
|
expr = self.math.round' (-3) (self.math.radiansToDegrees 4.5);
|
|
expected = 257.831;
|
|
};
|
|
|
|
# At this point, most of the things are just adjusting to the quirks of those
|
|
# accursed floating-values.
|
|
testMathSine = {
|
|
expr = round' (self.math.sin 10);
|
|
expected = round' (-0.5440211108893698);
|
|
};
|
|
|
|
testMathSine2 = {
|
|
expr = self.math.sin 0;
|
|
expected = 0;
|
|
};
|
|
|
|
testMathSine3 = let
|
|
round' = self.math.round' (-5);
|
|
in {
|
|
expr = round' (self.math.sin (self.math.constants.pi / 2));
|
|
expected = round' 1;
|
|
};
|
|
|
|
testMathSine4 = {
|
|
expr = round' (self.math.sin 360);
|
|
expected = round' 0.9589157234143065;
|
|
};
|
|
|
|
testMathSine5 = {
|
|
expr = round' (self.math.sin 152);
|
|
expected = round' 0.933320523748862;
|
|
};
|
|
|
|
testMathSine6 = {
|
|
expr = round' (self.math.sin (-152));
|
|
expected = round' (-0.933320523748862);
|
|
};
|
|
|
|
testMathCosine = {
|
|
expr = round' (self.math.cos 10);
|
|
expected = round' (-0.8390715290764524);
|
|
};
|
|
|
|
testMathCosine2 = {
|
|
expr = round' (self.math.cos 0);
|
|
expected = 1;
|
|
};
|
|
|
|
testMathCosine3 = {
|
|
expr = round' (self.math.cos self.math.constants.pi);
|
|
expected = -1;
|
|
};
|
|
|
|
testMathCosine4 = {
|
|
expr = round' (self.math.cos (self.math.constants.pi * 2));
|
|
expected = 1;
|
|
};
|
|
|
|
testMathCosine5 = {
|
|
expr = round' (self.math.cos 1);
|
|
expected = round' 0.5403023058681398;
|
|
};
|
|
|
|
testMathCosine6 = {
|
|
expr = round' (self.math.cos 152);
|
|
expected = round' 0.35904428689111606;
|
|
};
|
|
|
|
testMathTangent = {
|
|
expr = round' (self.math.tan 10);
|
|
expected = round' 0.6483608274590866;
|
|
};
|
|
|
|
testMathTangent2 = {
|
|
expr = round' (self.math.tan 0);
|
|
expected = 0;
|
|
};
|
|
|
|
testMathTangent3 = {
|
|
expr = round' (self.math.tan (self.math.constants.pi / 4));
|
|
expected = round' (0.99999999999999999);
|
|
};
|
|
|
|
testMathTangent4 = {
|
|
expr = round' (self.math.tan 152);
|
|
expected = round' 2.5994579438382797;
|
|
};
|
|
|
|
testMathTangent5 = {
|
|
expr = round' (self.math.tan (-152));
|
|
expected = round' (-2.5994579438382797);
|
|
};
|
|
}
|