added doWithIndex:. from:to:do: from:to:doWithIndex: to SequenceableCollection
added scale and scale: to Integer and FixedPointDecimal added moo_truncfpdec()
This commit is contained in:
@ -92,6 +92,24 @@ class SequenceableCollection(Collection)
|
||||
{
|
||||
(self size - 1) to: 0 by: -1 do: [:i | aBlock value: (self at: i)].
|
||||
}
|
||||
|
||||
method doWithIndex: aBlock
|
||||
{
|
||||
|
||||
0 to: (self size - 1) do: [:i | aBlock value: (self at: i) value: i].
|
||||
}
|
||||
|
||||
method from: startIndex to: stopIndex do: aBlock
|
||||
{
|
||||
|
||||
startIndex to: stopIndex do: [:i | aBlock value: (self at: i)].
|
||||
}
|
||||
|
||||
method from: startIndex to: stopIndex doWithIndex: aBlock
|
||||
{
|
||||
|
||||
startIndex to: stopIndex do: [:i | aBlock value: (self at: i) value: i].
|
||||
}
|
||||
}
|
||||
|
||||
## -------------------------------------------------------------------------------
|
||||
|
@ -148,7 +148,7 @@ class(#limited) Number(Magnitude)
|
||||
method rem: aNumber
|
||||
{
|
||||
## integer remainder rounded toward zero
|
||||
<primitive: #_integer_rem>
|
||||
<primitive: #Integer_rem>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
@ -162,7 +162,7 @@ class(#limited) Number(Magnitude)
|
||||
method mod: aNumber
|
||||
{
|
||||
## integer division remainder
|
||||
<primitive: #_integer_mod>
|
||||
<primitive: #Integer_mod>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
@ -215,31 +215,31 @@ class(#limited) Number(Magnitude)
|
||||
|
||||
method bitAt: index
|
||||
{
|
||||
<primitive: #_integer_bitat>
|
||||
<primitive: #Integer_bitat>
|
||||
^(self bitShift: index negated) bitAnd: 1.
|
||||
}
|
||||
|
||||
method bitAnd: aNumber
|
||||
{
|
||||
<primitive: #_integer_bitand>
|
||||
<primitive: #Integer_bitand>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
method bitOr: aNumber
|
||||
{
|
||||
<primitive: #_integer_bitor>
|
||||
<primitive: #Integer_bitor>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
method bitXor: aNumber
|
||||
{
|
||||
<primitive: #_integer_bitxor>
|
||||
<primitive: #Integer_bitxor>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
method bitInvert
|
||||
{
|
||||
<primitive: #_integer_bitinv>
|
||||
<primitive: #Integer_bitinv>
|
||||
^-1 - self.
|
||||
}
|
||||
|
||||
@ -248,7 +248,7 @@ class(#limited) Number(Magnitude)
|
||||
(* positive number for left shift.
|
||||
* negative number for right shift *)
|
||||
|
||||
<primitive: #_integer_bitshift>
|
||||
<primitive: #Integer_bitshift>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
@ -374,6 +374,12 @@ class(#limited) Integer(Number)
|
||||
}
|
||||
|
||||
method asInteger { ^self }
|
||||
|
||||
## integer has the scale of 0.
|
||||
method scale { ^0 }
|
||||
|
||||
## non-zero positive scale converts integer to fixed-point decimal
|
||||
method(#primitive) scale: ndigits.
|
||||
}
|
||||
|
||||
class(#limited) SmallInteger(Integer)
|
||||
@ -400,5 +406,8 @@ class(#limited,#immutable,#liword) LargeNegativeInteger(LargeInteger)
|
||||
|
||||
class(#limited,#immutable) FixedPointDecimal(Number)
|
||||
{
|
||||
var value, scale.
|
||||
var value.
|
||||
var(#get) scale.
|
||||
|
||||
method(#primitive) scale: ndigits.
|
||||
}
|
||||
|
@ -220,6 +220,19 @@ extend MyObject
|
||||
[ (10.12 mlt: 20.345) = 205.89 ],
|
||||
[ (-123897128378912738912738917.112323131233 div: 123.1) = -1006475453931053931053931.089458352000 ],
|
||||
[ (-1006475453931053931053931.089458352000 * 123.1) = -123897128378912738912738917.112323131200 ],
|
||||
[ 10 scale = 0 ],
|
||||
|
||||
## 70-74
|
||||
[ 10.0 scale = 1 ],
|
||||
[ 10.00 scale = 2 ],
|
||||
[ (10 scale: 1) = 10.0 ],
|
||||
[ (10 scale: 1) scale = (10.1 scale) ],
|
||||
[ (10 scale: 2) scale = (10.11 scale) ],
|
||||
|
||||
## 75-79
|
||||
[ ((10.19 scale: 3) scale) = (10.199 scale) ],
|
||||
[ ((10.19 scale: 0) scale) = (10 scale) ],
|
||||
|
||||
|
||||
[
|
||||
| b |
|
||||
|
@ -21,6 +21,35 @@ class MyObject(Object)
|
||||
t1 := t1 + 1.
|
||||
^self xxxx.
|
||||
}
|
||||
method(#class) test1
|
||||
{
|
||||
#### TODO: add this to the test case list.
|
||||
| rec results |
|
||||
|
||||
##rec := [ :y :z | (108.0000000000000000000000 - (815.000000000000000000 - (1500.0000000000000000 div: z) div: y)) truncate: 18. ].
|
||||
##rec := [ :y :z | (108.0000000000000000000000 - (815.000000000000000000 - (1500.0000000000000000 div: z) div: y)) truncate: 16. ].
|
||||
##rec := [ :y :z | 108.0000000000000000000000 - (815.000000000000000000 - (1500.0000000000000000 div: z) div: y) ].
|
||||
rec := [ :y :z | (108.0 scale: 22) - ((815 scale: 18) - ((1500 scale: 16) div: z) div: y) ].
|
||||
##rec := [ :y :z | 108.000000000000000000000000000000 - (815.00000000000000000000000000 - (1500.0000000000000000 div: z) div: y) ].
|
||||
|
||||
|
||||
## results := %( 4.0, 425 div: 100.0 ) asOrderedCollection.
|
||||
results := OrderedCollection new.
|
||||
results add: 4.0; add: (425.00 div: 100.00).
|
||||
|
||||
|
||||
3 to: 100 do: [ :i |
|
||||
##(results at: i - 2) dump.
|
||||
##(results at: i - 3) dump.
|
||||
##'----------' dump.
|
||||
results add: (rec value: (results at: i - 2) value: (results at: i - 3)).
|
||||
].
|
||||
|
||||
results doWithIndex: [ :each :i |
|
||||
System log: (i asString); log: "\t";
|
||||
log: each; logNl: "".
|
||||
].
|
||||
}
|
||||
|
||||
method(#class) main
|
||||
{
|
||||
|
Reference in New Issue
Block a user