[squeak-dev] The Trunk: KernelTests-mt.424.mcz
christoph.thiede at student.hpi.uni-potsdam.de
christoph.thiede at student.hpi.uni-potsdam.de
Sun Jun 12 19:47:01 UTC 2022
> Downside is that those 5 ClassTestCase tests will be executed too often.
Could this be a case for overriding #shouldInheritSelectors?
Best,
Christoph
---
Sent from Squeak Inbox Talk
On 2022-05-31T13:24:36+00:00, commits at source.squeak.org wrote:
> Marcel Taeumel uploaded a new version of KernelTests to project The Trunk:
> http://source.squeak.org/trunk/KernelTests-mt.424.mcz
>
> ==================== Summary ====================
>
> Name: KernelTests-mt.424
> Author: mt
> Time: 31 May 2022, 3:24:36.006029 pm
> UUID: 54f976c3-1296-964f-9a2a-1890202ae545
> Ancestors: KernelTests-jar.423
>
> Moves ProcessTerminateBug from Tests to KernelTests package.
>
> Makes re-used semaphore in (Process)UnwindTest more explicit by having an AbstractProcessTest. Downside is that those 5 ClassTestCase tests will be executed too often.
>
> Thanks to Jaromir (jar) for the pointer!
>
> =============== Diff against KernelTests-jar.423 ===============
>
> Item was added:
> + ClassTestCase subclass: #AbstractProcessTest
> + instanceVariableNames: 'semaphore'
> + classVariableNames: ''
> + poolDictionaries: ''
> + category: 'KernelTests-Processes'!
>
> Item was added:
> + ----- Method: AbstractProcessTest class>>isAbstract (in category 'testing') -----
> + isAbstract
> +
> + ^ self name = #AbstractProcessTest!
>
> Item was added:
> + ----- Method: AbstractProcessTest>>genuineProcess (in category 'support') -----
> + genuineProcess
> + "Usually, we don't want to expose this from the class under test but we need it in the test context."
> +
> + ^ Processor instVarNamed: 'genuineProcess'!
>
> Item was added:
> + ----- Method: AbstractProcessTest>>setUp (in category 'running') -----
> + setUp
> +
> + super setUp.
> + semaphore := Semaphore new.!
>
> Item was added:
> + ----- Method: AbstractProcessTest>>targetClass (in category 'support') -----
> + targetClass
> +
> + ^ self environment classNamed: #Process!
>
> Item was added:
> + ----- Method: AbstractProcessTest>>tearDown (in category 'running') -----
> + tearDown
> + "Release all processes still waiting at the semaphore or in the active priority queue."
> +
> + Processor yield.
> + [semaphore isEmpty] whileFalse: [semaphore signal].
> +
> + super tearDown.!
>
> Item was added:
> + AbstractProcessTest subclass: #ProcessTerminateBug
> + instanceVariableNames: ''
> + classVariableNames: ''
> + poolDictionaries: ''
> + category: 'KernelTests-Processes'!
>
> Item was added:
> + ----- Method: ProcessTerminateBug>>testSchedulerTermination (in category 'tests') -----
> + testSchedulerTermination
> + | process sema gotHere sema2 |
> + gotHere := false.
> + sema := Semaphore new.
> + sema2 := Semaphore new.
> + process := [
> + sema signal.
> + sema2 wait.
> + "will be suspended here"
> + gotHere := true. "e.g., we must *never* get here"
> + ] forkAt: Processor activeProcess priority.
> + sema wait. "until process gets scheduled"
> + process terminate.
> + sema2 signal.
> + Processor yield. "will give process a chance to continue and
> + horribly screw up"
> + self assert: gotHere not.
> + !
>
> Item was added:
> + ----- Method: ProcessTerminateBug>>testTerminationDuringUnwind (in category 'tests') -----
> + testTerminationDuringUnwind
> + "An illustration of the issue of process termination during unwind.
> + This uses a well-behaved unwind block that we should allow to complete
> + if at all possible."
> + | unwindStarted unwindFinished p |
> + unwindStarted := unwindFinished := false.
> + p := [[] ensure:[
> + unwindStarted := true.
> + Processor yield.
> + unwindFinished := true.
> + ]] fork.
> + self deny: unwindStarted.
> + Processor yield.
> + self assert: unwindStarted.
> + self deny: unwindFinished.
> + p terminate.
> + self assert: unwindFinished.!
>
> Item was added:
> + ----- Method: ProcessTerminateBug>>testUnwindFromActiveProcess (in category 'tests') -----
> + testUnwindFromActiveProcess
> + | sema process |
> + sema := Semaphore forMutualExclusion.
> + self assert:(sema isSignaled).
> + process := [
> + sema critical:[
> + self deny: sema isSignaled.
> + Processor activeProcess terminate.
> + ]
> + ] forkAt: Processor userInterruptPriority.
> + self assert: sema isSignaled.!
>
> Item was added:
> + ----- Method: ProcessTerminateBug>>testUnwindFromForeignProcess (in category 'tests') -----
> + testUnwindFromForeignProcess
> + | sema process |
> + sema := Semaphore forMutualExclusion.
> + self assert: sema isSignaled.
> + process := [
> + sema critical:[
> + self deny: sema isSignaled.
> + sema wait. "deadlock"
> + ]
> + ] forkAt: Processor userInterruptPriority.
> + self deny: sema isSignaled.
> + "This is for illustration only - the BlockCannotReturn cannot
> + be handled here (it's truncated already)"
> + self shouldnt: [process terminate] raise: BlockCannotReturn.
> + self assert: sema isSignaled.
> + !
>
> Item was changed:
> + AbstractProcessTest subclass: #ProcessTest
> + instanceVariableNames: ''
> - ClassTestCase subclass: #ProcessTest
> - instanceVariableNames: 'semaphore'
> classVariableNames: ''
> poolDictionaries: ''
> category: 'KernelTests-Processes'!
>
> !ProcessTest commentStamp: 'ul 8/16/2011 11:35' prior: 0!
> I hold test cases for generic Process-related behaviour.!
>
> Item was removed:
> - ----- Method: ProcessTest>>genuineProcess (in category 'support') -----
> - genuineProcess
> -
> - "Usually, we don't want to expose this from the class under test."
> - ^ Processor instVarNamed: 'genuineProcess'!
>
> Item was removed:
> - ----- Method: ProcessTest>>setUp (in category 'running') -----
> - setUp
> - semaphore := Semaphore new!
>
> Item was removed:
> - ----- Method: ProcessTest>>tearDown (in category 'running') -----
> - tearDown
> - Processor activeProcess environmentRemoveKey: #processTests ifAbsent: [].
> -
> - "Release all processes still waiting at the semaphore or in the active priority queue."
> - Processor yield.
> - [semaphore isEmpty] whileFalse: [semaphore signal]!
>
> Item was changed:
> + ----- Method: ProcessTest>>testProcessFaithfulTermination: (in category 'support') -----
> - ----- Method: ProcessTest>>testProcessFaithfulTermination: (in category 'tests') -----
> testProcessFaithfulTermination: terminator
> "When terminating a process, unwind blocks should be evaluated as if they were executed by the process being terminated."
>
> | process result |
> process := [
> [Processor activeProcess suspend]
> ensure: [result := Processor activeProcess environmentAt: #foo]]
> fork.
> Processor yield.
> process environmentAt: #foo put: 42.
>
> terminator value: process.
>
> self should: process isTerminated.
> self assert: 42 equals: result.!
>
> Item was changed:
> + ----- Method: ProcessTest>>testProcessStateTestTermination: (in category 'support') -----
> - ----- Method: ProcessTest>>testProcessStateTestTermination: (in category 'tests') -----
> testProcessStateTestTermination: terminator
> "I test that a process is terminated when it reaches the last instruction
> of the bottom context for methods other than Process>>#terminate;
> this test would fail with the version of isTerminated before 3/11/2021."
>
> | bottomContext newProcess |
>
> newProcess := Process new.
> bottomContext := Context
> sender: nil
> receiver: newProcess
> method: (ProcessTest>>#terminated)
> arguments: {}.
> newProcess suspendedContext: ([] asContextWithSender: bottomContext).
> newProcess priority: Processor activePriority.
>
> self deny: newProcess isTerminated.
> terminator value: newProcess.
> self assert: newProcess isTerminated.
> !
>
> Item was added:
> + AbstractProcessTest subclass: #ProcessUnwindTest
> + instanceVariableNames: ''
> + classVariableNames: ''
> + poolDictionaries: ''
> + category: 'KernelTests-Processes'!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateActiveInNestedEnsure1 (in category 'tests') -----
> + testTerminateActiveInNestedEnsure1
> + "Terminate active process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [Processor activeProcess terminate] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateActiveInNestedEnsure2 (in category 'tests') -----
> + testTerminateActiveInNestedEnsure2
> + "Terminate active process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [ ] ensure: [
> + Processor activeProcess terminate.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateBlockedInNestedEnsure1 (in category 'tests') -----
> + testTerminateBlockedInNestedEnsure1
> + "Terminate blocked process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [semaphore wait] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is blocked and none of the unwind blocks has finished yet"
> + self assert: p isBlocked.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateBlockedInNestedEnsure2 (in category 'tests') -----
> + testTerminateBlockedInNestedEnsure2
> + "Terminate blocked process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [ ] ensure: [
> + semaphore wait.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is blocked and none of the unwind blocks has finished yet"
> + self assert: p isBlocked.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn1 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn1
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [Processor activeProcess suspend] ensure: [
> + x1 := true. return value].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x3.
> + self deny: x2 & x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn2 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn2
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [] ensure: [
> + Processor activeProcess suspend.
> + x1 := true. return value].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x3.
> + self deny: x2 & x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn3 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn3
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [Processor activeProcess suspend] ensure: [
> + x1 := true].
> + x2 := true. return value]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn4 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn4
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [] ensure: [
> + Processor activeProcess suspend.
> + x1 := true].
> + x2 := true. return value]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn5 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn5
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [Processor activeProcess suspend] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true. return value].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn6 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn6
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [] ensure: [
> + Processor activeProcess suspend.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true. return value].
> + x4 := true.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn7 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn7
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [Processor activeProcess suspend] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true. return value.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateInNestedEnsureWithReturn8 (in category 'tests') -----
> + testTerminateInNestedEnsureWithReturn8
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [:return |
> + [
> + [ ] ensure: [
> + [] ensure: [
> + Processor activeProcess suspend.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true. return value.
> + ] valueWithExit
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateRunnableInNestedEnsure1 (in category 'tests') -----
> + testTerminateRunnableInNestedEnsure1
> + "Terminate runnable process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [Processor yield] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is runnable and none of the unwind blocks has finished yet"
> + self assert: p isRunnable.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateRunnableInNestedEnsure2 (in category 'tests') -----
> + testTerminateRunnableInNestedEnsure2
> + "Terminate runnable process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [ ] ensure: [
> + Processor yield.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is runnable and none of the unwind blocks has finished yet"
> + self assert: p isRunnable.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateSuspendedInNestedEnsure1 (in category 'tests') -----
> + testTerminateSuspendedInNestedEnsure1
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [Processor activeProcess suspend] ensure: [
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was added:
> + ----- Method: ProcessUnwindTest>>testTerminateSuspendedInNestedEnsure2 (in category 'tests') -----
> + testTerminateSuspendedInNestedEnsure2
> + "Terminate suspended process.
> + Test all nested unwind blocks are correctly executed;
> + all unwind blocks halfway through their execution should be completed."
> +
> + | p x1 x2 x3 x4 |
> + x1 := x2 := x3 := x4 := false.
> + p :=
> + [
> + [
> + [ ] ensure: [
> + [ ] ensure: [
> + Processor activeProcess suspend.
> + x1 := true].
> + x2 := true]
> + ] ensure: [
> + x3 := true].
> + x4 := true.
> + ] newProcess.
> + p resume.
> + Processor yield.
> + "make sure p is suspended and none of the unwind blocks has finished yet"
> + self assert: p isSuspended.
> + self deny: x1 | x2 | x3 | x4.
> + "now terminate the process and make sure all unwind blocks have finished"
> + p terminate.
> + self assert: p isTerminated.
> + self assert: x1 & x2 & x3.
> + self deny: x4.!
>
> Item was removed:
> - ProcessTest subclass: #UnwindTest
> - instanceVariableNames: ''
> - classVariableNames: ''
> - poolDictionaries: ''
> - category: 'KernelTests-Processes'!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateActiveInNestedEnsure1 (in category 'tests') -----
> - testTerminateActiveInNestedEnsure1
> - "Terminate active process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [Processor activeProcess terminate] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateActiveInNestedEnsure2 (in category 'tests') -----
> - testTerminateActiveInNestedEnsure2
> - "Terminate active process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [ ] ensure: [
> - Processor activeProcess terminate.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateBlockedInNestedEnsure1 (in category 'tests') -----
> - testTerminateBlockedInNestedEnsure1
> - "Terminate blocked process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [semaphore wait] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is blocked and none of the unwind blocks has finished yet"
> - self assert: p isBlocked.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateBlockedInNestedEnsure2 (in category 'tests') -----
> - testTerminateBlockedInNestedEnsure2
> - "Terminate blocked process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [ ] ensure: [
> - semaphore wait.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is blocked and none of the unwind blocks has finished yet"
> - self assert: p isBlocked.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn1 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn1
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [Processor activeProcess suspend] ensure: [
> - x1 := true. return value].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x3.
> - self deny: x2 & x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn2 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn2
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [] ensure: [
> - Processor activeProcess suspend.
> - x1 := true. return value].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x3.
> - self deny: x2 & x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn3 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn3
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [Processor activeProcess suspend] ensure: [
> - x1 := true].
> - x2 := true. return value]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn4 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn4
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [] ensure: [
> - Processor activeProcess suspend.
> - x1 := true].
> - x2 := true. return value]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn5 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn5
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [Processor activeProcess suspend] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true. return value].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn6 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn6
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [] ensure: [
> - Processor activeProcess suspend.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true. return value].
> - x4 := true.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn7 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn7
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [Processor activeProcess suspend] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true. return value.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateInNestedEnsureWithReturn8 (in category 'tests') -----
> - testTerminateInNestedEnsureWithReturn8
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [:return |
> - [
> - [ ] ensure: [
> - [] ensure: [
> - Processor activeProcess suspend.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true. return value.
> - ] valueWithExit
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateRunnableInNestedEnsure1 (in category 'tests') -----
> - testTerminateRunnableInNestedEnsure1
> - "Terminate runnable process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [Processor yield] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is runnable and none of the unwind blocks has finished yet"
> - self assert: p isRunnable.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateRunnableInNestedEnsure2 (in category 'tests') -----
> - testTerminateRunnableInNestedEnsure2
> - "Terminate runnable process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [ ] ensure: [
> - Processor yield.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is runnable and none of the unwind blocks has finished yet"
> - self assert: p isRunnable.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateSuspendedInNestedEnsure1 (in category 'tests') -----
> - testTerminateSuspendedInNestedEnsure1
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [Processor activeProcess suspend] ensure: [
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
> Item was removed:
> - ----- Method: UnwindTest>>testTerminateSuspendedInNestedEnsure2 (in category 'tests') -----
> - testTerminateSuspendedInNestedEnsure2
> - "Terminate suspended process.
> - Test all nested unwind blocks are correctly executed;
> - all unwind blocks halfway through their execution should be completed."
> -
> - | p x1 x2 x3 x4 |
> - x1 := x2 := x3 := x4 := false.
> - p :=
> - [
> - [
> - [ ] ensure: [
> - [ ] ensure: [
> - Processor activeProcess suspend.
> - x1 := true].
> - x2 := true]
> - ] ensure: [
> - x3 := true].
> - x4 := true.
> - ] newProcess.
> - p resume.
> - Processor yield.
> - "make sure p is suspended and none of the unwind blocks has finished yet"
> - self assert: p isSuspended.
> - self deny: x1 | x2 | x3 | x4.
> - "now terminate the process and make sure all unwind blocks have finished"
> - p terminate.
> - self assert: p isTerminated.
> - self assert: x1 & x2 & x3.
> - self deny: x4.!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220612/39990c4e/attachment-0001.html>
More information about the Squeak-dev
mailing list
|