459 lines
15 KiB
Plaintext
459 lines
15 KiB
Plaintext
note
|
|
description: "Summary description for {TEST_NUMBER_DIVISION}."
|
|
author: ""
|
|
date: "$Date: 2011-11-11 18:13:16 +0100 (ven., 11 nov. 2011) $"
|
|
revision: "$Revision: 87787 $"
|
|
|
|
class
|
|
TEST_SPECIAL_DIVISION
|
|
|
|
inherit
|
|
EQA_TEST_SET
|
|
EXCEPTION_MANAGER
|
|
undefine
|
|
default_create
|
|
end
|
|
SPECIAL_DIVISION
|
|
undefine
|
|
default_create
|
|
end
|
|
|
|
feature
|
|
test_tdiv_qr_div_0
|
|
local
|
|
divide_zero_exception: TUPLE [divide_zero_exception: BOOLEAN]
|
|
do
|
|
create divide_zero_exception
|
|
divide_func (divide_zero_exception)
|
|
assert ("test tdiv qr div 0", divide_zero_exception.divide_zero_exception)
|
|
end
|
|
|
|
divide_func (divide_zero_exception: TUPLE [divide_zero_exception: BOOLEAN])
|
|
local
|
|
retried: BOOLEAN
|
|
one: SPECIAL [NATURAL_32]
|
|
two: SPECIAL [NATURAL_32]
|
|
three: SPECIAL [NATURAL_32]
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
if not retried then
|
|
create item.make_filled (0, 1)
|
|
create one.make_filled (0, 1)
|
|
create two.make_filled (0, 1)
|
|
create three.make_filled (0, 1)
|
|
tdiv_qr (item, 0, one, 0, two, 0, 1, three, 0, 0)
|
|
end
|
|
rescue
|
|
retried := True
|
|
if attached {DIVIDE_BY_ZERO} last_exception then
|
|
divide_zero_exception.divide_zero_exception := True
|
|
end
|
|
retry
|
|
end
|
|
|
|
test_tdiv_qr_div_1_1
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 4)
|
|
create denominator.make_filled (0x77777777, 1)
|
|
create quotient.make_filled (0, 4)
|
|
create remainder.make_filled (0, 1)
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 1)
|
|
assert ("tdiv qr div 1 1", quotient [0] = 0x00000002 and quotient [1] = 0xb6db6db9 and quotient [2] = 0x24924926 and quotient [3] = 0x00000002 and remainder [0] = 0x11111111)
|
|
end
|
|
|
|
test_tdiv_qr_div_2_1
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 4)
|
|
create denominator.make_filled (0x77777777, 2)
|
|
create quotient.make_filled (0, 4)
|
|
create remainder.make_filled (0, 2)
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 2)
|
|
assert ("test tdiv qr div 2 1 quotient", quotient [0] = 0x92492494 and quotient [1] = 0x24924924 and quotient [2] = 0x00000002 and quotient [3] = 0x0)
|
|
assert ("test tdiv qr div 2 1 remainder", remainder [0] = 0x33333333 and remainder [1] = 0x33333333)
|
|
end
|
|
|
|
test_tdiv_qr_div_big_1
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 4)
|
|
create denominator.make_filled (0x77777777, 3)
|
|
create quotient.make_filled (0, 4)
|
|
create remainder.make_filled (0, 3)
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 3)
|
|
assert ("test tdiv qr div big 1 quotient", quotient [0] = 0x24924924 and quotient [1] = 0x00000002 and quotient [2] = 0x0 and quotient [3] = 0x0)
|
|
assert ("test tdiv qr div big 1 remainder", remainder [0] = 0x44444443 and remainder [1] = 0x44444445 and remainder [2] = 0x44444444)
|
|
end
|
|
|
|
test_tdiv_qr_div_big_2
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 4)
|
|
create denominator.make_filled (0x77777777, 4)
|
|
create quotient.make_filled (0, 4)
|
|
create remainder.make_filled (0, 4)
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 4)
|
|
assert ("test tdiv qr div big 2 quotient", quotient [0] = 0x000000002 and quotient [1] = 0x00000000 and quotient [2] = 0x00000000 and quotient [3] = 0x00000000)
|
|
assert ("test tdiv qr div big 2 remainder", remainder [0] = 0x11111111 and remainder [1] = 0x11111111 and remainder [2] = 0x11111111 and remainder [3] = 0x11111111)
|
|
end
|
|
|
|
test_tdiv_qr_div_big_3
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 4)
|
|
create denominator.make_filled (0x77777777, 4)
|
|
create quotient.make_filled (0x0, 4)
|
|
create remainder.make_filled (0x0, 4)
|
|
numerator [3] := 0
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 4)
|
|
assert ("test tdiv qr div big 3 quotient", quotient [0] = 0x00000000 and quotient [1] = 0x00000000 and quotient [2] = 0x00000000)
|
|
assert ("test tdiv qr div big 3 remainder", remainder [0] = 0xffffffff and remainder [1] = 0xffffffff and remainder [2] = 0xffffffff and remainder [3] = 0x0)
|
|
end
|
|
|
|
test_tdiv_qr_div_big_4
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0x80000000, 4)
|
|
create denominator.make_filled (0x80000000, 4)
|
|
create quotient.make_filled (0, 4)
|
|
create remainder.make_filled (0, 4)
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 4)
|
|
assert ("test tdiv qr div big 4 quotient", quotient [0] = 0x1 and quotient [1] = 0x0 and quotient [2] = 0x0 and quotient [3] = 0x0)
|
|
assert ("test tdiv qr div big 4 remainder", remainder [0] = 0x0 and remainder [1] = 0x0 and remainder [2] = 0x0 and remainder [3] = 0x0)
|
|
end
|
|
|
|
test_tdiv_qr_div_big_5
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
quotient: SPECIAL [NATURAL_32]
|
|
remainder: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0x80000000, 4)
|
|
create denominator.make_filled (0x80000000, 4)
|
|
create quotient.make_filled (0, 4)
|
|
remainder := numerator
|
|
tdiv_qr (quotient, 0, remainder, 0, numerator, 0, 4, denominator, 0, 4)
|
|
assert ("test tdiv qr div big 4 quotient", quotient [0] = 0x1 and quotient [1] = 0x0 and quotient [2] = 0x0 and quotient [3] = 0x0)
|
|
assert ("test tdiv qr div big 4 remainder", remainder [0] = 0x0 and remainder [1] = 0x0 and remainder [2] = 0x0 and remainder [3] = 0x0)
|
|
end
|
|
|
|
test_tdiv_qr_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
two: SPECIAL [NATURAL_32]
|
|
three: SPECIAL [NATURAL_32]
|
|
four: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0, 6)
|
|
create two.make_filled (0, 5)
|
|
create three.make_filled (0, 10)
|
|
create four.make_filled (0, 5)
|
|
three [0] := 0x9ee82ea8
|
|
three [1] := 0x90eb9c01
|
|
three [2] := 0x564096ef
|
|
three [3] := 0x14156137
|
|
three [4] := 0xd359cd33
|
|
three [5] := 0xe06ffa35
|
|
three [6] := 0xfe887b52
|
|
three [7] := 0x2a7b2b66
|
|
three [8] := 0x56ad0915
|
|
three [9] := 0x014fae42
|
|
four [0] := 0xf58bf664
|
|
four [1] := 0x0846a26e
|
|
four [2] := 0xb3b99224
|
|
four [3] := 0x62d128fa
|
|
four [4] := 0x474c50aa
|
|
tdiv_qr (one, 0, two, 0, three, 0, 10, four, 0, 5)
|
|
assert ("test tdiv qr 1 1", one [0] = 0x9019af3a and one [1] = 0x998d2570 and one [2] = 0xa422bbce and one [3] = 0xdf885395 and one [4] = 0x04b547f5)
|
|
assert ("test tdiv qr 1 2", two [0] = 0x0 and two [1] = 0x0 and two [2] = 0x0 and two [3] = 0x0 and two [4] = 0x0)
|
|
end
|
|
|
|
test_divrem_1_div_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0xffffffff, 4)
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 1)
|
|
assert ("Test divrem 1 div 1", item.same_items (one, 0, 0, 4) and rem = 0)
|
|
end
|
|
|
|
test_divrem_1_div_0
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0, 4)
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 0x12345678)
|
|
assert ("Test divrem 1 div 0", item.same_items (one, 0, 0, 4) and rem = 0x0)
|
|
end
|
|
|
|
test_divrem_1_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0x0, 4)
|
|
one [3] := 0x80000000
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 4)
|
|
assert ("Test divrem 1", item [3] = 0x20000000 and item [2] = 0x00000000 and item [1] = 0x00000000 and item [0] = 0x00000000 and rem = 0)
|
|
end
|
|
|
|
test_divrem_1_2
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0x80000000, 4)
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 4)
|
|
assert ("Test divrem 1 2", item [3] = 0x20000000 and item [2] = 0x20000000 and item [1] = 0x20000000 and item [0] = 0x20000000 and rem = 0)
|
|
end
|
|
|
|
test_divrem_1_3
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0xffffffff, 4)
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 0x12345678)
|
|
assert ("Test divrem 1 3", item [0] = 0x040021bc and item [1] = 0x880003f8 and item [2] = 0x10000077 and item [3] = 0x0000000e and rem = 0x026b07df)
|
|
end
|
|
|
|
test_divrem_1_4
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
rem: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0xffffffff, 4)
|
|
create item.make_filled (0, 4)
|
|
rem := divrem_1 (item, 0, one, 0, 4, 0x87654321)
|
|
assert ("Test divrem 1 4", item [0] = 0x8bcb369f and item [1] = 0x04899bbd and item [2] = 0xe4089ae4 and item [3] = 0x00000001 and rem = 0x65c75880)
|
|
end
|
|
|
|
test_divrem_2_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
divisor: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
item: SPECIAL [NATURAL_32]
|
|
do
|
|
create one.make_filled (0xffffffff, 4)
|
|
create item.make_filled (0, 4)
|
|
create divisor.make_filled (0x80000000, 2)
|
|
junk := divrem_2 (item, 0, one, 0, 4, divisor, 0)
|
|
assert ("Test divrem 2 1", item [0] = 00000001 and item [1] = 0xfffffffe and item [2] = 0x00000000 and item [3] = 0x00000000 and junk = 0x00000001)
|
|
assert ("Test divrem 2 1", one [0] = 0x7fffffff and one [1] = 0x7fffffff and one [2] = 0xffffffff and one [3] = 0xffffffff)
|
|
end
|
|
|
|
test_divrem_2_2
|
|
local
|
|
numerator: SPECIAL [NATURAL_32]
|
|
denominator: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
quotient: SPECIAL [NATURAL_32]
|
|
do
|
|
create numerator.make_filled (0xffffffff, 5)
|
|
numerator [0] := 0xfffffffe
|
|
numerator [4] := 0x00000001
|
|
create denominator.make_filled (0xeeeeeeee, 2)
|
|
create quotient.make_filled (0x0, 5)
|
|
junk := divrem_2 (quotient, 0, numerator, 0, 5, denominator, 0)
|
|
assert ("test divrem 2 2", quotient [0] = 0x92492494 and quotient [1] = 0x24924924 and quotient [2] = 0x00000002 and quotient [3] = 0x0 and quotient [4] = 0x0)
|
|
assert ("test divrem 2 2", numerator [0] = 0x66666666 and numerator [1] = 0x66666666)
|
|
end
|
|
|
|
test_limb_inverse_1
|
|
local
|
|
one: NATURAL_32
|
|
res: NATURAL_32
|
|
do
|
|
one := 0x80000000
|
|
res := limb_inverse (one)
|
|
assert ("test limb inverse 1", res = 0xffffffff)
|
|
end
|
|
|
|
test_limb_inverse_2
|
|
local
|
|
one: NATURAL_32
|
|
res: NATURAL_32
|
|
do
|
|
one := 0xffffffff
|
|
res := limb_inverse (one)
|
|
assert ("test limb inverse 2", res = 0x00000001)
|
|
end
|
|
|
|
test_limb_inverse_3
|
|
local
|
|
one: NATURAL_32
|
|
res: NATURAL_32
|
|
do
|
|
one := 0x91a2b3c0
|
|
res := limb_inverse (one)
|
|
assert ("test limb inverse 3", res = 0xc200000e)
|
|
end
|
|
|
|
test_mod_1_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
val: CELL [NATURAL_32]
|
|
do
|
|
create val.put (0)
|
|
create one.make_filled (0, 5)
|
|
one [0] := 0x02f36db3
|
|
one [1] := 0x00000009
|
|
one [2] := 0xffffffff
|
|
one [3] := 0xffffffff
|
|
one [4] := 0xffffffff
|
|
mod_1 (one, 0, 2, 0x7b73add3, val)
|
|
assert ("test mod 1 1", val.item = 0x54d134dd)
|
|
end
|
|
|
|
test_preinv_divrem_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
do
|
|
create one.make_filled (0, 5)
|
|
one [1] := 0x87654321
|
|
one [2] := 0xcccccccc
|
|
one [3] := 0x33333333
|
|
one [4] := 0xffffffff
|
|
junk := preinv_divrem_1 (one, 0, 1, one, 1, 4, 0x3b9aca00, 0x12e0be82, 2)
|
|
assert ("test preinv divrem 1", one [0] = 0xfe8ef428 and one [1] = 0x273df9b7 and one [2] = 0x46093181 and one [3] = 0x4b82fa06 and one [4] = 0x00000004 and junk = 0x1B487000)
|
|
end
|
|
|
|
test_preinv_divrem_2
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
do
|
|
create one.make_filled (0, 5)
|
|
one [0] := 0xfe8ef428
|
|
one [1] := 0x273df9b7
|
|
one [2] := 0x46093181
|
|
one [3] := 0x4b82fa06
|
|
one [4] := 0x00000004
|
|
junk := preinv_divrem_1 (one, 0, 1, one, 1, 4, 0x3b9aca00, 0x12e0be82, 2)
|
|
assert ("test preinv divrem 2", one [0] = 0x07fba954 and one [1] = 0x81c6f917 and one [2] = 0x725dd1c3 and one [3] = 0x00000012 and one [4] = 0x00000000 and junk = 0x33DBB800)
|
|
end
|
|
|
|
test_preinv_divrem_3
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
do
|
|
create one.make_filled (0, 9)
|
|
one [1] := 0x99811941
|
|
one [2] := 0x841fd605
|
|
one [3] := 0xd960a1bf
|
|
one [4] := 0x5e433efc
|
|
one [5] := 0x48c9bc93
|
|
one [6] := 0x1c8b6fb1
|
|
one [7] := 0x8ca06de0
|
|
one [8] := 0xc6182337
|
|
junk := preinv_divrem_1 (one, 0, 1, one, 1, 8, 0xcfd41b91, 0x3b563c24, 0)
|
|
assert ("test preinv divrem 2", one [0] = 0xb670b6b5 and one [1] = 0xf02cf008 and one [2] = 0x2a9327ab and one [3] = 0x2c16b429 and one [4] = 0x52cd5013 and one [5] = 0x2f45a033 and one [6] = 0x0fc1ade8 and one [7] = 0xf4026dfb and one [8] = 0x00000000 and junk = 0x1DFF6C7B)
|
|
end
|
|
|
|
test_sb_divrem_mn_1
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
two: SPECIAL [NATURAL_32]
|
|
item: SPECIAL [NATURAL_32]
|
|
junk: NATURAL_32
|
|
do
|
|
create one.make_filled (0xffffffff, 4)
|
|
create two.make_filled (0x80000000, 3)
|
|
create item.make_filled (0, 1)
|
|
junk := sb_divrem_mn (item, 0, one, 0, 4, two, 0, 3)
|
|
assert ("test sb divrem mn 1", item [0] = 0xfffffffe and one [1] = 0x00000000 and one [2] = 0x00000000 and one [3] = 0x7fffffff and junk = 0x1)
|
|
end
|
|
|
|
test_sb_divrem_mn_2
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
two: SPECIAL [NATURAL_32]
|
|
three: SPECIAL [NATURAL_32]
|
|
res: NATURAL_32
|
|
do
|
|
create one.make_filled (0, 5)
|
|
create two.make_filled (0, 9)
|
|
create three.make_filled (0, 4)
|
|
two [4] := 0x348
|
|
three [0] := 0xc50fb804
|
|
three [1] := 0x4da1b404
|
|
three [2] := 0xf47a2e7d
|
|
three [3] := 0x81d4eb6b
|
|
|
|
res := sb_divrem_mn (one, 0, two, 0, 8, three, 0, 4)
|
|
assert ("test sb divrem mn 2", one [0] = 0x678 and one [1] = 0x0 and one [2] = 0x0 and one [3] = 0x0 and res = 0x0)
|
|
end
|
|
|
|
test_sb_divrem_mn_3
|
|
local
|
|
one: SPECIAL [NATURAL_32]
|
|
two: SPECIAL [NATURAL_32]
|
|
three: SPECIAL [NATURAL_32]
|
|
val: NATURAL_32
|
|
do
|
|
create one.make_filled (0, 6)
|
|
create two.make_filled (0, 10)
|
|
create three.make_filled (0, 5)
|
|
two [0] := 0x3dd05d50
|
|
two [1] := 0x21d73803
|
|
two [2] := 0xac812ddf
|
|
two [3] := 0x282ac26e
|
|
two [4] := 0xa6b39a66
|
|
two [5] := 0xc0dff46b
|
|
two [6] := 0xfd10f6a5
|
|
two [7] := 0x54f656cd
|
|
two [8] := 0xad5a122a
|
|
two [9] := 0x029f5c84
|
|
three [0] := 0xeb17ecc8
|
|
three [1] := 0x108d44dd
|
|
three [2] := 0x67732448
|
|
three [3] := 0xc5a251f5
|
|
three [4] := 0x8e98a154
|
|
val := sb_divrem_mn (one, 0, two, 0, 10, three, 0, 5)
|
|
assert ("test sb divrem mn 3 1", one [0] = 0x9019af3a and one [1] = 0x998d2570 and one [2] = 0xa422bbce and one [3] = 0xdf885395 and one [4] = 0x04b547f5)
|
|
assert ("test sb divrem mn 3 2", two [0] = 0x0 and two [1] = 0x0 and two [2] = 0x0 and two [3] = 0x0 and two [4] = 0x0 and val = 0)
|
|
end
|
|
end
|