2019-04-08 04:00:47 +00:00
|
|
|
|
|
|
|
#include 'Moo.moo'.
|
|
|
|
|
2019-06-27 06:29:09 +00:00
|
|
|
////////////////////////////////////////////////////////////////#
|
|
|
|
// MAIN
|
|
|
|
////////////////////////////////////////////////////////////////#
|
2019-04-08 04:00:47 +00:00
|
|
|
|
|
|
|
class MyObject(Object)
|
|
|
|
{
|
|
|
|
var(#class) a := 100.
|
|
|
|
var(#classinst) K := 200.
|
|
|
|
|
|
|
|
method(#class) testBigintDiv
|
|
|
|
{
|
|
|
|
| i q r divd divr divd_ubound divr_ubound |
|
|
|
|
|
|
|
|
divr_ubound := 16rFFFFFFFFFFFFFFFFFFFFFFFF.
|
|
|
|
divd_ubound := 16rFFFFFFFFFFFFFFFFFFFFFFFF.
|
|
|
|
|
|
|
|
divr := 1.
|
|
|
|
while (divr <= divr_ubound)
|
|
|
|
{
|
|
|
|
('divr => ' & divr asString) dump.
|
|
|
|
|
|
|
|
divd := 0.
|
|
|
|
while (divd <= divd_ubound)
|
|
|
|
{
|
|
|
|
q := divd div: divr.
|
|
|
|
r := divd rem: divr.
|
|
|
|
if (divd ~= (q * divr + r)) { i dump. divd dump. divr dump. q dump. r dump. (q * divr + r) dump. ^false. }.
|
|
|
|
divd := divd + 1.
|
|
|
|
}.
|
|
|
|
divd := divr + 1.
|
|
|
|
}.
|
|
|
|
^true
|
|
|
|
}
|
|
|
|
|
|
|
|
method(#class) testBigintDiv2
|
|
|
|
{
|
|
|
|
| ffi i q r divd divr divd_ubound divr_ubound now x |
|
|
|
|
|
|
|
|
|
|
|
|
ffi := FFI new: 'libc.so.6'.
|
|
|
|
now := ffi call: #time signature: 'l)i' arguments: #(0).
|
2019-06-27 07:43:17 +00:00
|
|
|
////ffi call: #srand signature: 'i)' arguments: ##(now).
|
|
|
|
ffi call: #srandom signature: 'i)' arguments: ##(now).
|
2019-04-08 04:00:47 +00:00
|
|
|
|
|
|
|
[
|
|
|
|
divr_ubound := 16rFFFFFFFFFFFFFFFFFFFFFFFF.
|
|
|
|
divd_ubound := 16rFFFFFFFFFFFFFFFFFFFFFFFF.
|
|
|
|
|
|
|
|
while (true)
|
|
|
|
{
|
2019-06-27 06:29:09 +00:00
|
|
|
//x := (ffi call: #rand signature: ')i' arguments: nil) rem: 20.
|
|
|
|
//divd := (ffi call: #rand signature: ')i' arguments: nil).
|
2019-04-08 04:00:47 +00:00
|
|
|
x := (ffi call: #random signature: ')l' arguments: nil) rem: 20.
|
|
|
|
divd := (ffi call: #random signature: ')l' arguments: nil).
|
|
|
|
while (x > 0)
|
|
|
|
{
|
2019-06-27 06:29:09 +00:00
|
|
|
//divd := (divd bitShift: 7) bitOr: (ffi call: #rand signature: ')i' arguments: nil).
|
2019-04-08 04:00:47 +00:00
|
|
|
divd := (divd bitShift: 7) bitOr: (ffi call: #random signature: ')l' arguments: nil).
|
|
|
|
x := x - 1.
|
|
|
|
}.
|
|
|
|
|
2019-06-27 06:29:09 +00:00
|
|
|
//x := (ffi call: #rand signature: ')i' arguments: nil) rem: 20.
|
|
|
|
//divr := (ffi call: #rand signature: ')i' arguments: nil).
|
2019-04-08 04:00:47 +00:00
|
|
|
x := (ffi call: #random signature: ')l' arguments: nil) rem: 20.
|
|
|
|
divr := (ffi call: #random signature: ')l' arguments: nil).
|
|
|
|
while (x > 0)
|
|
|
|
{
|
2019-06-27 06:29:09 +00:00
|
|
|
//divr := (divr bitShift: 7) bitOr: (ffi call: #rand signature: ')i' arguments: nil).
|
2019-04-08 04:00:47 +00:00
|
|
|
divr := (divr bitShift: 7) bitOr: (ffi call: #random signature: ')l' arguments: nil).
|
|
|
|
x := x - 1.
|
|
|
|
}.
|
|
|
|
if (divr = 0) { divr := 1 }.
|
|
|
|
|
|
|
|
q := divd div: divr.
|
|
|
|
r := divd rem: divr.
|
|
|
|
if (divd ~= (q * divr + r)) { i dump. divd dump. divr dump. q dump. r dump. (q * divr + r) dump. ^false. }.
|
2019-06-27 06:29:09 +00:00
|
|
|
////((q asString) & ' ' & (r asString)) dump
|
2019-04-08 04:00:47 +00:00
|
|
|
}.
|
|
|
|
] ensure: [ ffi close. ].
|
|
|
|
^true
|
|
|
|
}
|
|
|
|
|
|
|
|
method(#class) main
|
|
|
|
{
|
|
|
|
self testBigintDiv2.
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|