Skip to content

Commit 353b544

Browse files
authored
feat(stdlib): Add asin, acos, atan, isClose to Number module (#1699)
1 parent 53f770c commit 353b544

File tree

3 files changed

+580
-0
lines changed

3 files changed

+580
-0
lines changed

compiler/test/stdlib/number.test.gr

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,34 @@ assert Number.isInfinite(1/2) == false
386386
assert Number.isInfinite(-1/2) == false
387387
assert Number.isInfinite(BI.toNumber(-1t)) == false
388388

389+
// Number.isClose
390+
assert Number.isClose(1.0, 1.0)
391+
assert Number.isClose(1.0, 1.0, relativeTolerance=0.5, absoluteTolerance=0.5)
392+
assert Number.isClose(1.0, 1.0, relativeTolerance=0, absoluteTolerance=0)
393+
assert Number.isClose(0.0, 0.0)
394+
assert Number.isClose(0.0, 0.0, relativeTolerance=0.5, absoluteTolerance=0.5)
395+
assert Number.isClose(0.0, 0.0, relativeTolerance=0, absoluteTolerance=0)
396+
assert Number.isClose(1, 1)
397+
assert Number.isClose(1, 1, relativeTolerance=0.5, absoluteTolerance=0.5)
398+
assert Number.isClose(1, 1, relativeTolerance=0, absoluteTolerance=0)
399+
assert Number.isClose(1/2, 1/2)
400+
assert Number.isClose(1/2, 1/2, relativeTolerance=0.5, absoluteTolerance=0.5)
401+
assert Number.isClose(1/2, 1/2, relativeTolerance=0, absoluteTolerance=0)
402+
assert Number.isClose(0, 0.1) == false
403+
assert Number.isClose(0, 0.000000001) == false
404+
assert Number.isClose(0, 0.00000001, absoluteTolerance=1e-9) == false
405+
assert Number.isClose(0, 0.000000001, absoluteTolerance=1e-9)
406+
assert Number.isClose(-0, 0.000000001) == false
407+
assert Number.isClose(-0, 0.00000001, absoluteTolerance=1e-9) == false
408+
assert Number.isClose(-0, 0.000000001, absoluteTolerance=1e-9)
409+
assert Number.isClose(1.1, 1.10000001, absoluteTolerance=1e-9) == false
410+
assert Number.isClose(1.1, 1.100000001, absoluteTolerance=1e-9)
411+
assert Number.isClose(Infinity, Infinity)
412+
assert Number.isClose(-Infinity, -Infinity)
413+
assert Number.isClose(Infinity, -Infinity) == false
414+
assert Number.isClose(NaN, NaN) == false
415+
assert Number.isClose(Infinity, 99999999999999999) == false
416+
389417
// parseFloat
390418
// tests taken from Go's /src/strconv/atof_test.go
391419
assert Number.parseFloat("") == Err("Invalid string")
@@ -658,6 +686,163 @@ assert Number.isNaN(Number.tan(9223372036854775809))
658686
assert Number.isNaN(Number.tan(Infinity))
659687
assert Number.isNaN(Number.tan(NaN))
660688

689+
// Number.asin
690+
assert Number.isNaN(Number.asin(-8.06684839057968084))
691+
assert Number.isNaN(Number.asin(-1.1))
692+
assert Number.isNaN(Number.asin(4.06684839057968084))
693+
assert Number.isNaN(Number.asin(1.1))
694+
assert Number.isNaN(Number.asin(15/10))
695+
assert Number.isNaN(Number.asin(-15/10))
696+
assert Number.isClose(
697+
Number.asin(0.661985898099504477),
698+
0.723465243951545878,
699+
relativeTolerance=1e-9
700+
)
701+
assert Number.isClose(
702+
Number.asin(0.56175974622072411),
703+
0.596511362227406194,
704+
relativeTolerance=1e-9
705+
)
706+
assert Number.isClose(
707+
Number.asin(-0.40660392238535531),
708+
-0.418733744293772248,
709+
relativeTolerance=1e-9
710+
)
711+
assert Number.isClose(Number.asin(1/2), Number.pi / 6, relativeTolerance=1e-9)
712+
assert Number.isClose(
713+
Number.asin(0.77415229659130369),
714+
0.885374810931274348,
715+
relativeTolerance=1e-9
716+
)
717+
assert Number.isClose(
718+
Number.asin(-0.678763702639402444),
719+
-0.746077811411067326,
720+
relativeTolerance=1e-9
721+
)
722+
assert Number.isClose(
723+
Number.asin(1.0),
724+
1.57079632679489656,
725+
relativeTolerance=1e-9
726+
)
727+
assert Number.isClose(
728+
Number.asin(1),
729+
1.57079632679489656,
730+
relativeTolerance=1e-9
731+
)
732+
assert Number.isClose(
733+
Number.asin(-1.0),
734+
-1.57079632679489656,
735+
relativeTolerance=1e-9
736+
)
737+
assert Number.isClose(
738+
Number.asin(-1),
739+
-1.57079632679489656,
740+
relativeTolerance=1e-9
741+
)
742+
assert Number.asin(0) == 0.0
743+
assert Number.asin(0.0) == 0.0
744+
assert Number.asin(-0.0) == -0.0
745+
assert Number.isNaN(Number.asin(1.00000000000000022))
746+
assert Number.isNaN(Number.asin(-1.00000000000000022))
747+
assert Number.isNaN(Number.asin(Infinity))
748+
assert Number.isNaN(Number.asin(-Infinity))
749+
assert Number.isNaN(Number.asin(NaN))
750+
751+
// Number.acos
752+
assert Number.isNaN(Number.acos(-8.06684839057968084))
753+
assert Number.isNaN(Number.acos(-1.1))
754+
assert Number.isNaN(Number.acos(4.06684839057968084))
755+
assert Number.isNaN(Number.acos(1.1))
756+
assert Number.isNaN(Number.acos(15/10))
757+
assert Number.isNaN(Number.acos(-15/10))
758+
assert Number.isClose(
759+
Number.acos(0.661985898099504477),
760+
0.84733108284335068,
761+
relativeTolerance=1e-9
762+
)
763+
assert Number.isClose(
764+
Number.acos(0.56175974622072411),
765+
0.974284964567490364,
766+
relativeTolerance=1e-9
767+
)
768+
assert Number.isClose(
769+
Number.acos(-0.40660392238535531),
770+
1.98953007108866897,
771+
relativeTolerance=1e-9
772+
)
773+
assert Number.isClose(Number.acos(1/2), Number.pi / 3, relativeTolerance=1e-9)
774+
assert Number.isClose(
775+
Number.acos(0.77415229659130369),
776+
0.68542151586362221,
777+
relativeTolerance=1e-9
778+
)
779+
assert Number.isClose(
780+
Number.acos(-0.678763702639402444),
781+
2.31687413820596388,
782+
relativeTolerance=1e-9
783+
)
784+
assert Number.isClose(Number.acos(-1.0), Number.pi, relativeTolerance=1e-9)
785+
assert Number.isClose(Number.acos(-1), Number.pi, relativeTolerance=1e-9)
786+
assert Number.isClose(Number.acos(0.0), Number.pi / 2, relativeTolerance=1e-9)
787+
assert Number.isClose(Number.acos(0), Number.pi / 2, relativeTolerance=1e-9)
788+
assert Number.acos(1) == 0.0
789+
assert Number.acos(1.0) == 0.0
790+
assert Number.isNaN(Number.acos(1.00000000000000022))
791+
assert Number.isNaN(Number.acos(-1.00000000000000022))
792+
assert Number.isNaN(Number.acos(Infinity))
793+
assert Number.isNaN(Number.acos(-Infinity))
794+
assert Number.isNaN(Number.acos(NaN))
795+
796+
// Number.atan
797+
assert Number.isClose(
798+
Number.atan(0.661985898099504477),
799+
0.584755067023832509,
800+
relativeTolerance=1e-9
801+
)
802+
assert Number.isClose(
803+
Number.atan(0.56175974622072411),
804+
0.511826953162888065,
805+
relativeTolerance=1e-9
806+
)
807+
assert Number.isClose(
808+
Number.atan(-0.40660392238535531),
809+
-0.386186417755213118,
810+
relativeTolerance=1e-9
811+
)
812+
assert Number.isClose(
813+
Number.atan(1/2),
814+
0.4636476090008061,
815+
relativeTolerance=1e-9
816+
)
817+
assert Number.isClose(
818+
Number.atan(0.77415229659130369),
819+
0.658780243165382196,
820+
relativeTolerance=1e-9
821+
)
822+
assert Number.isClose(
823+
Number.atan(-0.678763702639402444),
824+
-0.596330782697347184,
825+
relativeTolerance=1e-9
826+
)
827+
assert Number.isClose(Number.atan(1.0), Number.pi / 4, relativeTolerance=1e-9)
828+
assert Number.isClose(Number.atan(1), Number.pi / 4, relativeTolerance=1e-9)
829+
assert Number.isClose(Number.atan(-1.0), Number.pi / -4, relativeTolerance=1e-9)
830+
assert Number.isClose(Number.atan(-1), Number.pi / -4, relativeTolerance=1e-9)
831+
assert Number.atan(0) == 0.0
832+
assert Number.atan(0.0) == 0.0
833+
assert Number.atan(-0.0) == -0.0
834+
assert Number.isClose(
835+
Number.atan(Infinity),
836+
Number.pi / 2,
837+
relativeTolerance=1e-9
838+
)
839+
assert Number.isClose(
840+
Number.atan(-Infinity),
841+
Number.pi / -2,
842+
relativeTolerance=1e-9
843+
)
844+
assert Number.isNaN(Number.atan(NaN))
845+
661846
// Number.gamma
662847
// Note: Currently gamma will overflow the memory when using a bigint as such there are no tests for this
663848
assert Number.gamma(10.5) < 1133278.3889488 &&

0 commit comments

Comments
 (0)