A new version of Tests was added to project The Inbox:
http://source.squeak.org/inbox/Tests-jar.448.mcz ==================== Summary ==================== Name: Tests-jar.448 Author: jar Time: 12 April 2021, 11:13:13.58946 pm UUID: 99c6f69a-288c-0648-80af-3b7aa014e9ba Ancestors: Tests-nice.447 Complement Kernel-jar.1386 (Fix a list of termination bugs described in http://forum.world.st/Solving-multiple-termination-bugs-summary-amp-proposal-td5128285.html) These basic tests illustrate the unwind semantics during termination implemented by the new #teminate.. Current implementation of #teminate will fail with these tests - they should accompany Kernel-jar.1386 (if accepted). Thanks =============== Diff against Tests-nice.447 =============== Item was changed: SystemOrganization addCategory: #'Tests-Bugs'! SystemOrganization addCategory: #'Tests-Compiler'! SystemOrganization addCategory: #'Tests-Dependencies'! SystemOrganization addCategory: #'Tests-Digital Signatures'! SystemOrganization addCategory: #'Tests-Environments'! SystemOrganization addCategory: #'Tests-Exceptions'! SystemOrganization addCategory: #'Tests-FilePackage'! SystemOrganization addCategory: #'Tests-Files'! SystemOrganization addCategory: #'Tests-Finalization'! SystemOrganization addCategory: #'Tests-Hex'! SystemOrganization addCategory: #'Tests-Installer-Core'! SystemOrganization addCategory: #'Tests-Localization'! SystemOrganization addCategory: #'Tests-Monticello'! SystemOrganization addCategory: #'Tests-Monticello-Mocks'! SystemOrganization addCategory: #'Tests-Monticello-Utils'! SystemOrganization addCategory: #'Tests-Object Events'! SystemOrganization addCategory: #'Tests-ObjectsAsMethods'! SystemOrganization addCategory: #'Tests-PrimCallController'! SystemOrganization addCategory: #'Tests-Release'! SystemOrganization addCategory: #'Tests-System-Applications'! SystemOrganization addCategory: #'Tests-System-Digital Signatures'! SystemOrganization addCategory: #'Tests-System-Object Storage'! SystemOrganization addCategory: #'Tests-System-Preferences'! SystemOrganization addCategory: #'Tests-System-Support'! SystemOrganization addCategory: #'Tests-Utilities'! SystemOrganization addCategory: #'Tests-VM'! - SystemOrganization addCategory: #'Tests-MonticelloMocks'! SystemOrganization addCategory: #'Tests-Sound'! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind1 (in category 'tests') ----- + testTerminationDuringNestedUnwind1 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [Processor activeProcess suspend] ensure: [ + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess 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. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind2 (in category 'tests') ----- + testTerminationDuringNestedUnwind2 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [ ] ensure: [ + Processor activeProcess suspend. + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess 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. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind3 (in category 'tests') ----- + testTerminationDuringNestedUnwind3 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [Processor yield] ensure: [ + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess 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. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind4 (in category 'tests') ----- + testTerminationDuringNestedUnwind4 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [ ] ensure: [ + Processor yield. + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess resume. + Processor yield. + "make sure p is suspended and none of the unwind blocks has finished yet" + self assert: p isRunnable. + self deny: x1 | x2 | x3. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind5 (in category 'tests') ----- + testTerminationDuringNestedUnwind5 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [Processor activeProcess terminate] ensure: [ + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess resume. + Processor yield. + "make sure p suspended itself and none of the unwind blocks has finished yet" + self assert: p isSuspended. + self deny: x1 | x2 | x3. + "now let the termination continue and make sure all unwind blocks have finished" + Processor yield. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind6 (in category 'tests') ----- + testTerminationDuringNestedUnwind6 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 | + x1 := x2 := x3 := false. + p := + [ + [ + [ ] ensure: [ + [ ] ensure: [ + Processor activeProcess terminate. + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess resume. + Processor yield. + "make sure p suspended itself and none of the unwind blocks has finished yet" + self assert: p isSuspended. + self deny: x1 | x2 | x3. + "now let the termination continue and make sure all unwind blocks have finished" + Processor yield. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind7 (in category 'tests') ----- + testTerminationDuringNestedUnwind7 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 semaphore | + x1 := x2 := x3 := false. + semaphore := Semaphore new. + p := + [ + [ + [ ] ensure: [ + [semaphore wait] ensure: [ + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess resume. + Processor yield. + "make sure p is runnable and none of the unwind blocks has finished yet" + self assert: p isBlocked. + self deny: x1 | x2 | x3. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! Item was added: + ----- Method: ProcessTerminateBug>>testTerminationDuringNestedUnwind8 (in category 'tests') ----- + testTerminationDuringNestedUnwind8 + "Test all nested unwind blocks are correctly unwound; + all unwind blocks halfway through their execution should be completed." + + | p x1 x2 x3 semaphore | + x1 := x2 := x3 := false. + semaphore := Semaphore new. + p := + [ + [ + [ ] ensure: [ + [ ] ensure: [ + semaphore wait. + x1 := true]. + x2 := true] + ] ensure: [ + x3 := true] + ] newProcess resume. + Processor yield. + "make sure p is runnable and none of the unwind blocks has finished yet" + self assert: p isBlocked. + self deny: x1 | x2 | x3. + "now terminate the process and make sure all unwind blocks have finished" + p terminate. + self assert: p isTerminated. + self assert: x1 & x2 & x3 + ! |
Free forum by Nabble | Edit this page |