Build Logs
creativescala/doodle • 3.8.0:2026-01-13
Errors
0
Warnings
90
Total Lines
626
1##################################
2Clonning https://github.com/creativescala/doodle.git into /build/repo using revision 0.32.0
3##################################
4Note: switching to 'be90196d816357a15badda83792ad31c20e30458'.
5
6You are in 'detached HEAD' state. You can look around, make experimental
7changes and commit them, and you can discard any commits you make in this
8state without impacting any branches by switching back to a branch.
9
10If you want to create a new branch to retain commits you create, you may
11do so (now or later) by using -c with the switch command. Example:
12
13 git switch -c <new-branch-name>
14
15Or undo this operation with:
16
17 git switch -
18
19Turn off this advice by setting config variable advice.detachedHead to false
20
21Would override fixed Scala version: 3.3.6
22----
23Preparing build for 3.8.0
24Scala binary version found: 3.8
25Implicitly using source version 3.8
26Scala binary version found: 3.8
27Implicitly using source version 3.8
28Would try to apply common scalacOption (best-effort, sbt/mill only):
29Append: ,REQUIRE:-source:3.8
30Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
31
32Try apply source patch:
33Path: build.sbt
34Pattern: val scala3 = "3.3.6"
35Replacement: val scala3 = "3.8.0"
36Starting compilation server
37Compiling project (Scala 3.7.3, JVM (17))
38Compiled project (Scala 3.7.3, JVM (17))
39Successfully applied pattern 'val scala3 = "3.3.6"' in build.sbt
40----
41Starting build for 3.8.0
42Execute tests: true
43sbt project found:
44Sbt version 1.11.4 is not supported, minimal supported version is 1.11.5
45Enforcing usage of sbt in version 1.11.5
46No prepare script found for project creativescala/doodle
47##################################
48Scala version: 3.8.0
49Targets: org.creativescala%doodle org.creativescala%doodle-algebra org.creativescala%doodle-core org.creativescala%doodle-docs org.creativescala%doodle-examples org.creativescala%doodle-golden org.creativescala%doodle-image org.creativescala%doodle-interact org.creativescala%doodle-java2d org.creativescala%doodle-reactor org.creativescala%doodle-svg org.creativescala%doodle-turtle
50Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.6\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
51##################################
52Using extra scalacOptions: ,REQUIRE:-source:3.8
53Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
54[sbt_options] declare -a sbt_options=()
55[process_args] java_version = '17'
56[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
57# Executing command line:
58java
59-Xmx4G
60-Dcommunitybuild.scala=3.8.0
61-Dcommunitybuild.project.dependencies.add=
62-Xmx7G
63-Xms4G
64-Xss8M
65-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
66-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
67-jar
68/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
69"setCrossScalaVersions 3.8.0"
70"++3.8.0 -v"
71"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
72"set every credentials := Nil"
73"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
74"removeScalacOptionsStartingWith -P:wartremover"
75
76moduleMappings
77"runBuild 3.8.0 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.6\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}""" org.creativescala%doodle org.creativescala%doodle-algebra org.creativescala%doodle-core org.creativescala%doodle-docs org.creativescala%doodle-examples org.creativescala%doodle-golden org.creativescala%doodle-image org.creativescala%doodle-interact org.creativescala%doodle-java2d org.creativescala%doodle-reactor org.creativescala%doodle-svg org.creativescala%doodle-turtle"
78
79[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
80[info] loading settings for project repo-build-build from plugins.sbt...
81[info] loading project definition from /build/repo/project/project
82[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
83[info] loading project definition from /build/repo/project
84[info] compiling 3 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
85[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
86[info] Compilation completed in 8.333s.
87[info] done compiling
88[info] loading settings for project repo from build.sbt...
89[info] resolving key references (29982 settings) ...
90[info] set scmInfo to https://github.com/creativescala/doodle
91[info] set current project to repo (in build file:/build/repo/)
92Execute setCrossScalaVersions: 3.8.0
93OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in turtleJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in unidocs/crossScalaVersions
95[info] set scmInfo to https://github.com/creativescala/doodle
96OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in rootJVM/crossScalaVersions
97OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in golden/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in docs/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in canvas/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in coreJVM/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in examplesJS/crossScalaVersions
102OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in repo/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in interactJVM/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in algebraJS/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in examplesJVM/crossScalaVersions
106OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in java2d/crossScalaVersions
107OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in turtleJS/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in coreJS/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in rootJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in reactorJS/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in algebraJVM/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in imageJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in imageJS/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in reactorJVM/crossScalaVersions
115OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in interactJS/crossScalaVersions
116OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in svgJS/crossScalaVersions
117OpenCB::Changing crossVersion 3.8.0 -> 3.8.0 in svgJVM/crossScalaVersions
118[info] set current project to repo (in build file:/build/repo/)
119[info] Setting Scala version to 3.8.0 on 24 projects.
120[info] Switching Scala version on:
121[info] reactorJS (3.8.0)
122[info] imageJS (3.8.0)
123[info] unidocs (3.8.0)
124[info] rootJS (3.8.0)
125[info] docs (3.8.0)
126[info] reactorJVM (3.8.0)
127[info] coreJS (3.8.0)
128[info] examplesJS (3.8.0)
129[info] turtleJS (3.8.0)
130[info] coreJVM (3.8.0)
131[info] rootJVM (3.8.0)
132[info] interactJS (3.8.0)
133[info] interactJVM (3.8.0)
134[info] java2d (3.8.0)
135[info] examplesJVM (3.8.0)
136[info] algebraJVM (3.8.0)
137[info] algebraJS (3.8.0)
138[info] * repo (3.8.0)
139[info] turtleJVM (3.8.0)
140[info] imageJVM (3.8.0)
141[info] svgJVM (3.8.0)
142[info] svgJS (3.8.0)
143[info] golden (3.8.0)
144[info] canvas (3.8.0)
145[info] Excluding projects:
146[info] Reapplying settings...
147[info] set scmInfo to https://github.com/creativescala/doodle
148[info] set current project to repo (in build file:/build/repo/)
149Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
150[info] Reapplying settings...
151[info] set scmInfo to https://github.com/creativescala/doodle
152[info] set current project to repo (in build file:/build/repo/)
153[info] Defining Global / credentials, algebraJS / credentials and 22 others.
154[info] The new values will be used by Compile / scalafmtOnly, IntegrationTest / scalafmtOnly and 238 others.
155[info] Run `last` for details.
156[info] Reapplying settings...
157[info] set scmInfo to https://github.com/creativescala/doodle
158[info] set current project to repo (in build file:/build/repo/)
159Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
160[info] Reapplying settings...
161OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
162
163 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
164 Did you mean rootJVM / allExcludeDependencies ?
165 , retry without global scopes
166[info] Reapplying settings...
167[info] set scmInfo to https://github.com/creativescala/doodle
168[info] set current project to repo (in build file:/build/repo/)
169Execute removeScalacOptionsStartingWith: -P:wartremover
170[info] Reapplying settings...
171[info] set scmInfo to https://github.com/creativescala/doodle
172[info] set current project to repo (in build file:/build/repo/)
173[success] Total time: 0 s, completed Jan 13, 2026, 5:00:49 PM
174Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3 = \"3.3.6\"","replaceWith":"val scala3 = \"<SCALA_VERSION>\""}]}
175Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
176Starting build...
177Projects: Set(unidocs, reactorJVM, coreJVM, rootJVM, interactJVM, java2d, examplesJVM, algebraJVM, turtleJVM, imageJVM, svgJVM, golden)
178Starting build for ProjectRef(file:/build/repo/,interactJVM) (doodle-interact)... [0/12]
179OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
180OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
181OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
182Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/interact/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
183[info] compiling 29 Scala sources to /build/repo/core/jvm/target/scala-3.8.0/classes ...
184[warn] -- [E198] Unused Symbol Warning: /build/repo/core/shared/src/main/scala/doodle/core/Transform.scala:20:24
185[warn] 20 |import scala.annotation.tailrec
186[warn] | ^^^^^^^
187[warn] | unused import
188[warn] -- [E198] Unused Symbol Warning: /build/repo/core/shared/src/main/scala/doodle/random/Sampler.scala:54:4
189[warn] 54 | rng =>
190[warn] | ^^^
191[warn] | unused explicit parameter
192[warn] -- [E194] Potential Issue Warning: /build/repo/core/shared/src/main/scala/doodle/random/Random.scala:26:6
193[warn] 26 | def run(rng: scala.util.Random): A =
194[warn] | ^
195[warn] |Extension method run will never be selected from type Free
196[warn] |because Free already has a member with the same name and compatible parameter types.
197[warn] |
198[warn] | longer explanation available when compiling with `-explain`
199[warn] three warnings found
200[info] done compiling
201[info] compiling 64 Scala sources to /build/repo/algebra/jvm/target/scala-3.8.0/classes ...
202[warn] -- [E198] Unused Symbol Warning: /build/repo/algebra/jvm/src/main/scala/doodle/syntax/BufferedImageWriterSyntax.scala:54:8
203[warn] 54 | r: IORuntime
204[warn] | ^
205[warn] | unused implicit parameter
206[warn] -- [E198] Unused Symbol Warning: /build/repo/algebra/shared/src/main/scala/doodle/algebra/generic/Finalized.scala:23:17
207[warn] 23 |import cats.data.*
208[warn] | ^
209[warn] | unused import
210[warn] two warnings found
211[info] done compiling
212[info] compiling 20 Scala sources to /build/repo/interact/jvm/target/scala-3.8.0/classes ...
213[warn] -- [E198] Unused Symbol Warning: /build/repo/interact/shared/src/main/scala/doodle/interact/syntax/MouseOverSyntax.scala:28:6
214[warn] 28 | picture: Picture[Alg, A]
215[warn] | ^^^^^^^
216[warn] | unused explicit parameter
217[warn] one warning found
218[info] done compiling
219[info] compiling 14 Scala sources to /build/repo/core/jvm/target/scala-3.8.0/test-classes ...
220[info] done compiling
221[info] compiling 14 Scala sources to /build/repo/algebra/jvm/target/scala-3.8.0/test-classes ...
222[warn] -- [E198] Unused Symbol Warning: /build/repo/algebra/shared/src/test/scala/doodle/algebra/generic/TestAlgebra.scala:55:22
223[warn] 55 | fa.flatMap { (bb, rdr) =>
224[warn] | ^^
225[warn] | unused explicit parameter
226[warn] one warning found
227[info] done compiling
228[info] compiling 3 Scala sources to /build/repo/interact/jvm/target/scala-3.8.0/test-classes ...
229[info] done compiling
230[info] + Easing properties.identity is the identity: OK, passed 100 tests.
231[info] + Easing properties.followedBy sends [0,0.5) to first function: OK, passed 100 tests.
232[info] + Easing properties.ends at 1: OK, proved property.
233[info] + Easing properties.starts at 0: OK, proved property.
234[info] + Easing properties.reflect is its own inverse: OK, passed 100 tests.
235[info] + Easing properties.followedBy sends [0.5,1.0] to second function: OK, passed 100 tests.
236doodle.interact.animation.InterpolationSpec:
237 + upTo empty range produces no output 0.319s
238 + upToIncluding empty range produces single output 0.016s
239 + upTo is empty when steps is zero 0.032s
240 + upToIncluding is empty when steps is zero 0.019s
241 + upTo produces requested number of steps when range is not empty 0.029s
242 + upToIncluding produces requested number of steps when range is not empty 0.03s
243 + upTo produces expected data 0.022s
244 + upToIncluding produces expected data 0.019s
245 + upToIncluding ends on stop 0.018s
246 + map transforms data 0.014s
247 + constant is always constant 0.03s
248doodle.interact.animation.TransducerSpec:
249 + empty produces no output 0.326s
250 + pure produces just one output 0.013s
251 + toList generates all elements from the transducer 0.055s
252 + product produces shortest pairs 0.054s
253 + ++ combines transducers in series 0.034s
254 + and combines transducers in parallel 0.129s
255 + and retains last value of first transducer to stop 0.018s
256 + andThen passes last output to the second transducer 0.021s
257 + repeat repeats the given number of times 0.027s
258 + repeatForever seems to repeat forever 0.093s
259 + scanLeft produces cumulative results 0.011s
260 + Transducer.scanLeft produces expected output 0.256s
261 + Transducer.scanLeftUntil runs until the stop condition is met 0.01s
262Starting build for ProjectRef(file:/build/repo/,examplesJVM) (doodle-examples)... [1/12]
263Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/examples/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
264[info] compiling 42 Scala sources and 1 Java source to /build/repo/java2d/target/scala-3.8.0/classes ...
265[warn] -- [E198] Unused Symbol Warning: /build/repo/java2d/src/main/scala/doodle/java2d/algebra/Algebra.scala:64:22
266[warn] 64 | fa.flatMap { (bb, rdr) =>
267[warn] | ^^
268[warn] | unused explicit parameter
269[warn] -- [E198] Unused Symbol Warning: /build/repo/java2d/src/main/scala/doodle/java2d/effect/Frame.scala:100:43
270[warn] 100 | case DoNotBlock extends BlockingBehavior(canvas => IO.unit)
271[warn] | ^^^^^^
272[warn] | unused explicit parameter
273[warn] -- [E198] Unused Symbol Warning: /build/repo/java2d/src/main/scala/doodle/java2d/effect/RenderRequest.scala:24:37
274[warn] 24 |import doodle.java2d.algebra.reified.Reified
275[warn] | ^^^^^^^
276[warn] | unused import
277[warn] three warnings found
278[info] done compiling
279[info] compiling 20 Scala sources to /build/repo/svg/jvm/target/scala-3.8.0/classes ...
280[info] compiling 50 Scala sources to /build/repo/image/jvm/target/scala-3.8.0/classes ...
281[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/jvm/src/main/scala/doodle/svg/algebra/Algebra.scala:79:24
282[warn] 79 | fa.flatMap { (bb, rdr) =>
283[warn] | ^^
284[warn] | unused explicit parameter
285[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/main/scala/doodle/svg/algebra/Filter.scala:37:25
286[warn] 37 | Finalized.leaf { dc =>
287[warn] | ^^
288[warn] | unused explicit parameter
289[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/main/scala/doodle/svg/algebra/Filter.scala:86:25
290[warn] 86 | Finalized.leaf { dc =>
291[warn] | ^^
292[warn] | unused explicit parameter
293[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/main/scala/doodle/svg/algebra/Filter.scala:112:25
294[warn] 112 | Finalized.leaf { dc =>
295[warn] | ^^
296[warn] | unused explicit parameter
297[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/main/scala/doodle/svg/algebra/Image.scala:37:23
298[warn] 37 | Finalized.leaf { dc =>
299[warn] | ^^
300[warn] | unused explicit parameter
301[warn] 5 warnings found
302[info] done compiling
303[warn] there was 1 deprecation warning; re-run with -deprecation for details
304[warn] one warning found
305[info] done compiling
306[info] compiling 6 Scala sources to /build/repo/reactor/jvm/target/scala-3.8.0/classes ...
307[warn] -- [E198] Unused Symbol Warning: /build/repo/reactor/shared/src/main/scala/doodle/reactor/syntax/AbstractReactorSyntax.scala:76:8
308[warn] 76 | r: IORuntime
309[warn] | ^
310[warn] | unused implicit parameter in extension method animateWithCanvasToIO
311[warn] one warning found
312[info] done compiling
313[info] compiling 1 Scala source to /build/repo/examples/jvm/target/scala-3.8.0/classes ...
314[warn] -- [E198] Unused Symbol Warning: /build/repo/examples/jvm/src/main/scala/doodle/examples/svg/SvgTaggedJvmExample.scala:34:15
315[warn] 34 | def drawLink(id: String): Unit =
316[warn] | ^^
317[warn] | unused explicit parameter
318[warn] one warning found
319[info] done compiling
320Starting build for ProjectRef(file:/build/repo/,svgJVM) (doodle-svg)... [2/12]
321Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/svg/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
322[info] compiling 5 Scala sources to /build/repo/svg/jvm/target/scala-3.8.0/test-classes ...
323[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/test/scala/doodle/svg/SvgLoadBitmapSpec.scala:21:19
324[warn] 21 |import doodle.core.*
325[warn] | ^
326[warn] | unused import
327[warn] -- [E198] Unused Symbol Warning: /build/repo/svg/shared/src/test/scala/doodle/svg/algebra/TestAlgebra.scala:60:24
328[warn] 60 | fa.flatMap { (bb, rdr) =>
329[warn] | ^^
330[warn] | unused explicit parameter
331[warn] two warnings found
332[info] done compiling
333doodle.svg.SvgLoadBitmapSpec:
334 + LoadBitmap creates correct SvgImageRef from URL 0.172s
335 + LoadBitmap creates SvgImageRef with dimensions 0.005s
336 + LoadBitmap creates SvgImageRef with width only 0.008s
337 + LoadBitmap creates SvgImageRef with height only 0.001s
338 + image method creates Drawing with correct bounding box 0.005s
339 + image element is properly centered 0.002s
340 + default dimensions are used when not specified 0.005s
341 + image renders to SVG image element 0.014s
342 + image without dimensions renders correctly 0.008s
343 + image with only width renders correctly 0.005s
344doodle.svg.effect.SvgSpec:
345 + circle renders to svg circle 0.197s
346 + paths of path elements render correctly 0.025s
347 + monospaced fonts render correctly 0.008s
348 + paths of points render correctly 0.022s
349doodle.svg.FilterSpec:
350 + gaussianBlur filter should render 0.329s
351 + boxBlur filter should render 0.007s
352 + detectEdges filter should render 0.003s
353 + sharpen filter should render 0.002s
354 + emboss filter should render 0.002s
355 + dropShadow filter should render 0.005s
356 + custom convolve filter should render 0.002s
357 + non-square kernel should render with two order values 0.003s
358 + filters should generate unique IDs 0.001s
359 + multiple filters can be applied 0.002s
360Starting build for ProjectRef(file:/build/repo/,unidocs) (doodle-docs)... [3/12]
361Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/unidocs/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
362Starting build for ProjectRef(file:/build/repo/,coreJVM) (doodle-core)... [4/12]
363Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/core/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
364[info] + Normalized syntax..normalized: OK, passed 100 tests.
365[info] + Coordinate properties.oneHundredPercent evaluates correctly: OK, passed 100 tests.
366doodle.random.SamplerSuite:
367 + Sampler.cyclic produces items in expected order 0.025s
368 + Sampler.random produces all allowed items 0.002s
369 + Sampler.noRepeats does not repeat previous sample 0.009s
370[info] + Coordinate properties.addition of percent and point is correct: OK, passed 100 tests.
371doodle.core.ColorSuite:
372 + toRgb should convert to expected Rgb color 0.025s
373 + toOkLCh should convert to expected OkLCh color 0.005s
374 + Hsl with 0 saturation should convert to gray Rgb 0.001s
375 + Hsl spin should transform correctly 0.002s
376 + Fade in/out should transform correctly 0.001s
377 + parse hex colors correctly 0.021s
378doodle.core.ColorSpec:
379 + .toRgb andThen .toOklch is the identity 0.04s
380 + .toOklch andThen .toRgb is the identity 0.018s
381[info] + Coordinate properties.minusOneHundredPercent evaluates correctly: OK, passed 100 tests.
382[info] + Coordinate properties.subtraction of percent and point is correct: OK, passed 100 tests.
383[info] + Transform.verticalReflection: OK, passed 100 tests.
384[info] + Transform.scale scale the x and y coordinates appropriately: OK, passed 100 tests.
385[info] + Transform.rotate rotate the point: OK, passed 100 tests.
386[info] + Transform.logicalToScreen: OK, passed 100 tests.
387[info] + Transform.horizontalReflection: OK, passed 100 tests.
388[info] + Transform.andThen compose the transformations: OK, passed 100 tests.
389[info] + Transform.screenToLogical: OK, passed 100 tests.
390[info] + OpenPath properties.added element is last in the list of elements: OK, passed 100 tests.
391[info] + ClosedPath properties.added element is last in the list of elements: OK, passed 100 tests.
392[info] + Angle syntax properties..radians: OK, passed 100 tests.
393[info] + ClosedPath properties.appended list comes after original elements: OK, passed 100 tests.
394[info] + Angle syntax properties..degrees: OK, passed 100 tests.
395[info] + Angle syntax properties..turns: OK, passed 100 tests.
396[info] + OpenPath properties.appended list comes after original elements: OK, passed 100 tests.
397[info] + Angle properties.angle has bijection to Double as turns: OK, passed 100 tests.
398[info] + Angle properties.angle has bijection to Double as radians: OK, passed 100 tests.
399[info] + Angle properties.angle negation is inverse: OK, passed 100 tests.
400[info] + Angle properties.angle double negation is identity: OK, passed 100 tests.
401[info] + Angle properties.angle has bijection to Double as degrees: OK, passed 100 tests.
402Starting build for ProjectRef(file:/build/repo/,java2d) (doodle-java2d)... [5/12]
403Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/java2d/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
404[info] compiling 6 Scala sources to /build/repo/java2d/target/scala-3.8.0/test-classes ...
405[info] done compiling
406doodle.java2d.BufferedImageWriteSuite:
407 + writing to file produces the same output as writing BufferedImage to file 0.214s
408doodle.java2d.effect.BlockingCircularQueueSuite:
409 + Sequential access returns expected values 0.005s
410doodle.java2d.ToPictureSuite:
411 + toPicture should work with png 0.336s
412 + toPicture should work with gif 0.019s
413 + toPicture should work with jpg 0.014s
414doodle.java2d.Base64WriterSuite:
415 + base64 should work with png 0.318s
416 + base64 should work with gif 0.026s
417 + base64 should work with jpg 0.029s
418doodle.java2d.algebra.Java2dLoadBitmapSuite:
419 + LoadBitmap should successfully load a valid image file 0.022s
420 + LoadBitmap should return FileNotFound for non-existent file 0.007s
421 + LoadBitmap should return InvalidFormat for non-image file 0.008s
422 + LoadBitmap should work with Path 0.006s
423 + BufferedImage should convert to Picture using existing ToPicture 0.001s
424 + Complete flow: load image and convert to Picture 0.02s
425doodle.java2d.FileWriterSuite:
426 + write should work with png 0.318s
427 + write should work with gif 0.019s
428 + write should work with pdf 0.141s
429 + write should work with jpg 0.003s
430Starting build for ProjectRef(file:/build/repo/,imageJVM) (doodle-image)... [6/12]
431Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/image/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
432Starting build for ProjectRef(file:/build/repo/,reactorJVM) (doodle-reactor)... [7/12]
433Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/reactor/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
434Starting build for ProjectRef(file:/build/repo/,rootJVM) (doodle)... [8/12]
435Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
436[info] compiling 6 Scala sources to /build/repo/turtle/jvm/target/scala-3.8.0/classes ...
437[info] done compiling
438Starting build for ProjectRef(file:/build/repo/,algebraJVM) (doodle-algebra)... [9/12]
439Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/algebra/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
440[info] + LoadBitmap properties.missing files return failed IO: OK, proved property.
441[info] + LoadBitmap properties.successful loading returns IO with bitmap: OK, passed 100 tests.
442[info] + LoadBitmap properties.loadBitmap syntax works: OK, passed 100 tests.
443[info] + Style properties.last fillColor takes effect: OK, passed 100 tests.
444[info] + Size properties.height matches bounding box height: OK, passed 100 tests.
445[info] + Size properties.size matches bounding box size: OK, passed 100 tests.
446[info] + Text properties.strokeColor is preserved for text: OK, passed 100 tests.
447[info] + Size properties.width matches bounding box width: OK, passed 100 tests.
448[info] + Generic algebra properties.Above doubles the height: OK, passed 100 tests.
449[info] + Generic algebra properties.Beside doubles the width: OK, passed 100 tests.
450[info] + Generic algebra properties.On doesn't change the bounding box: OK, passed 100 tests.
451[info] + Layout properties.margin expands bounding box by the correct amount: OK, passed 100 tests.
452[info] + Layout properties.size sets bounding box to the correct size: OK, passed 100 tests.
453[info] + Layout properties.above reifies correctly: OK, passed 100 tests.
454[info] + Layout properties.on generates bounding boxes with the correct size: OK, passed 100 tests.
455[info] + Layout properties.above doubles size of image: OK, passed 100 tests.
456[info] + Layout properties.beside generates bounding boxes with the correct size: OK, passed 100 tests.
457[info] + Layout properties.above generates bounding boxes with the correct size: OK, passed 100 tests.
458[info] + Layout properties.hand generated path bounding boxes are correct: OK, proved property.
459[info] + Layout properties.hand generated at bounding boxes are correct: OK, proved property.
460[info] + Layout properties.at never decreases the size of the bounding box: OK, passed 100 tests.
461Starting build for ProjectRef(file:/build/repo/,turtleJVM) (doodle-turtle)... [10/12]
462Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/turtle/jvm/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
463Starting build for ProjectRef(file:/build/repo/,golden) (doodle-golden)... [11/12]
464Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wvalue-discard, -Xkind-projector:underscores, --java-output-version:17, -Xsemanticdb, -semanticdb-target, /build/repo/golden/target/scala-3.8.0/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
465[info] compiling 9 Scala sources to /build/repo/golden/target/scala-3.8.0/test-classes ...
466[info] done compiling
467doodle.golden.FrameBackground:
468 + black-background 0.01s
469 + red-background 0.0s
470doodle.golden.GradientStroke:
471 + linear-gradient-stroke 0.197s
472 + radial-gradient-stroke 0.032s
473doodle.golden.Layout:
474 + layout-size 0.044s
475doodle.golden.ImageLayout:
476 + layout-at-debug 0.313s
477 + image-landmarks 0.074s
478 + image-size 0.014s
479doodle.golden.Text:
480 + text-serif-default 0.158s
481 + text-sans-serif-default 0.023s
482 + text-serif-48pt 0.042s
483 + text-sans-serif-48pt 0.018s
484 + text-on-circle 0.011s
485 + text-color 0.027s
486doodle.golden.Path:
487 + path-polygons 0.28s
488 + path-stars 0.064s
489 + path-rounded-rectangle 0.019s
490 + path-equilateral-triangle 0.029s
491 + path-polygons-1 0.054s
492 + path-stars-1 0.049s
493 + path-rounded-rectangle-1 0.016s
494 + path-equilateral-triangle-1 0.025s
495
496************************
497Build summary:
498[{
499 "module": "doodle-interact",
500 "compile": {"status": "ok", "tookMs": 19461, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
501 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
502 "test-compile": {"status": "ok", "tookMs": 8092, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
503 "test": {"status": "ok", "tookMs": 1768, "passed": 30, "failed": 0, "ignored": 0, "skipped": 0, "total": 30, "byFramework": [{"framework": "munit", "stats": {"passed": 24, "failed": 0, "ignored": 0, "skipped": 0, "total": 24}},{"framework": "unknown", "stats": {"passed": 6, "failed": 0, "ignored": 0, "skipped": 0, "total": 6}}]},
504 "publish": {"status": "skipped", "tookMs": 0},
505 "metadata": {
506 "crossScalaVersions": ["3.3.6"]
507}
508},{
509 "module": "doodle-examples",
510 "compile": {"status": "ok", "tookMs": 12775, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
511 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
512 "test-compile": {"status": "ok", "tookMs": 448, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
513 "test": {"status": "ok", "tookMs": 433, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
514 "publish": {"status": "skipped", "tookMs": 0},
515 "metadata": {
516 "crossScalaVersions": ["3.3.6"]
517}
518},{
519 "module": "doodle-svg",
520 "compile": {"status": "ok", "tookMs": 210, "warnings": 5, "errors": 0, "sourceVersion": "3.8"},
521 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
522 "test-compile": {"status": "ok", "tookMs": 1287, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
523 "test": {"status": "ok", "tookMs": 851, "passed": 24, "failed": 0, "ignored": 0, "skipped": 0, "total": 24, "byFramework": [{"framework": "munit", "stats": {"passed": 24, "failed": 0, "ignored": 0, "skipped": 0, "total": 24}}]},
524 "publish": {"status": "skipped", "tookMs": 0},
525 "metadata": {
526 "crossScalaVersions": ["3.3.6"]
527}
528},{
529 "module": "doodle-docs",
530 "compile": {"status": "ok", "tookMs": 44, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
531 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
532 "test-compile": {"status": "ok", "tookMs": 74, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
533 "test": {"status": "ok", "tookMs": 56, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
534 "publish": {"status": "skipped", "tookMs": 0},
535 "metadata": {
536 "crossScalaVersions": ["3.3.6"]
537}
538},{
539 "module": "doodle-core",
540 "compile": {"status": "ok", "tookMs": 53, "warnings": 3, "errors": 0, "sourceVersion": "3.8"},
541 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
542 "test-compile": {"status": "ok", "tookMs": 100, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
543 "test": {"status": "ok", "tookMs": 408, "passed": 35, "failed": 0, "ignored": 0, "skipped": 0, "total": 35, "byFramework": [{"framework": "munit", "stats": {"passed": 11, "failed": 0, "ignored": 0, "skipped": 0, "total": 11}},{"framework": "unknown", "stats": {"passed": 24, "failed": 0, "ignored": 0, "skipped": 0, "total": 24}}]},
544 "publish": {"status": "skipped", "tookMs": 0},
545 "metadata": {
546 "crossScalaVersions": ["3.3.6"]
547}
548},{
549 "module": "doodle-java2d",
550 "compile": {"status": "ok", "tookMs": 205, "warnings": 3, "errors": 0, "sourceVersion": "3.8"},
551 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
552 "test-compile": {"status": "ok", "tookMs": 1007, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
553 "test": {"status": "ok", "tookMs": 835, "passed": 18, "failed": 0, "ignored": 0, "skipped": 0, "total": 18, "byFramework": [{"framework": "munit", "stats": {"passed": 18, "failed": 0, "ignored": 0, "skipped": 0, "total": 18}}]},
554 "publish": {"status": "skipped", "tookMs": 0},
555 "metadata": {
556 "crossScalaVersions": ["3.3.6"]
557}
558},{
559 "module": "doodle-image",
560 "compile": {"status": "ok", "tookMs": 225, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
561 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
562 "test-compile": {"status": "ok", "tookMs": 284, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
563 "test": {"status": "ok", "tookMs": 300, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
564 "publish": {"status": "skipped", "tookMs": 0},
565 "metadata": {
566 "crossScalaVersions": ["3.3.6"]
567}
568},{
569 "module": "doodle-reactor",
570 "compile": {"status": "ok", "tookMs": 265, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
571 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
572 "test-compile": {"status": "ok", "tookMs": 342, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
573 "test": {"status": "ok", "tookMs": 297, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
574 "publish": {"status": "skipped", "tookMs": 0},
575 "metadata": {
576 "crossScalaVersions": ["3.3.6"]
577}
578},{
579 "module": "doodle",
580 "compile": {"status": "ok", "tookMs": 1049, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
581 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
582 "test-compile": {"status": "ok", "tookMs": 591, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
583 "test": {"status": "ok", "tookMs": 459, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
584 "publish": {"status": "skipped", "tookMs": 0},
585 "metadata": {
586 "crossScalaVersions": ["3.3.6"]
587}
588},{
589 "module": "doodle-algebra",
590 "compile": {"status": "ok", "tookMs": 112, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
591 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
592 "test-compile": {"status": "ok", "tookMs": 169, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
593 "test": {"status": "ok", "tookMs": 1048, "passed": 21, "failed": 0, "ignored": 0, "skipped": 0, "total": 21, "byFramework": [{"framework": "unknown", "stats": {"passed": 21, "failed": 0, "ignored": 0, "skipped": 0, "total": 21}}]},
594 "publish": {"status": "skipped", "tookMs": 0},
595 "metadata": {
596 "crossScalaVersions": ["3.3.6"]
597}
598},{
599 "module": "doodle-turtle",
600 "compile": {"status": "ok", "tookMs": 286, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
601 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
602 "test-compile": {"status": "ok", "tookMs": 419, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
603 "test": {"status": "ok", "tookMs": 331, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
604 "publish": {"status": "skipped", "tookMs": 0},
605 "metadata": {
606 "crossScalaVersions": ["3.3.6"]
607}
608},{
609 "module": "doodle-golden",
610 "compile": {"status": "ok", "tookMs": 283, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
611 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
612 "test-compile": {"status": "ok", "tookMs": 2471, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
613 "test": {"status": "ok", "tookMs": 1270, "passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22, "byFramework": [{"framework": "munit", "stats": {"passed": 22, "failed": 0, "ignored": 0, "skipped": 0, "total": 22}}]},
614 "publish": {"status": "skipped", "tookMs": 0},
615 "metadata": {
616 "crossScalaVersions": ["3.3.6"]
617}
618}]
619************************
620[success] Total time: 70 s (0:01:10.0), completed Jan 13, 2026, 5:01:59 PM
621[0JChecking patch project/plugins.sbt...
622Checking patch project/build.properties...
623Checking patch build.sbt...
624Applied patch project/plugins.sbt cleanly.
625Applied patch project/build.properties cleanly.
626Applied patch build.sbt cleanly.