Build Logs
creativescala/doodle • 3.8.1-RC1: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.1-RC1
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.1-RC1"
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.1-RC1
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.1-RC1
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.1-RC1
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.1-RC1"
70"++3.8.1-RC1 -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.1-RC1 """{"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 9.388s.
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.1-RC1
93OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in turtleJVM/crossScalaVersions
94OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in unidocs/crossScalaVersions
95OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in rootJVM/crossScalaVersions
96[info] set scmInfo to https://github.com/creativescala/doodle
97OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in golden/crossScalaVersions
98OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in docs/crossScalaVersions
99OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in canvas/crossScalaVersions
100OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in coreJVM/crossScalaVersions
101OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in examplesJS/crossScalaVersions
102OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in repo/crossScalaVersions
103OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in interactJVM/crossScalaVersions
104OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in algebraJS/crossScalaVersions
105OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in examplesJVM/crossScalaVersions
106OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in java2d/crossScalaVersions
107OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in turtleJS/crossScalaVersions
108OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in coreJS/crossScalaVersions
109OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in rootJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in reactorJS/crossScalaVersions
111OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in algebraJVM/crossScalaVersions
112OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in imageJVM/crossScalaVersions
113OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in reactorJVM/crossScalaVersions
114OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in imageJS/crossScalaVersions
115OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in svgJS/crossScalaVersions
116OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in interactJS/crossScalaVersions
117OpenCB::Changing crossVersion 3.8.1-RC1 -> 3.8.1-RC1 in svgJVM/crossScalaVersions
118[info] set current project to repo (in build file:/build/repo/)
119[info] Setting Scala version to 3.8.1-RC1 on 24 projects.
120[info] Switching Scala version on:
121[info] reactorJS (3.8.1-RC1)
122[info] imageJS (3.8.1-RC1)
123[info] unidocs (3.8.1-RC1)
124[info] rootJS (3.8.1-RC1)
125[info] docs (3.8.1-RC1)
126[info] reactorJVM (3.8.1-RC1)
127[info] coreJS (3.8.1-RC1)
128[info] examplesJS (3.8.1-RC1)
129[info] turtleJS (3.8.1-RC1)
130[info] coreJVM (3.8.1-RC1)
131[info] rootJVM (3.8.1-RC1)
132[info] interactJS (3.8.1-RC1)
133[info] interactJVM (3.8.1-RC1)
134[info] java2d (3.8.1-RC1)
135[info] examplesJVM (3.8.1-RC1)
136[info] algebraJVM (3.8.1-RC1)
137[info] algebraJS (3.8.1-RC1)
138[info] * repo (3.8.1-RC1)
139[info] turtleJVM (3.8.1-RC1)
140[info] imageJVM (3.8.1-RC1)
141[info] svgJVM (3.8.1-RC1)
142[info] svgJS (3.8.1-RC1)
143[info] golden (3.8.1-RC1)
144[info] canvas (3.8.1-RC1)
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, 8:17:14 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.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/test-classes ...
220[info] done compiling
221[info] compiling 14 Scala sources to /build/repo/algebra/jvm/target/scala-3.8.1-RC1/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.1-RC1/test-classes ...
229[info] done compiling
230[info] + Easing properties.identity is the identity: OK, passed 100 tests.
231[info] + Easing properties.reflect is its own inverse: OK, passed 100 tests.
232[info] + Easing properties.starts at 0: OK, proved property.
233[info] + Easing properties.ends at 1: OK, proved property.
234[info] + Easing properties.followedBy sends [0,0.5) to first function: 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.393s
238 + upToIncluding empty range produces single output 0.015s
239 + upTo is empty when steps is zero 0.019s
240 + upToIncluding is empty when steps is zero 0.013s
241 + upTo produces requested number of steps when range is not empty 0.028s
242 + upToIncluding produces requested number of steps when range is not empty 0.022s
243 + upTo produces expected data 0.015s
244 + upToIncluding produces expected data 0.018s
245 + upToIncluding ends on stop 0.013s
246 + map transforms data 0.016s
247 + constant is always constant 0.024s
248doodle.interact.animation.TransducerSpec:
249 + empty produces no output 0.37s
250 + pure produces just one output 0.022s
251 + toList generates all elements from the transducer 0.044s
252 + product produces shortest pairs 0.046s
253 + ++ combines transducers in series 0.031s
254 + and combines transducers in parallel 0.091s
255 + and retains last value of first transducer to stop 0.011s
256 + andThen passes last output to the second transducer 0.013s
257 + repeat repeats the given number of times 0.026s
258 + repeatForever seems to repeat forever 0.064s
259 + scanLeft produces cumulative results 0.008s
260 + Transducer.scanLeft produces expected output 0.263s
261 + Transducer.scanLeftUntil runs until the stop condition is met 0.011s
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.1-RC1/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.1-RC1/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 50 Scala sources to /build/repo/image/jvm/target/scala-3.8.1-RC1/classes ...
280[info] compiling 20 Scala sources to /build/repo/svg/jvm/target/scala-3.8.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/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.177s
335 + LoadBitmap creates SvgImageRef with dimensions 0.007s
336 + LoadBitmap creates SvgImageRef with width only 0.004s
337 + LoadBitmap creates SvgImageRef with height only 0.001s
338 + image method creates Drawing with correct bounding box 0.004s
339 + image element is properly centered 0.002s
340 + default dimensions are used when not specified 0.001s
341 + image renders to SVG image element 0.014s
342 + image without dimensions renders correctly 0.007s
343 + image with only width renders correctly 0.006s
344doodle.svg.effect.SvgSpec:
345 + circle renders to svg circle 0.199s
346 + paths of path elements render correctly 0.026s
347 + monospaced fonts render correctly 0.017s
348 + paths of points render correctly 0.015s
349doodle.svg.FilterSpec:
350 + gaussianBlur filter should render 0.325s
351 + boxBlur filter should render 0.011s
352 + detectEdges filter should render 0.004s
353 + sharpen filter should render 0.003s
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.004s
358 + filters should generate unique IDs 0.004s
359 + multiple filters can be applied 0.004s
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.1-RC1/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.1-RC1/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
364doodle.random.SamplerSuite:
365 + Sampler.cyclic produces items in expected order 0.025s
366 + Sampler.random produces all allowed items 0.002s
367 + Sampler.noRepeats does not repeat previous sample 0.01s
368doodle.core.ColorSpec:
369 + .toRgb andThen .toOklch is the identity 0.032s
370 + .toOklch andThen .toRgb is the identity 0.011s
371doodle.core.ColorSuite:
372 + toRgb should convert to expected Rgb color 0.024s
373 + toOkLCh should convert to expected OkLCh color 0.001s
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.006s
377 + parse hex colors correctly 0.01s
378[info] + Coordinate properties.addition of percent and point is correct: OK, passed 100 tests.
379[info] + Coordinate properties.subtraction of percent and point is correct: OK, passed 100 tests.
380[info] + Coordinate properties.minusOneHundredPercent evaluates correctly: OK, passed 100 tests.
381[info] + OpenPath properties.added element is last in the list of elements: OK, passed 100 tests.
382[info] + Coordinate properties.oneHundredPercent evaluates correctly: OK, passed 100 tests.
383[info] + OpenPath properties.appended list comes after original elements: OK, passed 100 tests.
384[info] + Angle properties.angle double negation is identity: OK, passed 100 tests.
385[info] + Angle properties.angle has bijection to Double as degrees: OK, passed 100 tests.
386[info] + Angle properties.angle has bijection to Double as radians: OK, passed 100 tests.
387[info] + Angle properties.angle has bijection to Double as turns: OK, passed 100 tests.
388[info] + Angle properties.angle negation is inverse: OK, passed 100 tests.
389[info] + Transform.rotate rotate the point: OK, passed 100 tests.
390[info] + Transform.horizontalReflection: OK, passed 100 tests.
391[info] + Transform.screenToLogical: OK, passed 100 tests.
392[info] + ClosedPath properties.added element is last in the list of elements: OK, passed 100 tests.
393[info] + Transform.logicalToScreen: OK, passed 100 tests.
394[info] + Transform.scale scale the x and y coordinates appropriately: OK, passed 100 tests.
395[info] + Transform.verticalReflection: OK, passed 100 tests.
396[info] + Transform.andThen compose the transformations: OK, passed 100 tests.
397[info] + Angle syntax properties..degrees: OK, passed 100 tests.
398[info] + Normalized syntax..normalized: OK, passed 100 tests.
399[info] + ClosedPath properties.appended list comes after original elements: OK, passed 100 tests.
400[info] + Angle syntax properties..turns: OK, passed 100 tests.
401[info] + Angle syntax properties..radians: 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.1-RC1/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.1-RC1/test-classes ...
405[info] done compiling
406doodle.java2d.effect.BlockingCircularQueueSuite:
407 + Sequential access returns expected values 0.019s
408doodle.java2d.algebra.Java2dLoadBitmapSuite:
409 + LoadBitmap should successfully load a valid image file 0.221s
410 + LoadBitmap should return FileNotFound for non-existent file 0.011s
411 + LoadBitmap should return InvalidFormat for non-image file 0.011s
412 + LoadBitmap should work with Path 0.012s
413 + BufferedImage should convert to Picture using existing ToPicture 0.001s
414 + Complete flow: load image and convert to Picture 0.023s
415doodle.java2d.BufferedImageWriteSuite:
416 + writing to file produces the same output as writing BufferedImage to file 0.235s
417doodle.java2d.Base64WriterSuite:
418 + base64 should work with png 0.393s
419 + base64 should work with gif 0.039s
420 + base64 should work with jpg 0.033s
421doodle.java2d.ToPictureSuite:
422 + toPicture should work with png 0.43s
423 + toPicture should work with gif 0.046s
424 + toPicture should work with jpg 0.034s
425doodle.java2d.FileWriterSuite:
426 + write should work with png 0.143s
427 + write should work with gif 0.026s
428 + write should work with pdf 0.185s
429 + write should work with jpg 0.006s
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.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/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.1-RC1/meta, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
440[info] + LoadBitmap properties.loadBitmap syntax works: OK, passed 100 tests.
441[info] + LoadBitmap properties.missing files return failed IO: OK, proved property.
442[info] + LoadBitmap properties.successful loading returns IO with bitmap: OK, passed 100 tests.
443[info] + Size properties.size matches bounding box size: OK, passed 100 tests.
444[info] + Style properties.last fillColor takes effect: OK, passed 100 tests.
445[info] + Size properties.width matches bounding box width: OK, passed 100 tests.
446[info] + Text properties.strokeColor is preserved for text: OK, passed 100 tests.
447[info] + Size properties.height matches bounding box height: OK, passed 100 tests.
448[info] + Layout properties.size sets bounding box to the correct size: OK, passed 100 tests.
449[info] + Layout properties.on generates bounding boxes with the correct size: OK, passed 100 tests.
450[info] + Layout properties.above reifies correctly: OK, passed 100 tests.
451[info] + Layout properties.hand generated at bounding boxes are correct: OK, proved property.
452[info] + Layout properties.beside generates bounding boxes with the correct size: OK, passed 100 tests.
453[info] + Layout properties.hand generated path bounding boxes are correct: OK, proved property.
454[info] + Layout properties.at never decreases the size of the bounding box: OK, passed 100 tests.
455[info] + Layout properties.margin expands bounding box by the correct amount: OK, passed 100 tests.
456[info] + Layout properties.above generates bounding boxes with the correct size: OK, passed 100 tests.
457[info] + Generic algebra properties.Beside doubles the width: OK, passed 100 tests.
458[info] + Generic algebra properties.On doesn't change the bounding box: OK, passed 100 tests.
459[info] + Generic algebra properties.Above doubles the height: OK, passed 100 tests.
460[info] + Layout properties.above doubles size of image: 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.1-RC1/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.1-RC1/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.1-RC1/test-classes ...
466[info] done compiling
467doodle.golden.GradientStroke:
468 + linear-gradient-stroke 0.214s
469 + radial-gradient-stroke 0.038s
470doodle.golden.Layout:
471 + layout-size 0.25s
472doodle.golden.FrameBackground:
473 + black-background 0.001s
474 + red-background 0.0s
475doodle.golden.ImageLayout:
476 + layout-at-debug 0.362s
477 + image-landmarks 0.059s
478 + image-size 0.029s
479doodle.golden.Text:
480 + text-serif-default 0.037s
481 + text-sans-serif-default 0.015s
482 + text-serif-48pt 0.015s
483 + text-sans-serif-48pt 0.01s
484 + text-on-circle 0.004s
485 + text-color 0.008s
486doodle.golden.Path:
487 + path-polygons 0.284s
488 + path-stars 0.077s
489 + path-rounded-rectangle 0.023s
490 + path-equilateral-triangle 0.023s
491 + path-polygons-1 0.041s
492 + path-stars-1 0.033s
493 + path-rounded-rectangle-1 0.016s
494 + path-equilateral-triangle-1 0.056s
495
496************************
497Build summary:
498[{
499 "module": "doodle-interact",
500 "compile": {"status": "ok", "tookMs": 22540, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
501 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
502 "test-compile": {"status": "ok", "tookMs": 9586, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
503 "test": {"status": "ok", "tookMs": 1746, "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": 13679, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
511 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
512 "test-compile": {"status": "ok", "tookMs": 545, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
513 "test": {"status": "ok", "tookMs": 513, "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": 273, "warnings": 5, "errors": 0, "sourceVersion": "3.8"},
521 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
522 "test-compile": {"status": "ok", "tookMs": 1810, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
523 "test": {"status": "ok", "tookMs": 908, "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": 52, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
531 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
532 "test-compile": {"status": "ok", "tookMs": 81, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
533 "test": {"status": "ok", "tookMs": 68, "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": 48, "warnings": 3, "errors": 0, "sourceVersion": "3.8"},
541 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
542 "test-compile": {"status": "ok", "tookMs": 68, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
543 "test": {"status": "ok", "tookMs": 428, "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": 181, "warnings": 3, "errors": 0, "sourceVersion": "3.8"},
551 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
552 "test-compile": {"status": "ok", "tookMs": 1263, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
553 "test": {"status": "ok", "tookMs": 1019, "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": 330, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
561 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
562 "test-compile": {"status": "ok", "tookMs": 293, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
563 "test": {"status": "ok", "tookMs": 361, "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": 277, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
571 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
572 "test-compile": {"status": "ok", "tookMs": 309, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
573 "test": {"status": "ok", "tookMs": 308, "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": 1156, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
581 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
582 "test-compile": {"status": "ok", "tookMs": 660, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
583 "test": {"status": "ok", "tookMs": 492, "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": 108, "warnings": 2, "errors": 0, "sourceVersion": "3.8"},
591 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
592 "test-compile": {"status": "ok", "tookMs": 142, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
593 "test": {"status": "ok", "tookMs": 1137, "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": 314, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
601 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
602 "test-compile": {"status": "ok", "tookMs": 369, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
603 "test": {"status": "ok", "tookMs": 323, "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": 295, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
611 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
612 "test-compile": {"status": "ok", "tookMs": 2236, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
613 "test": {"status": "ok", "tookMs": 1212, "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: 79 s (0:01:19.0), completed Jan 13, 2026, 8:18:33 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.