Unit and benchmark test usage of ::= and :=.
[cslatevm.git] / tests / benchmark / mandelbrot.slate
blob37696293ddbacda161f758fc0cfb1d7b5ae1a814
2 w@(Integer traits) mandelbrot
4   (File newNamed: 'tests/benchmark/mandelbrot.pbm' &mode: File CreateWrite)
5     sessionDo: [| :f | w mandelbrotOn: f writer]
6 ].
8 width@(Integer traits) mandelbrotOn: s@(Stream traits)
9 [| isOverLimit bits bitnum |
10   height ::= width.
11   limit2 ::= 4.0.
12   m ::= 50.
13   isOverLimit := False.
14   bits := 0.
15   bitnum := 0.
16   s ; ('P4\n%s %s\n' sprintf*, width, height).
18   0 below: height do:
19     [| :y |
20      0 below: width do:
21        [| :x zr zi cr ci i |
22         zr := 0.0.
23         zi := 0.0.
24         cr := 2.0 * (x as: Float) / (width as: Float) - 1.5.
25         ci := 2.0 * (y as: Float) / (height as: Float) - 1.0.
26         i := 0.
28         [| tr ti |
29          tr := (zr * zr) - (zi * zi) + cr.
30          ti := 2.0 * zr * zi + ci.
31          zr := tr.
32          zi := ti.
33          (isOverLimit := (zr * zr) + (zi * zi) > limit2) not
34            /\ [(i += 1) < m]] whileTrue.
36         bits := bits bitShift: 1.
37         isOverLimit ifFalse: [bits += 1].
38         bitnum += 1.
40         x = (width - 1) ifTrue: [
41           bits := bits bitShift: 8 - bitnum.
42           bitnum := 8
43         ].
45         bitnum = 8 ifTrue: [
46           s nextPut: bits.
47           bits := 0.
48           bitnum := 0
49         ]
50       ]
51    ].