aUCBLogo Demos and Tests / longinttest5


to longinttest5
   
local [i t1 t2 n fn]
   
ct setLoadNoisily true
   
load "Longint.lg
   
LongInt
   
noDribble Dribble "longinttest.txt   
   
forever 
   
[ 
      
erase [i t1 t2 n fn]
      
make "fn getSingleChoiceIndex [Choose function][get Single Choice]
      
[[LongDiv][LongMod][LongPower][Factorial][Stop]]
      
if (:fn==-1or2 (:fn==4) [pr "Stopped. stop]
      
for [1 3 1] 
      
[   make "n chain :i pr :i pr :n
         
make "t1 timemilli
         
make "result func :n :fn
         
if :result==-[pr "Broken. break]
         
make "t2 timemilli
         
pr :result
         
(pr count :result "digits "in (:t2-:t1)/1000 "s)
         
pr "
      
]
   
]
   
noDribble 
   
pr "Finished.
end

to func :n :fn
   
case :fn
   
[   [op LongDiv :n 3]
      
[op LongMod :n 3]
      
[if continue? ==wxYes [op LongPower :n]]
      
[if continue? ==wxYes [op factorial :n]]
   
] 
   
op -1
end

to factorial :n
   
if equalp :n [output 1]
   
output LongProd :n factorial LongSub :n 1
end

to chain :ding :times
   
local [aa=repeat :times [make "a word :ding :aop :a
end

to continue?
   
ignore (MessageBox [Continue with next step?][MessageBox] 
      
wxYes_No+wxCancel [400 200])
   
op wxYes
end