Build Logs
rayrobdod/string-context-parser-combinator • 3.8.0:2026-01-13
Errors
0
Warnings
19
Total Lines
598
1##################################
2Clonning https://github.com/rayrobdod/string-context-parser-combinator.git into /build/repo using revision 0.1.1
3##################################
4Note: switching to 'cb5e72cc6d004623956e4dfe1328e912ba661a69'.
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
21----
22Preparing build for 3.8.0
23Scala binary version found: 3.8
24Implicitly using source version 3.8
25Scala binary version found: 3.8
26Implicitly using source version 3.8
27Would try to apply common scalacOption (best-effort, sbt/mill only):
28Append: ,REQUIRE:-source:3.8
29Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
30
31Try apply source patch:
32Path: build.sbt
33Pattern: "versions.json",
34Replacement: "versions.json"
35Starting compilation server
36Compiling project (Scala 3.7.3, JVM (21))
37Compiled project (Scala 3.7.3, JVM (21))
38Failed to apply pattern '"versions.json",' in build.sbt
39----
40Starting build for 3.8.0
41Execute tests: true
42sbt project found:
43Sbt version 1.10.7 is not supported, minimal supported version is 1.11.5
44Enforcing usage of sbt in version 1.11.5
45No prepare script found for project rayrobdod/string-context-parser-combinator
46##################################
47Scala version: 3.8.0
48Targets: name.rayrobdod%string-context-parser-combinator
49Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"21"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"\"versions.json\",","replaceWith":"\"versions.json\""}]}
50##################################
51Using extra scalacOptions: ,REQUIRE:-source:3.8
52Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
53[sbt_options] declare -a sbt_options=()
54[process_args] java_version = '21'
55[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_21/rt.jar'
56# Executing command line:
57java
58-Dfile.encoding=UTF-8
59-Xmx2G
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_21
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":"21"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"\"versions.json\",","replaceWith":"\"versions.json\""}]}""" name.rayrobdod%string-context-parser-combinator"
78
79[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 21)
80[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
81[info] loading project definition from /build/repo/project
82[info] compiling 5 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
83[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
84[info] Compilation completed in 7.89s.
85[info] done compiling
86[info] loading settings for project repo from build.sbt...
87[info] resolving key references (29955 settings) ...
88[info] set current project to repo (in build file:/build/repo/)
89Execute setCrossScalaVersions: 3.8.0
90OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in jsonJS3/crossScalaVersions
91OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in jsonJS3/crossScalaVersions
92OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in timeNative/crossScalaVersions
93OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in baseJS3/crossScalaVersions
94OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in baseJS3/crossScalaVersions
95OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in uri3/crossScalaVersions
96OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in uri3/crossScalaVersions
97OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in xml3/crossScalaVersions
98OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in xml3/crossScalaVersions
99OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in base3/crossScalaVersions
100OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in base3/crossScalaVersions
101OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in jsonNative3/crossScalaVersions
102OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in jsonNative3/crossScalaVersions
103OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in jsonNative/crossScalaVersions
104OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in timeJS3/crossScalaVersions
105OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in timeJS3/crossScalaVersions
106OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in timeNative3/crossScalaVersions
107OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in timeNative3/crossScalaVersions
108OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in baseNative/crossScalaVersions
109OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in baseJS/crossScalaVersions
110OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in time3/crossScalaVersions
111OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in time3/crossScalaVersions
112OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in uri/crossScalaVersions
113OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in timeJS/crossScalaVersions
114OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in json3/crossScalaVersions
115OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in json3/crossScalaVersions
116OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in time/crossScalaVersions
117OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in base/crossScalaVersions
118OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in jsonJS/crossScalaVersions
119OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(2.13.16) in json/crossScalaVersions
120OpenCB::Changing crossVersion 3.3.5 -> 3.8.0 in baseNative3/crossScalaVersions
121OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in baseNative3/crossScalaVersions
122[info] set current project to repo (in build file:/build/repo/)
123[info] Setting Scala version to 3.8.0 on 11 projects.
124[info] Switching Scala version on:
125[info] base3 (3.8.0)
126[info] jsonNative3 (3.8.0)
127[info] jsonJS3 (3.8.0)
128[info] baseJS3 (3.8.0)
129[info] baseNative3 (3.8.0)
130[info] json3 (3.8.0)
131[info] time3 (3.8.0)
132[info] timeNative3 (3.8.0)
133[info] uri3 (3.8.0)
134[info] xml3 (3.8.0)
135[info] timeJS3 (3.8.0)
136[info] Excluding projects:
137[info] jsonNative (2.13.16)
138[info] json (2.13.16)
139[info] jsonJS2_12 (2.12.20)
140[info] uri (2.13.16)
141[info] baseNative2_12 (2.12.20)
142[info] jsonNative2_12 (2.12.20)
143[info] time2_12 (2.12.20)
144[info] json2_12 (2.12.20)
145[info] timeJS2_12 (2.12.20)
146[info] base (2.13.16)
147[info] baseJS2_12 (2.12.20)
148[info] timeNative2_12 (2.12.20)
149[info] timeJS (2.13.16)
150[info] baseJS (2.13.16)
151[info] time (2.13.16)
152[info] * repo (2.12.20)
153[info] timeNative (2.13.16)
154[info] jsonJS (2.13.16)
155[info] base2_12 (2.12.20)
156[info] uri2_12 (2.12.20)
157[info] baseNative (2.13.16)
158[info] Reapplying settings...
159[info] set current project to repo (in build file:/build/repo/)
160Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
161[info] Reapplying settings...
162[info] set current project to repo (in build file:/build/repo/)
163[info] Defining Global / credentials, base / credentials and 30 others.
164[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 159 others.
165[info] Run `last` for details.
166[info] Reapplying settings...
167[info] set current project to repo (in build file:/build/repo/)
168Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
169[info] Reapplying settings...
170OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
171
172 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
173 Did you mean jsonJS2_12 / allExcludeDependencies ?
174 , retry without global scopes
175[info] Reapplying settings...
176[info] set current project to repo (in build file:/build/repo/)
177Execute removeScalacOptionsStartingWith: -P:wartremover
178[info] Reapplying settings...
179[info] set current project to repo (in build file:/build/repo/)
180[success] Total time: 0 s, completed Jan 13, 2026, 4:37:08 PM
181Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"21"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"\"versions.json\",","replaceWith":"\"versions.json\""}]}
182Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
183Starting build...
184Projects: Set(base3)
185Starting build for ProjectRef(file:/build/repo/,base3) (string-context-parser-combinator)... [0/1]
186OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
187OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
188OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
189OpenCB::Filter out '-Xfatal-warnings', matches setting pattern '^-?-Xfatal-warnings'
190Compile scalacOptions: -encoding, utf8, -unchecked, -language:experimental.macros, -language:higherKinds, -language:implicitConversions, -Xkind-projector, -Wvalue-discard, -Wnonunit-statement, -Wunused:implicits, -Wunused:explicits, -Wunused:imports, -Wunused:locals, -Wunused:params, -Wunused:privates, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
191[info] compiling 52 Scala sources to /build/repo/Base/target/jvm-3/classes ...
192[warn] -- [E198] Unused Symbol Warning: /build/repo/Base/src/main/scala-3/VersionSpecificUnapplyExpr.scala:24:7
193[warn] 24 | {(value:Expr[Z]) => exprTrue},
194[warn] | ^^^^^
195[warn] | unused explicit parameter
196[warn] -- [E198] Unused Symbol Warning: /build/repo/Base/src/main/scala-3/typeclass/VersionSpecificEithered.scala:44:77
197[warn] 44 | given eitherUnitAny[Expr[_], B, Z](using ev:BiOptionally[Expr, B, Z])(using Quotes):BiEithered[Expr, Unit, B, Z] = BiEithered(
198[warn] | ^
199[warn] | unused implicit parameter
200[warn] -- [E198] Unused Symbol Warning: /build/repo/Base/src/main/scala-3/typeclass/VersionSpecificEithered.scala:53:77
201[warn] 53 | given eitherAnyUnit[Expr[_], A, Z](using ev:BiOptionally[Expr, A, Z])(using Quotes):BiEithered[Expr, A, Unit, Z] = BiEithered(
202[warn] | ^
203[warn] | unused implicit parameter
204[warn] three warnings found
205[info] done compiling
206[info] compiling 6 Scala sources to /build/repo/Base/target/jvm-3/test-classes ...
207[warn] -- [E198] Unused Symbol Warning: /build/repo/Base/src/test/scala-3/PointerSpacesCompat.scala:4:18
208[warn] 4 | inline def apply(v2:Int, v3:Int) = (" " * v3) + "^"
209[warn] | ^^
210[warn] | unused explicit parameter
211[warn] one warning found
212[warn] one warning found
213[info] done compiling
214name.rayrobdod.stringContextParserCombinator.ExtractorTest.CodePointWhere.ConstFalse:
215 + throws when the input is empty 0.026s
216 + throws when the next input is an expr 0.001s
217 + throws when the next input is the character '\\u0000' 0.001s
218 + throws when the next input is the character 'a' 0.001s
219 + throws when the next input is the character '\\uFFFF' 0.003s
220 + throws when the next input is the character '\\uD83D' 0.0s
221name.rayrobdod.stringContextParserCombinator.InterpolatorTest.hide:
222 + hide does not affect parse success 0.026s
223 + on failure, when second branch is `.hide`, don't list that branch in expect 0.004s
224 + on failure, when first branch is `.hide`, don't list that branch in expect 0.001s
225 + When all branches are hidden, just says parse failed without an expects 0.0s
226name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.SequenceRepeated:
227 + matches "" 0.026s
228 + does not match "a" 0.004s
229 + does match "abcde" 0.007s
230 + does not match "abca" 0.001s
231name.rayrobdod.stringContextParserCombinator.ExtractorTest.CodePointWhere.IsPlayingCard:
232 + throws when the input is empty 0.026s
233 + throws when the next input is an expr 0.001s
234 + returns Some(List()) when input is '\\U{1F0A1}' and scrutinee is '\\u0000' 0.001s
235 + returns Some(List()) when input is '\\U{1F0A8}' and scrutinee is '\\u0000' 0.001s
236 + returns Some(List()) when input is '\\U{1F0AE}' and scrutinee is '\\u0000' 0.0s
237 + throws when the next input is the character '\\u0000' 0.001s
238 + throws when the next input is the character '\\U{1F0A0}' 0.0s
239 + throws when the next input is the character '\\U{1F0AF}' 0.001s
240 + throws when the next input is the character '\\uFFFF' 0.005s
241 + throws when the next input is the character '\\U{10FFFF}' 0.003s
242name.rayrobdod.stringContextParserCombinator.ExtractorTest.hide:
243 + hide does not affect parse success 0.005s
244 + on failure, when second branch is `.hide`, don't list that branch in expect 0.004s
245 + on failure, when first branch is `.hide`, don't list that branch in expect 0.0s
246 + When all branches are hidden, just says parse failed without an expects 0.0s
247name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.TwoOrMoreWithDelimiter:
248 + when input has length 1, throws and reports expecting the delimiter 0.002s
249name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrMoreGreedy:
250 + matches empty input 0.005s
251 + matches single input 0.0s
252 + matches multiple input 0.004s
253 + matches single input (with backtracking) 0.001s
254 + matches multiple input (with backtracking) 0.001s
255 + matches empty input (with andThen) 0.005s
256 + does not match partial child and has cut 0.0s
257 + does not match full child followed by unrelated 0.001s
258 + does not match full child followed by partial child and has cut 0.0s
259name.rayrobdod.stringContextParserCombinator.InterpolatorTest.OfType:
260 + throws when the input is empty 0.001s
261 + throws when the next value is a character 0.004s
262 + Returns the next input when the next input is an expr 0.001s
263name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CharWhere.ConstFalse:
264 + throws when the input is empty 0.0s
265 + throws when the next input is an expr 0.004s
266 + throws when the next input is the character '\\u0000' 0.002s
267 + throws when the next input is the character 'a' 0.002s
268 + throws when the next input is the character '\\uFFFF' 0.0s
269 + throws when the next input is the character '\\uD83D' 0.002s
270name.rayrobdod.stringContextParserCombinator.InterpolatorTest.Pass:
271 + returns unit when the input is empty 0.0s
272 + Returns unit when the next input is a char 0.002s
273 + Returns unit when the next input is an expr 0.0s
274name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.ZeroOrMorePossessive:
275 + when input has length 0 and scrutinee has length 0, then matches 0.005s
276 + when input has length 0 and scrutinee has length 1, then not matches 0.0s
277 + when input has length 1 and scrutinee has length 0, then not matches 0.0s
278 + when input has length 1 and scrutinee has length 1, then matches 0.001s
279 + when input has length 1 and scrutinee has length 2, then not matches 0.0s
280 + when input has length 2 and scrutinee has length 0, then not matches 0.001s
281 + when input has length 2 and scrutinee has length 1, then not matches 0.0s
282 + when input has length 2 and scrutinee has length 2, then matches 0.0s
283 + when input has length 2 and scrutinee has length 3, then not matches 0.005s
284 + will not backtrack 0.001s
285name.rayrobdod.stringContextParserCombinator.InterpolatorTest.filter.IsEven:
286 + if base parser fails, parser passes through the failure 0.001s
287 + if base parser succeeds and predicate succeeds for all branches, parser passes through the success 0.001s
288 + if base parser succeeds and predicate fails for all branches, returns a failure including the filter description 0.006s
289name.rayrobdod.stringContextParserCombinator.InterpolatorTest.andThen.TildeGt:
290 + Rejects a left-hand side that is not a void interpolator 0.038s
291name.rayrobdod.stringContextParserCombinator.InterpolatorTest.void.VoidedBar:
292 + When base matches an input, then dut result is unit 0.001s
293name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CharWhere.IsAsciiDigit:
294 + throws when the input is empty 0.0s
295 + throws when the next input is an expr 0.001s
296 + returns 0 when input is '0' 0.0s
297 + returns 9 when input is '9' 0.0s
298 + throws when the next input is the character 'a' 0.001s
299 + throws when the next input is the character '/' 0.0s
300 + throws when the next input is the character ':' 0.002s
301 + throws when the next input is the character '\\u0000' 0.001s
302 + throws when the next input is the character '\\uFFFF' 0.0s
303name.rayrobdod.stringContextParserCombinator.ExtractorTest.contramap.BarToFoo:
304 + Returns the mapped Foo when the next input is an Expr and the scrutinee is a Bar 0.003s
305name.rayrobdod.stringContextParserCombinator.ExtractorTest.CharWhere.IsAsciiDigit:
306 + throws when the input is empty 0.0s
307 + throws when the next input is an expr 0.003s
308 + returns Some(List()) when input is '0' and scrutinee is '\\u0000' 0.001s
309 + returns Some(List()) when input is '9' and scrutinee is '\\u0000' 0.0s
310 + throws when the next input is the character 'a' 0.0s
311 + throws when the next input is the character '/' 0.003s
312 + throws when the next input is the character ':' 0.0s
313 + throws when the next input is the character '\\u0000' 0.0s
314 + throws when the next input is the character '\\uFFFF' 0.002s
315name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CodePointWhere.IsPlayingCard:
316 + throws when the input is empty 0.001s
317 + throws when the next input is an expr 0.0s
318 + returns 🂡 when input is '\\U{1F0A1}' 0.006s
319 + returns 🂨 when input is '\\U{1F0A8}' 0.0s
320 + returns 🂮 when input is '\\U{1F0AE}' 0.0s
321 + throws when the next input is the character '\\u0000' 0.0s
322 + throws when the next input is the character '\\U{1F0A0}' 0.0s
323 + throws when the next input is the character '\\U{1F0AF}' 0.0s
324 + throws when the next input is the character '\\uFFFF' 0.0s
325 + throws when the next input is the character '\\U{10FFFF}' 0.003s
326name.rayrobdod.stringContextParserCombinator.ExtractorTest.andThen.TildeGt:
327 + Rejects a left-hand side that is not a void interpolator 0.007s
328name.rayrobdod.stringContextParserCombinator.InterpolatorTest.orElse:
329 + `Success | Whatever` returns that success 0.002s
330 + `Advanced | Whatever` returns that failure 0.0s
331 + `NonConsume | Success` returns that success 0.001s
332 + `NonConsume | Advanced` returns a failure that mentions only the cut branch 0.002s
333 + `NonConsume | NonConsume` returns a failure that mentions both branches 0.001s
334name.rayrobdod.stringContextParserCombinator.InterpolatorTest.filter.PoorMansMinMaxRepeats:
335 + if base parser succeeds and predicate fails for some branches, returns a success with the variants that passed the predicate 0.002s
336name.rayrobdod.stringContextParserCombinator.ExtractorTest.void.VoidedWidenedOfType:
337 + when base matches on an input, then dut matches on unit input 0.01s
338 + when base not matches on an input, then dut matches on unit input 0.001s
339 + when base fails on an input, then dut fails on unit input 0.004s
340name.rayrobdod.stringContextParserCombinator.InterpolatorTest.andThen.DigitAndThenAlpha:
341 + throws when the input is empty 0.0s
342 + throws when expression has only one char; points at EOF 0.0s
343 + passes when expression has two matching chars 0.0s
344 + throws when expression has incorrect first char; points at first char 0.001s
345 + throws when expression has incorrect second char; points at second char 0.0s
346name.rayrobdod.stringContextParserCombinator.InterpolatorTest.optionally.LazyTest:
347 + when input is empty, then returns None 0.0s
348 + when input has length 1, then returns None 0.0s
349 + when input has length two-or-greater, then returns None 0.0s
350 + when input has length 1, will backtrack to return Some 0.002s
351name.rayrobdod.stringContextParserCombinator.ExtractorTest.OfType:
352 + throws when the input is empty 0.0s
353 + throws when the next value is a character 0.0s
354 + Returns the scrutinee when the next input is an expr 0.004s
355name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.WithDelimiter:
356 + matches empty input 0.0s
357 + matches single input 0.001s
358 + matches multiple input 0.003s
359 + `a{2,}` with delim `b` does not match `a` and report expecting 'b' 0.002s
360name.rayrobdod.stringContextParserCombinator.ExtractorTest.void.VoidedCharIn:
361 + when base matches on an input, then dut matches on unit input 0.003s
362 + when base fails on an input, then dut fails on unit input 0.0s
363name.rayrobdod.stringContextParserCombinator.ExtractorTest.CharWhere.ConstTrue:
364 + throws when the input is empty 0.0s
365 + throws when the next input is an expr 0.001s
366 + returns Some(List()) when input is '\\u0000' and scrutinee is '\\u0000' 0.0s
367 + returns Some(List()) when input is 'a' and scrutinee is '\\u0000' 0.0s
368 + returns Some(List()) when input is '\\uFFFF' and scrutinee is '\\u0000' 0.001s
369name.rayrobdod.stringContextParserCombinator.ExtractorTest.orElse.PartsThatMayConsumeInput:
370 + even if left branch consumes input, then backtracking 0.001s
371name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.ZeroOrMore:
372 + when input has length 0 and scrutinee has length 0, then matches 0.0s
373 + when input has length 0 and scrutinee has length 1, then not matches 0.0s
374 + when input has length 1 and scrutinee has length 0, then not matches 0.001s
375 + when input has length 1 and scrutinee has length 1, then matches 0.0s
376 + when input has length 1 and scrutinee has length 2, then not matches 0.0s
377 + when input has length 2 and scrutinee has length 0, then not matches 0.001s
378 + when input has length 2 and scrutinee has length 1, then not matches 0.001s
379 + when input has length 2 and scrutinee has length 2, then matches 0.0s
380 + when input has length 2 and scrutinee has length 3, then not matches 0.001s
381 + will backtrack 0.005s
382name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.ZeroOrMoreWithDelimiter:
383 + when input has length 0 and scrutinee has length 0, then matches 0.0s
384 + when input has length 0 with scrutinee has length 1, then not matches 0.0s
385 + when input has length 1 with scrutinee has length 0, then not matches 0.002s
386 + when input has length 1 and scrutinee has length 1, then matches 0.0s
387 + when input has length 1 with scrutinee has length 2, then not matches 0.001s
388 + when input has length 5 with delims and scrutinee has length 5, then matches 0.001s
389 + when input has length 5 sans delims, then pattern only matches one input 0.0s
390name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.ZeroOrMoreLazy:
391 + when input has length 0 and scrutinee has length 0, then matches 0.001s
392 + when input has length 0 and scrutinee has length 1, then not matches 0.001s
393 + when input has length 1 and scrutinee has length 0, then matches 0.0s
394 + when input has length 1 and scrutinee has length 1, then not matches 0.001s
395 + when input has length 1 and scrutinee has length 2, then not matches 0.0s
396 + when input has length 2 and scrutinee has length 0, then matches 0.001s
397 + when input has length 2 and scrutinee has length 1, then not matches 0.0s
398 + when input has length 2 and scrutinee has length 2, then not matches 0.0s
399 + when input has length 2 and scrutinee has length 3, then not matches 0.001s
400 + will backtrack 0.001s
401name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.OneOrMorePosessive:
402 + does not match empty input 0.001s
403 + matches single input 0.0s
404 + matches multiple input 0.0s
405name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.OneOrMoreGreedy:
406 + does not match empty input 0.0s
407 + matches single input 0.001s
408 + matches multiple input 0.0s
409name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrMorePosessive:
410 + matches empty input 0.0s
411 + matches single input 0.0s
412 + matches multiple input 0.002s
413 + does not match single input with backtracking 0.0s
414 + does not match multiple input with backtracking 0.003s
415name.rayrobdod.stringContextParserCombinator.InterpolatorTest.map.BarToFoo:
416 + Returns the mapped Foo when the next input is an a Expr Bar 0.003s
417name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.PassRepeated:
418 + does not hang indefinitely 0.001s
419name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrOneGreedy:
420 + does not match empty input 0.0s
421 + matches single input 0.001s
422 + matches multiple input 0.0s
423name.rayrobdod.stringContextParserCombinator.typeclass.repeated.QuotedConcatenateStringTest:
424 + 0 0.001s
425 + 1 0.0s
426 + many 0.0s
427name.rayrobdod.stringContextParserCombinator.ExtractorTest.andThen.DigitAndThenAlpha:
428 + throws when the input is empty 0.001s
429 + throws when expression has only one char; points at EOF 0.0s
430 + passes when expression has two matching chars 0.001s
431 + throws when expression has incorrect first char; points at first char 0.0s
432 + throws when expression has incorrect second char; points at second char 0.0s
433name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.OneOrMoreLazy:
434 + does not match empty input 0.0s
435 + matches single input 0.0s
436 + matches multiple input 0.004s
437name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.OneOrMore:
438 + when input has length 0 then throws 0.0s
439 + when input has length 1 and scrutinee has length 0, then not matches 0.001s
440 + when input has length 1 and scrutinee has length 1, then matches 0.0s
441 + when input has length 1 and scrutinee has length 2, then not matches 0.0s
442 + when input has length 2 and scrutinee has length 0, then not matches 0.001s
443 + when input has length 2 and scrutinee has length 1, then not matches 0.0s
444 + when input has length 2 and scrutinee has length 2, then matches 0.001s
445 + when input has length 2 and scrutinee has length 3, then not matches 0.0s
446name.rayrobdod.stringContextParserCombinator.ExtractorTest.optionally.ZeroOrOne:
447 + when input has length 0 and scrutinee is None, then matches 0.0s
448 + when input has length 1 and scrutinee is None, then not matches 0.0s
449 + when input has length 0 and scrutinee is Some, then not matches 0.0s
450 + when input has length 1 and scrutinee is Some, then matches 0.0s
451name.rayrobdod.stringContextParserCombinator.typeclass.repeated.IdConcatenateString:
452 + 0 0.004s
453 + 1 0.001s
454 + many 0.001s
455name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.RepeatedRepeated:
456 + does not hang indefinitely 0.0s
457name.rayrobdod.stringContextParserCombinator.ExtractorTest.repeat.ZeroOrOne:
458 + when input has length 0 and scrutinee has length 0, then matches 0.0s
459 + when input has length 0 and scrutinee has length 1, then not matches 0.0s
460 + when input has length 1 and scrutinee has length 0, then not matches 0.001s
461 + when input has length 1 and scrutinee has length 1, then matches 0.0s
462 + when input has length 1 and scrutinee has length 2, then not matches 0.0s
463 + when input has length 2 and scrutinee has length 0, then not matches 0.0s
464 + when input has length 2 and scrutinee has length 1, then matches 0.001s
465 + when input has length 2 and scrutinee has length 2, then not matches 0.0s
466 + when input has length 2 and scrutinee has length 3, then not matches 0.0s
467name.rayrobdod.stringContextParserCombinator.InterpolatorTest.optionally.GreedyTest:
468 + when input is empty, then returns None 0.0s
469 + when input has length 1, then returns some with that value 0.0s
470 + when input has length two-or-greater, then returns some with first value 0.009s
471name.rayrobdod.stringContextParserCombinator.InterpolatorTest.optionally.PossessiveTest:
472 + when input is empty, then returns None 0.0s
473 + when input has length 1, then returns some with that value 0.001s
474 + when input has length two-or-greater, then returns some with first value 0.0s
475name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrOneLazy:
476 + does not match empty input 0.0s
477 + matches single input 0.0s
478 + matches multiple input 0.001s
479name.rayrobdod.stringContextParserCombinator.ExtractorTest.widenWith.IsInstanceOf:
480 + on match 0.002s
481 + on not match 0.004s
482name.rayrobdod.stringContextParserCombinator.ExtractorTest.orElse.IsStringOrElseIsString:
483 + when string is left and scrutinee is left, then matches 0.0s
484 + when string is left and scrutinee is right, then not matches 0.001s
485 + when string is right and scrutinee is left, then not matches 0.002s
486 + when string is right and scrutinee is right, then matches 0.0s
487 + throws if string is neither 0.001s
488name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CodePointWhere.ConstFalse:
489 + throws when the input is empty 0.0s
490 + throws when the next input is an expr 0.001s
491 + throws when the next input is the character '\\u0000' 0.0s
492 + throws when the next input is the character 'a' 0.0s
493 + throws when the next input is the character '\\uFFFF' 0.001s
494 + throws when the next input is the character '\\uD83D' 0.0s
495name.rayrobdod.stringContextParserCombinator.InterpolatorTest.End:
496 + returns unit when the input is empty 0.001s
497 + throws when the next value is a character 0.003s
498 + throws when the next input is an expr 0.0s
499name.rayrobdod.stringContextParserCombinator.InterpolatorTest.ComboAndThenRepeat:
500 + If the repeat is permissibly empty and right fails, then fails and shows both inputs as expected options 0.007s
501 + If the repeat is permissibly empty and right succeeds, then result is a success 0.001s
502 + If the repeat has consumed input, then the result matches that failure 0.0s
503 + missing right with any repeat fails and shows both inputs as options 0.004s
504 + unexpected right with any repeat fails and shows both inputs as options 0.0s
505 + input too short for repeat 0.001s
506 + input too long for repeat 0.0s
507 + pattern.repeat(Greedy) andThen subset 0.001s
508 + pattern.repeat(Greedy) andThen subset twice 0.001s
509 + pattern.repeat(Possessive) andThen subset 0.0s
510 + unexpected right with any repeat and delimiter fails and shows delimiter and right as options 0.001s
511 + successful with delimiter 0.003s
512 + right associative variant of "'[' ~ 'a'.rep(',') ~ ']' reports the delimiter as an option when the suffix is not found" 0.0s
513 + '[' ~ 'a'.rep(',') ~ ']' reports the delimiter as an option when the suffix is not found 0.0s
514name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrOnePosessive:
515 + does not match empty input 0.0s
516 + matches single input 0.001s
517 + matches multiple input 0.0s
518name.rayrobdod.stringContextParserCombinator.ExtractorTest.End:
519 + does match an empty input 0.0s
520 + throws when the next value is a character 0.0s
521 + throws when the next input is an expr 0.001s
522name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.EmptyChildParserDoesNotCauseHang:
523 + `<pass>*` does not hang indefinitely 0.001s
524 + `(a*)*` does not hang indefinitely 0.017s
525name.rayrobdod.stringContextParserCombinator.InterpolatorTest.repeat.ZeroOrMoreLazy:
526 + matches empty input 0.003s
527 + matches single input 0.0s
528 + matches multiple input 0.0s
529 + matches single input with backtracking 0.0s
530 + matches multiple input with backtracking 0.001s
531name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CharWhere.ConstTrue:
532 + throws when the input is empty 0.0s
533 + throws when the next input is an expr 0.001s
534 + returns the character when the input is a single-character string ('\\u0000') 0.0s
535 + returns the character when the input is a single-character string ('a') 0.0s
536 + returns the character when the input is a single-character string ('\\uFFFF') 0.0s
537 + Returns the first character of a multiple-character input 0.005s
538name.rayrobdod.stringContextParserCombinator.typeclass.repeated.QuotedFromSplicesUsingBuilderTest:
539 + 0 items with ifZero 0.0s
540 + 0 items without ifZero 0.001s
541 + 1 scalar with ifOneScalar 0.0s
542 + 1 scalar without ifOneScalar 0.001s
543 + multiple scalars 0.0s
544 + 1 splice with ifOneSplice 0.0s
545 + 1 splice without ifOneSplice 0.0s
546 + multiple splices 0.0s
547 + mix 0.0s
548name.rayrobdod.stringContextParserCombinator.typeclass.repeated.IdFromSplicesToList:
549 + Nil 0.001s
550 + Zero 0.005s
551 + Scalar 0.001s
552 + Splice 0.002s
553 + Mix 0.001s
554name.rayrobdod.stringContextParserCombinator.InterpolatorTest.CodePointWhere.ConstTrue:
555 + throws when the input is empty 0.001s
556 + throws when the next input is an expr 0.0s
557 + returns \u0000 when input is '\\u0000' 0.0s
558 + returns a when input is 'a' 0.0s
559 + returns when input is '\\uFFFF' 0.0s
560 + returns when input is '\\U{10FFFF}' 0.001s
561 + matches the entire surrogate pair 0.0s
562name.rayrobdod.stringContextParserCombinator.ExtractorTest.CharWhere.ConstFalse:
563 + throws when the input is empty 0.001s
564 + throws when the next input is an expr 0.0s
565 + throws when the next input is the character '\\u0000' 0.0s
566 + throws when the next input is the character 'a' 0.001s
567 + throws when the next input is the character '\\uFFFF' 0.0s
568 + throws when the next input is the character '\\uD83D' 0.0s
569name.rayrobdod.stringContextParserCombinator.ExtractorTest.CodePointWhere.ConstTrue:
570 + throws when the input is empty 0.0s
571 + throws when the next input is an expr 0.0s
572 + returns Some(List()) when input is '\\u0000' and scrutinee is '\\u0000' 0.001s
573 + returns Some(List()) when input is 'a' and scrutinee is '\\u0000' 0.0s
574 + returns Some(List()) when input is '\\uFFFF' and scrutinee is '\\u0000' 0.0s
575 + returns Some(List()) when input is '\\U{10FFFF}' and scrutinee is '\\u0000' 0.0s
576 + matches the entire surrogate pair 0.0s
577
578************************
579Build summary:
580[{
581 "module": "string-context-parser-combinator",
582 "compile": {"status": "ok", "tookMs": 12469, "warnings": 3, "errors": 0, "sourceVersion": "3.8"},
583 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
584 "test-compile": {"status": "ok", "tookMs": 5662, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
585 "test": {"status": "ok", "tookMs": 899, "passed": 299, "failed": 0, "ignored": 0, "skipped": 0, "total": 299, "byFramework": [{"framework": "munit", "stats": {"passed": 299, "failed": 0, "ignored": 0, "skipped": 0, "total": 299}}]},
586 "publish": {"status": "skipped", "tookMs": 0},
587 "metadata": {
588 "crossScalaVersions": ["2.12.20"]
589}
590}]
591************************
592[success] Total time: 21 s, completed Jan 13, 2026, 4:37:28 PM
593[0JChecking patch project/plugins.sbt...
594Checking patch project/build.properties...
595Checking patch build.sbt...
596Applied patch project/plugins.sbt cleanly.
597Applied patch project/build.properties cleanly.
598Applied patch build.sbt cleanly.