Skip to content

Commit 1daeec7

Browse files
authored
Added benchmark for #ifNil:, #ifNotNil:, #ifNil:ifNotNil:, and #ifNotNil:ifNil: (#124)
2 parents e808008 + ef672fc commit 1daeec7

File tree

3 files changed

+54
-7
lines changed

3 files changed

+54
-7
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on: [push, pull_request]
44

55
jobs:
66
test_soms:
7-
runs-on: ubuntu-20.04 # ubuntu-latest
7+
runs-on: ubuntu-24.04 # ubuntu-latest
88
continue-on-error: ${{ matrix.not-up-to-date }}
99
strategy:
1010
fail-fast: false # we want all jobs to run, because they may fail independently
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"
2+
Copyright (c) 2025 see AUTHORS file
3+
4+
Permission is hereby granted, free of charge, to any person obtaining a copy
5+
of this software and associated documentation files (the 'Software'), to deal
6+
in the Software without restriction, including without limitation the rights
7+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
copies of the Software, and to permit persons to whom the Software is
9+
furnished to do so, subject to the following conditions:
10+
11+
The above copyright notice and this permission notice shall be included in
12+
all copies or substantial portions of the Software.
13+
14+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20+
THE SOFTWARE.
21+
"
22+
23+
IfNil = Benchmark (
24+
25+
benchmark = (
26+
| cnt |
27+
cnt := 0.
28+
1 to: 20000 do: [:i |
29+
self ifNil: [ self error: 'wrong branch 1' ].
30+
nil ifNil: [ cnt := cnt + 1 ].
31+
32+
self ifNotNil: [ cnt := cnt + 1 ].
33+
nil ifNotNil: [ self error: 'wrong branch 2' ].
34+
35+
self ifNil: [ self error: 'wrong branch 3' ] ifNotNil: [ cnt := cnt + 1 ].
36+
nil ifNil: [ cnt := cnt + 1 ] ifNotNil: [ self error: 'wrong branch 4' ].
37+
38+
self ifNotNil: [ cnt := cnt + 1 ] ifNil: [ self error: 'wrong branch 5' ].
39+
nil ifNotNil: [ self error: 'wrong branch 6' ] ifNil: [ cnt := cnt + 1 ].
40+
].
41+
^ cnt
42+
)
43+
44+
verifyResult: result = (
45+
^ 120000 = result
46+
)
47+
)

TestSuite/BooleanTest.som

+6-6
Original file line numberDiff line numberDiff line change
@@ -161,21 +161,21 @@ BooleanTest = TestCase (
161161
self assert: (nil ifNil: [ true ]).
162162
self deny: (nil ifNil: [ false ]).
163163

164-
self assert: (self ifNil: [ #notExec ]) is: self.
165-
self assert: (self ifNil: [ #notExec ]) is: self.
164+
self assert: #rcvr is: (#rcvr ifNil: [ #notExec ]).
165+
self assert: #rcvr is: (#rcvr ifNil: [ #notExec ]).
166166
)
167167

168168
testIfNotNil = (
169169
self assert: (self ifNotNil: [ true ]).
170170
self deny: (self ifNotNil: [ false ]).
171171

172-
self assert: (nil ifNotNil: [ #notExec ]) is: nil.
173-
self assert: (nil ifNotNil: [ #notExec ]) is: nil.
172+
self assert: nil is: (nil ifNotNil: [ #notExec ]).
173+
self assert: nil is: (nil ifNotNil: [ #notExec ]).
174174
)
175175

176176
testIfNilIfNotNil = (
177-
self assert: (nil ifNil: [ #exec ] ifNotNil: [ #notExec ]) is: #exec.
178-
self assert: (self ifNil: [ #notExec ] ifNotNil: [ #exec ]) is: #exec.
177+
self assert: #exec is: (nil ifNil: [ #exec ] ifNotNil: [ #notExec ]).
178+
self assert: #exec is: (self ifNil: [ #notExec ] ifNotNil: [ #exec ]).
179179
)
180180

181181
testIfNotNilIfNil = (

0 commit comments

Comments
 (0)