RegressionTests__RecursionLockTests.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 28 Aug 2017 21:05:24 +0100
branchjv
changeset 1954 f868e5f2043f
child 1962 19bb5e423587
permissions -rw-r--r--
Added tests for `RecursionLock`
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1954
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/regression' }"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: RegressionTests }"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
ProcessSpawningTestCase subclass:#RecursionLockTests
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'lock'
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'tests-Regression'
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!RecursionLockTests methodsFor:'running'!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
setUp
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    super setUp.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    lock := RecursionLock new name: self printString
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    "Created: / 28-08-2017 / 21:49:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
! !
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
!RecursionLockTests methodsFor:'tests'!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
test_critical_01
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
        | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
        active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
        lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
            self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
            self assert: lock count == 1.            
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
        ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    "Created: / 28-08-2017 / 21:48:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
test_critical_02
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
        | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
        active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
        lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
            lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
                lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
                    self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
                    self assert: lock count == 3.            
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
                ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
                self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
                self assert: lock count == 2. 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
            ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
            self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
            self assert: lock count == 1. 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
        ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    "Created: / 28-08-2017 / 21:54:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
test_critical_03
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
        active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
        [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
            lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
                self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
                self assert: lock count == 1.            
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
                self error: 'Get out of here!!'.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
            ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
            self assert: false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
        ] on: Error do:[:ex | 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
            self assert: true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
        ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
            
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
        self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
    "Created: / 28-08-2017 / 21:56:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
test_critical_04a
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
    | p |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    p := [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
        | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
        active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
        lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
            active terminate.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
        ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
    ] newProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    p resume.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    [ p isDead ] whileFalse:[ Delay waitForMilliseconds:100 ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
    self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
    self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    "Created: / 28-08-2017 / 23:08:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
test_critical_04b
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
    | p |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
    p := [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
        | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
        active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
        lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
            Processor yield.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
            Delay waitForSeconds: 10.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
        ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    ] newProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    p resume.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
    self assert: p isDead not.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    p terminate.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    [ p isDead ] whileFalse:[ Delay waitForMilliseconds:100 ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    self assert: lock owner isNil.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    self assert: lock count == 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    "Created: / 28-08-2017 / 23:09:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
test_critical_05
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
    | resource blocker |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
    blocker := Semaphore new: (10 - 1) negated.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
    resource := 0.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
    10 timesRepeat:[  
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
        [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
            | active |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
            active := Processor activeProcess.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
            10000 timesRepeat:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
                lock critical:[ 
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
                    resource := resource + 1.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
                    self assert: lock owner == active.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
                    self assert: lock count == 1.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
                    Processor yield.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
                ]            
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
            ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
            blocker signal.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
        ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
    ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
    blocker wait.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    self assert: resource == ( 10000 * 10)
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    "Created: / 28-08-2017 / 23:10:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
test_critical_06a
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    "
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    This test makes sure that two threads cannot enter
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    critical section of the lock at the same time.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
    "
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    | threadAstop threadAentered threadBstop threadBentered |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    threadAstop := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
    threadBstop := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    threadAentered := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    threadBentered := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    "Thread A"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
       Stdout nextPutLine:'Thread A id: ', Processor activeProcess id printString.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
       lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
            threadAentered := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
            [ threadAstop ] whileFalse:[ Delay waitForMilliseconds: 100].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
       ]
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    self assert: threadAentered.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    "Thread B"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
       Stdout nextPutLine:'Thread B id: ', Processor activeProcess id printString.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
       lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
            threadBentered := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
            [ threadBstop ] whileFalse:[ Delay waitForMilliseconds: 100].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
       ]
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
    self assert: threadBentered not.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    threadAstop := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
    self assert: threadBentered.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    threadBstop := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    "Created: / 04-10-2017 / 08:14:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
test_critical_06b
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
    "
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    Like #test_critical_06b, but with nesting.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    "
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
    | threadAstop1 threadAstop2 threadAentered threadBstop threadBentered |
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
    threadAstop1 := threadAstop2 := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    threadBstop := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
    threadAentered := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
    threadBentered := false.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    "Thread A"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
       Stdout nextPutLine:'Thread A id: ', Processor activeProcess id printString.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
       lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
            lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
                threadAentered := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
                [ threadAstop1 ] whileFalse:[ Delay waitForMilliseconds: 100].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
            ].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
            [ threadAstop2 ] whileFalse:[ Delay waitForMilliseconds: 100].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
       ]
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
    self assert: threadAentered.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    "Thread B"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    [
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
       Stdout nextPutLine:'Thread B id: ', Processor activeProcess id printString.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
       lock critical:[lock critical:[
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
            threadBentered := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
            [ threadBstop ] whileFalse:[ Delay waitForMilliseconds: 100].
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
       ]]
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
    ] fork.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
    self assert: threadBentered not.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
    threadAstop1 := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
    self assert: threadBentered not.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    threadAstop2 := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    Delay waitForMilliseconds: 300.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
    self assert: threadBentered.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
    threadBstop := true.
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
    "Created: / 04-10-2017 / 08:16:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
! !
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
!RecursionLockTests class methodsFor:'documentation'!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
version_HG
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
    ^ '$Changeset: <not expanded> $'
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
! !
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275