aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
Diffstat (limited to 'testes')
-rw-r--r--testes/math.lua66
1 files changed, 65 insertions, 1 deletions
diff --git a/testes/math.lua b/testes/math.lua
index 853dc20f..b387977e 100644
--- a/testes/math.lua
+++ b/testes/math.lua
@@ -1,4 +1,4 @@
1-- $Id: testes/math.lua $ 1-- $Id: testes/math.lua 2018-07-25 15:31:04 -0300 $
2-- See Copyright Notice in file all.lua 2-- See Copyright Notice in file all.lua
3 3
4print("testing numbers and math lib") 4print("testing numbers and math lib")
@@ -541,9 +541,73 @@ assert(eqT(-4 % 3, 2))
541assert(eqT(4 % -3, -2)) 541assert(eqT(4 % -3, -2))
542assert(eqT(-4.0 % 3, 2.0)) 542assert(eqT(-4.0 % 3, 2.0))
543assert(eqT(4 % -3.0, -2.0)) 543assert(eqT(4 % -3.0, -2.0))
544assert(eqT(4 % -5, -1))
545assert(eqT(4 % -5.0, -1.0))
546assert(eqT(4 % 5, 4))
547assert(eqT(4 % 5.0, 4.0))
548assert(eqT(-4 % -5, -4))
549assert(eqT(-4 % -5.0, -4.0))
550assert(eqT(-4 % 5, 1))
551assert(eqT(-4 % 5.0, 1.0))
552assert(eqT(4.25 % 4, 0.25))
553assert(eqT(10.0 % 2, 0.0))
554assert(eqT(-10.0 % 2, 0.0))
555assert(eqT(-10.0 % -2, 0.0))
544assert(math.pi - math.pi % 1 == 3) 556assert(math.pi - math.pi % 1 == 3)
545assert(math.pi - math.pi % 0.001 == 3.141) 557assert(math.pi - math.pi % 0.001 == 3.141)
546 558
559do -- very small numbers
560 local i, j = 0, 20000
561 while i < j do
562 local m = (i + j) // 2
563 if 10^-m > 0 then
564 i = m + 1
565 else
566 j = m
567 end
568 end
569 -- 'i' is the smallest possible ten-exponent
570 local b = 10^-(i - (i // 10)) -- a very small number
571 assert(b > 0 and b * b == 0)
572 local delta = b / 1000
573 assert(eq((2.1 * b) % (2 * b), (0.1 * b), delta))
574 assert(eq((-2.1 * b) % (2 * b), (2 * b) - (0.1 * b), delta))
575 assert(eq((2.1 * b) % (-2 * b), (0.1 * b) - (2 * b), delta))
576 assert(eq((-2.1 * b) % (-2 * b), (-0.1 * b), delta))
577end
578
579
580-- basic consistency between integer modulo and float modulo
581for i = -10, 10 do
582 for j = -10, 10 do
583 if j ~= 0 then
584 assert((i + 0.0) % j == i % j)
585 end
586 end
587end
588
589for i = 0, 10 do
590 for j = -10, 10 do
591 if j ~= 0 then
592 assert((2^i) % j == (1 << i) % j)
593 end
594 end
595end
596
597do -- precision of module for large numbers
598 local i = 10
599 while (1 << i) > 0 do
600 assert((1 << i) % 3 == i % 2 + 1)
601 i = i + 1
602 end
603
604 i = 10
605 while 2^i < math.huge do
606 assert(2^i % 3 == i % 2 + 1)
607 i = i + 1
608 end
609end
610
547assert(eqT(minint % minint, 0)) 611assert(eqT(minint % minint, 0))
548assert(eqT(maxint % maxint, 0)) 612assert(eqT(maxint % maxint, 0))
549assert((minint + 1) % minint == minint + 1) 613assert((minint + 1) % minint == minint + 1)