Skip to content

Commit

Permalink
Test the non-inline versions of the inlined messages.
Browse files Browse the repository at this point in the history
  • Loading branch information
rmacnak committed May 4, 2024
1 parent 3d9fbc0 commit b6f7884
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 1 deletion.
4 changes: 3 additions & 1 deletion newspeak/KernelForPrimordialSoup.ns
Original file line number Diff line number Diff line change
Expand Up @@ -2044,7 +2044,9 @@ public tan ^<Float> = (
public to: stop <Number> by: step <Number> do: action <[:Number]> = (
(* Usually this message is implemented inline by the bytecode compiler, and therefore not subject to lookup. This implementation handles non-inlined cases, such as eventual sends or non-literal arguments. *)
| current ::= self. |
[current <= stop] whileTrue: [action value: current. current:: step + current].
step < 0
ifTrue: [[current >= stop] whileTrue: [action value: current. current:: step + current]]
ifFalse: [[current <= stop] whileTrue: [action value: current. current:: step + current]].

^nil (* To match the inlined version *)
)
Expand Down
77 changes: 77 additions & 0 deletions newspeak/KernelTests.ns
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,22 @@ public testBooleanNonEvaluatingDisjuction = (
assert: (false or: [true]).
deny: (false or: [false]).
)
public testBooleanNonInlineIfFalse = (
assert: (true ifFalse: (hide: ['F'])) equals: nil.
assert: (false ifFalse: (hide: ['F'])) equals: 'F'.
)
public testBooleanNonInlineIfFalseIfTrue = (
assert: (true ifFalse: (hide: ['F']) ifTrue: (hide: ['T'])) equals: 'T'.
assert: (false ifFalse: (hide: ['F']) ifTrue: (hide: ['T'])) equals: 'F'.
)
public testBooleanNonInlineIfTrue = (
assert: (true ifTrue: (hide: ['T'])) equals: 'T'.
assert: (false ifTrue: (hide: ['T'])) equals: nil.
)
public testBooleanNonInlineIfTrueIfFalse = (
assert: (true ifTrue: (hide: ['T']) ifFalse: (hide: ['F'])) equals: 'T'.
assert: (false ifTrue: (hide: ['T']) ifFalse: (hide: ['F'])) equals: 'F'.
)
public testBooleanNot = (
deny: true not.
assert: false not.
Expand Down Expand Up @@ -1122,6 +1138,13 @@ ensure3 = (
[^'try-block'] ensure: ['ensure-block'].
^'afterward'
)
nonInlineRepeat = (
| sum ::= 0. |
(hide: [
sum:: sum + 10.
sum > 15 ifTrue: [^sum].
]) repeat.
)
public testCannotReturn = (
should: [cannotReturn value] signal: Exception.
)
Expand Down Expand Up @@ -1152,6 +1175,33 @@ public testIsKindOfClosure = (
deny: (3 + 4) isKindOfClosure.
deny: {3 + 4} isKindOfClosure.
)
public testNonInlineRepeat = (
assert: nonInlineRepeat equals: 20.
)
public testNonInlineWhileFalse = (
| sum |
sum:: 0.
assert: (hide: [sum:: sum + 10. sum > 15]) whileFalse equals: nil.
assert: sum equals: 20.
)
public testNonInlineWhileFalseColon = (
| sum |
sum:: 0.
assert: ((hide: [sum > 15]) whileFalse: (hide: [sum:: sum + 10])) equals: nil.
assert: sum equals: 20.
)
public testNonInlineWhileTrue = (
| sum |
sum:: 0.
assert: (hide: [sum:: sum + 10. sum < 15]) whileTrue equals: nil.
assert: sum equals: 20.
)
public testNonInlineWhileTrueColon = (
| sum |
sum:: 0.
assert: ((hide: [sum < 15]) whileTrue: (hide: [sum:: sum + 10])) equals: nil.
assert: sum equals: 20.
)
public testNumArgs = (
assert: [3 + 4] numArgs equals: 0.
assert: [:x | x + 4] numArgs equals: 1.
Expand Down Expand Up @@ -3104,6 +3154,32 @@ public testIntegerMultiply = (
assert: minInt32 * minInt32 equals: 4611686018427387904.
assert: maxInt32 * maxInt32 equals: 4611686014132420609.
)
public testIntegerNonInlineTimesRepeat = (
| sum |
sum:: 0.
assert: (10 timesRepeat: (hide: [sum:: sum + 1])) equals: nil.
assert: sum equals: 10.
)
public testIntegerNonInlineToByDo = (
| sum |
sum:: 0.
assert: (1 to: 10 by: 2 do: (hide: [:each | sum:: sum + each])) equals: nil.
assert: sum equals: 25.

sum:: 0.
assert: (10 to: 1 by: -1 do: (hide: [:each | sum:: sum + each])) equals: nil.
assert: sum equals: 55.
)
public testIntegerNonInlineToDo = (
| sum |
sum:: 0.
assert: (1 to: 10 do: (hide: [:each | sum:: sum + each])) equals: nil.
assert: sum equals: 55.

sum:: 0.
assert: (1 to: -1 do: (hide: [:each | sum:: sum + each])) equals: nil.
assert: sum equals: 0.
)
public testIntegerParse = (
assert: (Integer parse: '3') equals: 3.
assert: (Integer parse: '-3') equals: -3.
Expand Down Expand Up @@ -6776,6 +6852,7 @@ public testUint8 = (
) : (
TEST_CONTEXT = ()
)
hide: x = ( ^x )
largestNegativeLargeInteger = (
(* -1 << 63 - 1 *)
^-9223372036854775809
Expand Down

0 comments on commit b6f7884

Please sign in to comment.