RegressionTests__RecursionLockTests.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 11 Dec 2017 14:11:56 +0000
branchjv
changeset 1963 d1eb7b03018a
parent 1962 19bb5e423587
child 1964 47797e5b62a6
permissions -rw-r--r--
Issue #94: added more tests for acquiring a lock with timeout
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>"
1962
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   267
!
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   268
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   269
test_critical_07
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   270
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   271
    [
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   272
        | active |
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   273
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   274
        active := Processor activeProcess.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   275
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   276
        self assert: lock owner isNil.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   277
        self assert: lock count == 0.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   278
        [
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   279
            lock critical:[ 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   280
                self assert: lock owner == active.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   281
                self assert: lock count == 1.     
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   282
                Error raise.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   283
            ].
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   284
            self assert: false.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   285
        ] on: Error do:[:each | 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   286
            self assert: true.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   287
        ].
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   288
        self assert: lock owner isNil.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   289
        self assert: lock count == 0.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   290
    ] fork.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   291
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   292
    "Created: / 11-12-2017 / 10:14:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   293
!
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   294
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   295
test_critical_08
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   296
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   297
    | p1 p2 |
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   298
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   299
    p1 := [
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   300
        lock critical:[ 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   301
            Delay waitForMilliseconds: 1000.  
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   302
        ].
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   303
    ] newProcess.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   304
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   305
    p2 := [ 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   306
        [ 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   307
            Delay waitForMilliseconds: 100. "/ Give p1 chance to lock the thread.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   308
            self assert: lock owner == p1.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   309
            self assert: lock count == 1.         
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   310
            lock critical:[ 
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   311
                Delay waitForMilliseconds: 10. "/ Some tiny work
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   312
            ].
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   313
            self assert: false.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   314
        ] valueWithWatchDog: [
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   315
            self assert: lock owner == p1.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   316
            self assert: lock count == 1.         
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   317
        ] afterMilliseconds: 500.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   318
    ] newProcess.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   319
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   320
    p1 resume.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   321
    p2 resume.
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   322
19bb5e423587 Issue #94: added more tests for unwinding while attempting to lock
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1954
diff changeset
   323
    "Created: / 11-12-2017 / 10:22:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1963
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   324
!
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   325
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   326
test_critical_09a
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   327
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   328
    | p1 p2 |
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   329
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   330
    p1 := [
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   331
        lock critical:[ 
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   332
            Delay waitForMilliseconds: 1000.  
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   333
        ].
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   334
    ] newProcess.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   335
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   336
    p2 := [ 
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   337
        | timeouted |
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   338
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   339
        timeouted := false.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   340
        Delay waitForMilliseconds: 100. "/ Give p1 chance to lock the thread.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   341
        self assert: lock owner == p1.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   342
        self assert: lock count == 1.         
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   343
        lock critical: [ Delay waitForMilliseconds: 10 ] "/ Some tiny work.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   344
            timeoutMs: 500
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   345
           ifBlocking: [ timeouted := true ].
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   346
        self assert: timeouted.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   347
    ] newProcess.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   348
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   349
    p1 resume.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   350
    p2 resume.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   351
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   352
    "Created: / 11-12-2017 / 14:09:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   353
!
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   354
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   355
test_critical_09b
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   356
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   357
    | p1 p2 |
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   358
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   359
    p1 := [
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   360
        lock critical:[ 
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   361
            Delay waitForMilliseconds: 500.  
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   362
        ].
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   363
    ] newProcess.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   364
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   365
    p2 := [ 
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   366
        | timeouted |
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   367
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   368
        timeouted := false.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   369
        Delay waitForMilliseconds: 100. "/ Give p1 chance to lock the thread.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   370
        self assert: lock owner == p1.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   371
        self assert: lock count == 1.         
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   372
        lock critical: [ Delay waitForMilliseconds: 10 ] "/ Some tiny work.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   373
            timeoutMs: 1000
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   374
           ifBlocking: [ timeouted := true ].
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   375
        self assert: timeouted not.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   376
    ] newProcess.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   377
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   378
    p1 resume.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   379
    p2 resume.
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   380
d1eb7b03018a Issue #94: added more tests for acquiring a lock with timeout
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1962
diff changeset
   381
    "Created: / 11-12-2017 / 14:09:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1954
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
! !
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
!RecursionLockTests class methodsFor:'documentation'!
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
version_HG
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
    ^ '$Changeset: <not expanded> $'
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
! !
f868e5f2043f Added tests for `RecursionLock`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390