Build Logs

rchillyard/number • 3.8.0-RC6:2026-01-08

Errors

9

Warnings

42

Total Lines

4051

1##################################
2Clonning https://github.com/rchillyard/number.git into /build/repo using revision
3##################################
4----
5Preparing build for 3.8.0-RC6
6Scala binary version found: 3.8
7Implicitly using source version 3.8
8Scala binary version found: 3.8
9Implicitly using source version 3.8
10Would try to apply common scalacOption (best-effort, sbt/mill only):
11Append: ,REQUIRE:-source:3.8
12Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
13----
14Starting build for 3.8.0-RC6
15Execute tests: true
16sbt project found:
17No prepare script found for project rchillyard/number
18##################################
19Scala version: 3.8.0-RC6
20Targets: com.phasmidsoftware%number com.phasmidsoftware%number-algebra com.phasmidsoftware%number-core com.phasmidsoftware%number-expression com.phasmidsoftware%number-parse com.phasmidsoftware%number-top
21Project projectConfig: {"tests":null}
22##################################
23Using extra scalacOptions: ,REQUIRE:-source:3.8
24Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
25[sbt_options] declare -a sbt_options=()
26[process_args] java_version = '17'
27[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
28# Executing command line:
29java
30-Dfile.encoding=UTF-8
31-Dcommunitybuild.scala=3.8.0-RC6
32-Dcommunitybuild.project.dependencies.add=
33-Xmx7G
34-Xms4G
35-Xss8M
36-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
37-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
38-jar
39/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
40"setCrossScalaVersions 3.8.0-RC6"
41"++3.8.0-RC6 -v"
42"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
43"set every credentials := Nil"
44"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
45"removeScalacOptionsStartingWith -P:wartremover"
46
47moduleMappings
48"runBuild 3.8.0-RC6 """{"tests":null}""" com.phasmidsoftware%number com.phasmidsoftware%number-algebra com.phasmidsoftware%number-core com.phasmidsoftware%number-expression com.phasmidsoftware%number-parse com.phasmidsoftware%number-top"
49
50[info] [launcher] getting org.scala-sbt sbt 1.11.7 (this may take some time)...
51[info] welcome to sbt 1.11.7 (Eclipse Adoptium Java 17.0.8)
52[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
53[info] loading project definition from /build/repo/project
54[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
55[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
56[info] Compilation completed in 9.011s.
57[info] done compiling
58[info] loading settings for project root from build.sbt, publish.sbt...
59[info] loading settings for project core from build.sbt...
60[info] loading settings for project algebra from build.sbt...
61[info] loading settings for project expression from build.sbt...
62[info] loading settings for project parse from build.sbt...
63[info] loading settings for project top from build.sbt...
64[info] set current project to number (in build file:/build/repo/)
65[warn] there are 2 keys that are not used by any other settings/tasks:
66[warn]
67[warn] * ThisBuild / pomIncludeRepository
68[warn] +- /build/repo/publish.sbt:46
69[warn] * ThisBuild / publishMavenStyle
70[warn] +- /build/repo/publish.sbt:13
71[warn]
72[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check
73[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key
74Execute setCrossScalaVersions: 3.8.0-RC6
75OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in top/crossScalaVersions
76OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in core/crossScalaVersions
77OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in top/crossScalaVersions
78OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in core/crossScalaVersions
79OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in expression/crossScalaVersions
80OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in expression/crossScalaVersions
81OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in root/crossScalaVersions
82OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in root/crossScalaVersions
83OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in parse/crossScalaVersions
84OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in parse/crossScalaVersions
85OpenCB::Changing crossVersion 3.7.3 -> 3.8.0-RC6 in algebra/crossScalaVersions
86OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0-RC6) in algebra/crossScalaVersions
87[info] set current project to number (in build file:/build/repo/)
88[info] Setting Scala version to 3.8.0-RC6 on 6 projects.
89[info] Switching Scala version on:
90[info] * root (3.8.0-RC6)
91[info] expression (3.8.0-RC6)
92[info] parse (3.8.0-RC6)
93[info] algebra (3.8.0-RC6)
94[info] core (3.8.0-RC6)
95[info] top (3.8.0-RC6)
96[info] Excluding projects:
97[info] Reapplying settings...
98[info] set current project to number (in build file:/build/repo/)
99Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
100[info] Reapplying settings...
101[info] set current project to number (in build file:/build/repo/)
102[info] Defining Global / credentials, ThisBuild / credentials and 5 others.
103[info] The new values will be used by Global / pgpSelectPassphrase, Global / pgpSigningKey and 30 others.
104[info] Run `last` for details.
105[info] Reapplying settings...
106[info] set current project to number (in build file:/build/repo/)
107Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
108[info] Reapplying settings...
109OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
110
111 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
112 Did you mean allExcludeDependencies ?
113 , retry without global scopes
114[info] Reapplying settings...
115[info] set current project to number (in build file:/build/repo/)
116Execute removeScalacOptionsStartingWith: -P:wartremover
117[info] Reapplying settings...
118[info] set current project to number (in build file:/build/repo/)
119[success] Total time: 0 s, completed Jan 8, 2026, 2:15:07 AM
120Build config: {"tests":null}
121Parsed config: Failure(sjsonnew.DeserializationException: Expected String as JString, but got JNull)
122Starting build...
123Projects: Set(root, expression, parse, algebra, core, top)
124Starting build for ProjectRef(file:/build/repo/,expression) (number-expression)... [0/6]
125OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
126OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
127OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
128Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wvalue-discard, -Wnonunit-statement, -explain, -Wunused:imports, -Wunused:privates, -Wunused:locals, -Wconf:msg=Couldn't resolve a member:s, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
129[info] compiling 84 Scala sources and 1 Java source to /build/repo/core/target/scala-3.8.0-RC6/classes ...
130[warn] -- [E030] Match case Unreachable Warning: /build/repo/core/src/main/scala/com/phasmidsoftware/number/core/numerical/GeneralNumber.scala:812:17
131[warn] 812 | case (NthRoot(_), NthRoot(_)) =>
132[warn] | ^^^^^^^^^^^^^^^^^^^^^^^^
133[warn] | Unreachable case
134[warn] there were 7 deprecation warnings; re-run with -deprecation for details
135[warn] two warnings found
136[info] done compiling
137[info] compiling 34 Scala sources to /build/repo/algebra/target/scala-3.8.0-RC6/classes ...
138[info] done compiling
139[info] compiling 25 Scala sources to /build/repo/expression/target/scala-3.8.0-RC6/classes ...
140[info] done compiling
141[info] compiling 23 Scala sources to /build/repo/expression/target/scala-3.8.0-RC6/test-classes ...
142[warn] -- [E198] Unused Symbol Warning: /build/repo/expression/src/test/scala/com/phasmidsoftware/number/expression/expr/ExpressionMatchersSpec.scala:1566:8
143[warn] 1566 | val e = result.get
144[warn] | ^
145[warn] | unused local definition
146[warn] there were 3 feature warnings; re-run with -feature for details
147[warn] two warnings found
148[info] done compiling
149Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
150Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
151Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
152[info] ComplexParserSpec:
153[info] ComplexParser
154[info] - should doParse
15502:16:08,470 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
15602:16:08,471 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10d7c2f3 - No custom configurators were discovered as a service.
15702:16:08,471 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10d7c2f3 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
15802:16:08,475 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10d7c2f3 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
15902:16:08,475 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
16002:16:08,476 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml]
16102:16:08,477 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@8e08b41 - Resource [logback.xml] occurs multiple times on the classpath.
16202:16:08,477 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@8e08b41 - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml]
16302:16:08,477 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@8e08b41 - Resource [logback.xml] occurs at [jar:file:/root/.cache/coursier/v1/https/repo1.maven.org/maven2/com/phasmidsoftware/flog_3/1.0.11/flog_3-1.0.11.jar!/logback.xml]
16402:16:08,477 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@8e08b41 - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml]
16502:16:08,477 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@8e08b41 - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml]
16602:16:08,619 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml
16702:16:08,620 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml}
16802:16:08,620 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
16902:16:08,623 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2a00aca1 - value "logs/Number.log" substituted for "${HOME_LOG}"
17002:16:08,627 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
17102:16:08,627 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17202:16:08,635 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17302:16:08,678 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
17402:16:08,679 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
17502:16:08,679 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
17602:16:08,680 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
17702:16:08,680 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
17802:16:08,685 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2a00aca1 - value "logs/Number.log" substituted for "${HOME_LOG}"
17902:16:08,691 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@256244248 - setting totalSizeCap to 20 GB
18002:16:08,693 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@256244248 - Archive files will be limited to [10 MB] each.
18102:16:08,693 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@256244248 - Will use gz compression
18202:16:08,699 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@256244248 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
18302:16:08,713 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@212b6159 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
18402:16:08,713 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@212b6159 - Roll-over at midnight.
18502:16:08,713 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@212b6159 - Setting initial period to 2026-01-08T01:16:08.713Z
18602:16:08,715 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
18702:16:08,717 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
18802:16:08,717 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
18902:16:08,718 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
19002:16:08,718 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
19102:16:08,718 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
19202:16:08,719 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
19302:16:08,719 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
19402:16:08,719 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@2d1d4cbe - End of configuration.
19502:16:08,720 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2d78818 - Registering current configuration as safe fallback point
19602:16:08,722 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10d7c2f3 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 248 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
197
198result = 5.000(82)
199[info] EagerOpsSpec:
200[info] EagerOps addition (+)
201[info] - should add two WholeNumbers and normalize
202[info] - should add two RationalNumbers and normalize to WholeNumber
203[info] - should add two RationalNumbers and keep as RationalNumber
204[info] - should add WholeNumber and RationalNumber
205[info] - should add fuzzy Reals and return Structure
206[info] - should add exact Real and WholeNumber
207[info] - should handle addition with zero
208[info] - should handle negative numbers
209[info] EagerOps multiplication (*)
210[info] - should multiply two WholeNumbers and normalize
211[info] - should multiply two RationalNumbers and normalize to WholeNumber
212[info] - should multiply WholeNumber and RationalNumber
213[info] - should multiply RationalNumbers keeping as RationalNumber
214[info] - should multiply fuzzy Reals and return Expression
215[info] - should handle multiplication by zero
216[info] - should handle multiplication by one
217[info] - should handle negative multiplication
218[info] EagerOps subtraction (-)
219[info] - should subtract two WholeNumbers
220[info] - should subtract resulting in negative
221[info] - should subtract RationalNumbers normalizing to WholeNumber
222[info] EagerOps division (/)
223[info] - should divide two WholeNumbers with exact result
224[info] - should divide two WholeNumbers creating RationalNumber
225[info] - should divide RationalNumbers normalizing to WholeNumber
226[info] - should handle division by one
227[info] EagerOps power (∧)
228[info] - should raise WholeNumber to power
229[info] - should handle power of zero
230[info] - should handle power of one
231[info] EagerOps mixed operations
232[info] - should structure operations on WholeNumber correctly
233[info] - should structure operations on RationalNumber correctly
234[info] - should normalize intermediate results
235[info] EagerOps with special types
236[info] - should work with InversePower
237[info] - should work with NatLog
238[info] - should work with Angle
239[info] - should work with Angle flipped
240[info] - should work with Angle mixed
241[info] EagerOps associativity and commutativity
242[info] - should be commutative for addition
243[info] - should be commutative for multiplication
244[info] - should be associative for addition
245[info] - should be associative for multiplication
246[info] EagerOps edge cases
247[info] - should handle large WholeNumbers
248[info] - should handle very small rationals
249[info] EagerOps type discovery after operations
250[info] - should have correct typeName after operation
251[info] - should have correct category after operation
252[info] - should have correct describe after operation
253[info] - should show Expression category for fuzzy operations
254[info] MillSpec:
255[info] Mill
256[info] - should pop
257[info] - should push
258[info] - should iterate
259[info] - should empty
260[info] - should apply()
261[info] - should apply(1)
262[info] - should process empty list of Items
263[info] - should create a Mill from list of Items: 42, 37, +
264[info] - should accept list of Items: 42, 37, +
265[info] - should process list of Items: 42, 37, +
266[info] - should process list of Items: 42, 37, -
267[info] - should process list of Items with Swap: 42, 37, Swap, -
268[info] - should process list of Items with Noop: 42, 37, +, Noop
269[info] - should process list of Items with Clr: 42, 37, +, c
270[info] - should process Noop
271[info] - should process list of Items: 3, 2, ∧
272[info] - should process list of Items: 7, chs
273[info] - should process list of Items: 42, 37, +, 2, *
274[info] - should process list of Items: 2, inv
275[info] - should process a String: 42 37 + 2 *
276[info] parse and evaluate
277[info] - should parse and evaluate: 2 37 + 2 *
278[info] - should parse and evaluate: 2 3 ∧
279[info] - should parse and evaluate: 2 3 /
280[info] - should parse and evaluate: 2 √
281[info] - should parse and evaluate: 73 24 <> -
282[info] - should parse and evaluate: 𝛑 cos
283[info] - should parse and evaluate: 𝜀 ln
284[info] - should parse and evaluate: 2 exp
285[info] - should parse and evaluate: 12 34 + 56 + 78 - 90 + 12 -
286[info] - should parse and evaluate: 3696
287[info] - should parse and evaluate: 207
288[info] - should parse and evaluate: 207 with leading space
289[info] - should parse and evaluate: 207 with trailing space
290[info] - should parse and evaluate: 9
291[info] - should parse 3 5 + 7 2 – *
292[info] - should parse 3 4 2 × 1 5 − 2 3 ∧ ∧ ÷ +
293[info] - should parse and evaluate: 220xxxx with trailing space
294[info] - should parse infix
295[info] TranscendentalSpec:
296[info] Transcendental constants
297[info] - should normalize Pi to Angle
298[info] - should normalize E to Real
299[info] - should normalize L2 to Real
300[info] - should normalize lgE to Real
301[info] - should normalize EulerMascheroni to itself
302[info] - should render Pi correctly
303[info] - should render E correctly
304[info] - should materialize Pi to Angle
305[info] - should materialize E to Real
306[info] - should materialize 𝛾 to Real
307[info] - should have correct isAtomic
308simplifyAggregate 3: x=Aggregate{*,<1>,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>})}; simplified=<1>; result=Match: <1>
309simplified = BiFunction{<𝛗> + <-1>}
310simplifyAggregate 4: x=1; simplified=1; result=Match: <1>
311x1=Aggregate{*,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>}),<3>}
312x2=Aggregate{*,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>}),<3>}
313[info] FuzzyParserSpec:
314[info] integer
315[info] - should parse 1
316[info] - should parse 6
317[info] fuzz
318[info] - should parse (42)
319[info] - should not parse 42
320[info] fraction
321[info] - should parse .42
322[info] exponent
323[info] - should parse E-11
324[info] - should parse E11
325[info] - should parse e2
326[info] nominal
327[info] - should parse 1
328[info] - should parse 6.67408
329[info] - should parse 6.67408E-11
330[info] fuzzyRep
331[info] - should parse 1
332[info] partial parsing
333[info] - should parse 6.67408(31)E−11
334[info] fuzzyRep
335[info] - should parse 6.67408(31)E−11
336[info] fuzzy
337[info] - should be Exact(1)
338[info] - should parse 6.67408(31)E−11
339[info] - should parse 3.1415927(01)
340[info] - should parse 3.1415927
341[info] - should parse 16.5[2]
342[info] SignificantSpaceParsersSpec:
343[info] SignificantSpaceParsers
344[info] - should stringParser
345[info] - should match for RegexOps
346[info] - should fail for RegexOps
347[info] - should ParserOps
348[info] - should ParserOptionOps 1
349[info] - should ParserOptionOps 2
350[info] - should trim
351[info] - should repSepSp
352[info] MillParserSpec:
353[info] MillParser
354[info] - should parse monadicOperator
355[info] - should parse dyadicOperator
356[info] - should parse number
357[info] - should parse dyadicTerm
358[info] - should parse monadicTerm (1)
359[info] - should parse monadicTerm (2)
360[info] - should parse anadicTerm
361[info] - should parse term
362[info] - should parse mill
363[info] - should parseMill
364[info] - should parse: 73 24 <> -
365[info] ArithmeticParserSpec:
366[info] DoubleArithmeticParser$.factor
367[info] - should parse 3.1415927
368[info] DoubleArithmeticParser(1)
369[info] - should be 1.0
370[info] - should parse (1)
371[info] - should fail pi
372[info] DoubleArithmeticParser.term
373[info] - should parse 1*2
374[info] - should parse 1/2
375[info] - should parse 3.1415927
376[info] - should parse (1)
377[info] - should fail pi
378[info] - should fail 1+2
379[info] DoubleArithmeticParser.expr
380[info] - should parse 1 as 1.0
381[info] - should parse 1+1 as 2.0
382[info] - should parse 1*2+1 as 3.0
383[info] - should parse 1*2+1-1.5 as 1.5
384[info] - should parse 1/0 as infinite
385[info] - should parse 1*2+1-3/2 as 1.5
386[info] - should parse 10/3 as ...
387[info] - should succeed for DoubleArithmeticParser(2+1-3/2)
388[info] - should succeed DoubleArithmeticParser(5*(6+1-(3/2))/4)
389[info] - should succeed DoubleArithmeticParser(5*(6+1-3/2)/4) even without explicit parentheses
390[info] - should fail to parse 1*2+1-pi/2
391[info] - should fail to parse (1?2)
392[info] RationalArithmeticParser(1)
393[info] - should be 1
394[info] RationalArithmeticParser(1+1)
395[info] - should be 2/1
396[info] - should parse 1*2+1 as 3/1
397[info] - should parse 1*2+1-3/2 as 3/2
398[info] RationalArithmeticParser(1/0)
399[info] - should be infinite
400[info] (
401[info] - should fail
402[info] - should fail 1+2=2
403[info] IntArithmeticParser(3/2)
404[info] - should fail
405[info] ExpressionSpec:
406[info] evaluate
407[info] - should evaluate 1 + -1
408[info] - should evaluate 1 * -1
409[info] - should evaluate i * 2 (pending)
410[info] parse
411[info] - should parse and evaluate sqrt(3)
412[info] - should parse and evaluate half
413[info] ExpressionMonoFunction
414[info] - should work for Negate
415[info] - should work for Reciprocal
416[info] - should work for Exp
417[info] - should work for Ln
418[info] - should work for Sine
419[info] - should work for Cosine
420[info] evaluateAsIs for UniFunction
421[info] - should work for Exp(1)
422[info] - should work for Reciprocal
423[info] - should work for Ln(-1)
424[info] materialize UniFunction
425[info] - should work for Exp(1)
426[info] - should work for Reciprocal
427[info] - should work for Exp(Ln(2))
428[info] Expression
429[info] - should simplifyAndEvaluate
430[info] - should render
431[info] - should evaluate 3 5 + 7 2 – *
432[info] ExpressionOps
433[info] - should evaluate +
434[info] - should evaluate -
435[info] - should evaluate *
436[info] - should evaluate /
437[info] - should evaluate ∧ 2
438[info] - should evaluate sqrt 36 (pending)
439[info] - should evaluate sin pi/2
440[info] - should evaluate atan
441[info] - should evaluate log 2
442[info] - should evaluate log e
443[info] - should evaluate log 10
444[info] - should fail to evaluate log 1 x or log 0 x
445[info] - should evaluate ln E
446[info] - should evaluate ln 2E
447[info] - should evaluate xxx
448[info] - should evaluate xxx 2
449[info] toString
450[info] - should work for (sqrt 7)∧2
451[info] various operations
452[info] - should evaluate E * 2
453[info] isExact
454[info] - should be true for any constant Valuable
455[info] - should be true for any sum of exact Numbers of the same factor (not e)
456[info] - should be false for any product of exact Numbers and a NatLog factor (except for one)
457[info] - should be true for product of one exact Numbers and a NatLog factor
458[info] - should be true for product of zero exact Numbers and a NatLog factor
459[info] depth
460[info] - should be 1 for any atomic expression
461[info] - should be 2 for any UniFunction expression
462[info] - should be more than 1 for other expression
463[info] Euler
464[info] - should prove Euler's identity 1 (pending)
465[info] - should prove Euler's identity 2 (pending)
466[info] FieldExpression
467[info] - should Zero be equal to zero
468[info] - should One be equal to one
469[info] simplifyConstant
470[info] - should simplify biFunction expressions
471[info] simplifyExact
472[info] - should simplify biFunction expressions
473[info] simplify
474[info] - should simplify field expressions
475[info] - should simplify constant expressions
476[info] - should simplify unary expressions
477[info] - should simplify binary expressions
478[info] - should simplify function expressions
479[info] - should simplify biFunction expressions
480[info] - should simplify aggregate expressions
481[info] - should aggregate 2
482[info] - should evaluate e * e
483[info] - should evaluate phi * phi
484[info] - should evaluate 1 / phi
485[info] - should evaluate - phi
486[info] Sum
487[info] - should add pi to -pi
488[info] simplifyComposite
489[info] - should evaluate 1/2 * 2
490[info] - should evaluate e * e
491[info] - should evaluate phi * phi
492[info] Expression.apply(String)
493[info] - should
494simplifyAggregate 5:
495 x1=3;
496 x1 simplified=3;
497 x2 simplified=3
498[info] CompositeExpressionSpec:
499[info] CompositeExpression
500[info] - should terms
501[info] - should simplifyExact 1
502[info] - should simplifyExact 2
503[info] - should simplifyExact 3
504[info] - should simplifyComponents
505[info] - should render
506[info] - should maybeDouble
507[info] - should simplifyTrivial
508[info] - should simplifyComposite
509[info] - should simplifyConstant
510[info] - should isAtomic
511[info] - should apply
512[info] - should create
513[info] RationalParserSpec:
514[info] simpleNumber
515[info] - should parse 1
516[info] - should reject 1
517[info] rational
518[info] - should parse 1/2
519[info] realNumber
520[info] - should parse 3.1415927
521[info] - should parse 3.1415927E1
522[info] number
523[info] - should parse 1/2
524[info] - should parse 1
525[info] - should parse 3.1415927
526[info] QuadraticEquationSpec:
527[info] QuadraticEquation
528[info] - should create a quadratic equation with given p and q coefficients
529[info] - should always have 2 branches
530[info] - should format toString correctly for positive coefficients
531[info] - should format toString correctly for negative coefficients
532[info] - should compute discriminant correctly for positive case
533[info] - should compute discriminant correctly for zero case (repeated roots)
534[info] - should compute discriminant correctly for negative case (complex roots)
535[info] - should solve equation with two distinct real roots
536[info] - should solve equation with repeated root
537[info] - should solve simple square root equation x² - 4 = 0
538[info] - should solve equation with complex roots
539[info] - should solve equation x² + 1 = 0 (pure imaginary roots)
540[info] - should throw exception for invalid branch index -1
541[info] - should throw exception for invalid branch index 2
542[info] - should return Expression for valid branch 0
543[info] - should return Expression for valid branch 1
544[info] - should compute conjugate sum correctly
545[info] - should compute conjugate sum for negative p
546[info] - should compute conjugate product correctly
547[info] - should compute conjugate product for negative q
548[info] - should shift origin by c = 1
549[info] - should shift origin by c = -1
550[info] - should shift origin by c = 0 (identity)
551[info] - should invert equation correctly
552[info] - should handle invert with negative coefficients
553[info] - should apply arbitrary transformation
554[info] - should transform with identity functions
555[info] - should scale equation by positive factor
556[info] - should scale equation by negative factor
557[info] - should scale equation by fractional factor
558[info] - should support canEqual for QuadraticEquation instances
559[info] - should reject canEqual for non-QuadraticEquation instances
560[info] - should be equal to itself
561[info] - should be equal to another equation with same coefficients
562[info] - should not be equal to equation with different coefficients
563[info] QuadraticEquation companion object
564[info] - should create square root equation
565[info] - should provide golden ratio equation
566[info] - should provide root two equation
567[info] - should solve golden ratio equation correctly
568[info] - should solve root two equation correctly
569[info] - should handle equation with zero p coefficient
570[info] - should handle equation with zero q coefficient
571[info] - should handle equation with both coefficients negative
572[info] - should handle very small coefficients
573[info] - should handle very large coefficients
574[info] NumberParserSpec:
575[info] numberWithFuzziness
576[info] - should parse 1.0*
577[info] - should reject 1.0 *
578[info] - should parse 1.*
579[info] - should reject 1.*
580[info] - should parse 3.1415927*
581[info] - should parse 3.1415927...
582[info] - should parse 3.1415927*E1
583[info] - should reject 3.1415927* E1
584[info] - should parse 1.00(5)
585[info] - should reject 1.00 (5)
586[info] generalNumber
587[info] - should parse 1.0
588[info] - should parse 1.*
589[info] - should work for 3.14
590[info] - should work for 3.1415927
591[info] - should parse 3.1415927*
592[info] - should parse 2.9979245800E8
593[info] - should parse 3.1415927*E1
594[info] - should parse 1/2
595[info] - should work for 1.00(5)
596[info] fuzz
597[info] - should parse (17)
598[info] - should parse *
599[info] number
600[info] - should parse 1.*
601[info] - should work for 3.14
602[info] - should work for 3.1415927
603[info] - should parse 3.1415927*
604[info] - should parse 3.1415927*E1
605[info] - should parse 3.141592653589793*
606[info] - should parse 𝛑
607[info] - should parse 1𝛑
608[info] - should reject 1 𝛑
609[info] realNumber
610[info] - should parse 2.9979245800E8
611[info] ShuntingYardParserSpec:
612[info] ShuntingYardParser
613[info] - should parse the easy expressions
614[info] - should parse the tricky expressions (pending)
615[info] Mill
616[info] - should parseInfix 1
617[info] - should parseInfix 1 + 2
618[info] - should parseInfix ( 1 + 2 ) * 3
619[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
620[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
621[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
622[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
623[info] - should parse Infix and evaluate: 9
624[info] - should parse Infix and evaluate: 0.5
625[info] - should parse Infix and evaluate: sqrt(3)
626[info] - should parse Infix and evaluate: sin(𝛑)
627[info] - should parse Infix and evaluate: sin(𝛑/2)
628[info] - should parse Infix and evaluate: sin(𝛑) - 1
629[info] - should shuntingYard
630[info] - should shuntingYard w/o spaces
631[info] - should operator
632[info] - should essentially do nothing
633[info] EagerOpsIntegrationSpec:
634[info] EagerOps full pipeline
635[info] - should create Expression -> simplify -> materialize -> normalize
636[info] - should handle complex expression that normalizes through multiple steps
637[info] - should preserve Expression for fuzzy operations
638[info] - should work with all normalize tests passing
639[info] EmptySpec:
640[info] ∅
641[info] - should yield 42a
642[info] - should yield 42b
643[info] - should yield 42c
644[info] - should yield 4a
645[info] - should yield 4b
646[info] - should yield 4c
647[info] - should yield 5a
648[info] - should NOT yield 10
649[info] - should use implicit materialization
650[info] ExpressionSpec:
651[info] Expression
652[info] - should parseToMillExpression
653[info] ShuntingYardParser
654[info] - should parseInfix 1
655[info] - should parseInfix 1 + 2
656[info] - should parseInfix ( 1 + 2 ) * 3
657[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
658[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
659[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
660[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
661[info] - should parse Infix and evaluate: 9
662[info] - should parse Infix and evaluate: 0.5
663[info] - should parse Infix and evaluate: sqrt(3)
664[info] - should shuntingYard
665[info] - should shuntingYard w/o spaces
666[info] - should operator
667[info] LiteralSpec:
668[info] Literal
669[info] - should create from WholeNumber
670[info] - should create from RationalNumber
671[info] - should normalize to its underlying number
672[info] - should render correctly
673[info] - should materialize to Some of its number
674[info] - should have correct isAtomic
675[info] ExpressionParserSpec:
676[info] ExpressionParser
677[info] - should apply number expressions
678[info] - should apply pi
679[info] - should apply e
680[info] QuadraticRootSpec:
681[info] QuadraticRoot
682[info] - should create quadratic root
683[info] normalize - simple integer roots
684[info] - should normalize x² - 3x + 2 (roots: 1, 2) - positive branch
685[info] - should normalize x² - 3x + 2 - negative branch
686[info] - should normalize x² - 4 (roots: -2, 2) - positive branch
687[info] - should normalize x² - 4 - negative branch
688[info] normalize - golden ratio
689[info] - should normalize x² - x - 1 to golden ratio (positive branch)
690[info] - should normalize x² - x - 1 (negative branch)
691[info] normalize - irrational roots
692[info] - should normalize x² - 2 (roots: ±√2)
693[info] - should normalize x² + x - 1 (irrational roots)
694[info] normalize - rational roots
695[info] - should normalize 2x² - 5x + 2 converted to monic form
696[info] normalize - double root
697[info] - should normalize x² - 4x + 4 (double root: 2)
698[info] render
699[info] - should render quadratic root correctly
700[info] materialize
701[info] - should materialize to QuadraticSolution
702[info] - should have correct isAtomic
703[info] NamedConstantSpec:
704[info] NamedConstant
705[info] - should create pi
706[info] - should create e
707[info] - should normalize to Real
708[info] - should render with its name
709[info] - should materialize to Real
710[info] - should have correct isAtomic
711[info] - should scale correctly
712[info] RootSpec:
713[info] Root factory method
714[info] - should create QuadraticRoot for quadratic equation
715[info] - should create LinearRoot for linear equation
716[info] - should ignore branch parameter for linear equations
717[info] QuadraticRoot construction
718[info] - should create root from equation and branch
719[info] - should create root for branch 1
720[info] - should create root from QuadraticSolution
721[info] QuadraticRoot predefined constants
722[info] - should define phi (golden ratio)
723[info] - should define psi (conjugate of golden ratio)
724[info] - should define rootTwo (√2)
725[info] - should define negRootTwo (-√2)
726[info] - should define one
727[info] - should define zero
728[info] QuadraticRoot.solution
729[info] - should compute solution lazily for phi
730[info] - should compute correct solution for x² - 4 = 0, branch 0
731[info] - should compute correct solution for x² - 4 = 0, branch 1
732[info] - should compute solution for complex roots
733[info] QuadraticRoot.branches and branched
734[info] - should return 2 branches for quadratic equations
735[info] - should get specific branch using branched(index)
736[info] QuadraticRoot.isExact
737[info] - should always be exact
738[info] QuadraticRoot.render
739[info] - should render phi with special character
740[info] - should render psi with special character
741[info] - should render generic quadratic root
742[info] QuadraticRoot.toString
743[info] - should use special symbol for phi
744[info] - should use special symbol for psi
745[info] - should use descriptive string for generic roots
746[info] QuadraticRoot.power
747[info] - should return One for power of 0
748[info] - should return self for power of 1
749[info] - should compute square (power of 2)
750[info] - should compute higher powers
751[info] - should handle negative powers using reciprocal
752[info] - should compute square root (power of 1/2)
753[info] QuadraticRoot.reciprocal
754[info] - should compute reciprocal for quadratic roots
755[info] - should compute reciprocal for phi
756[info] QuadraticRoot.negate
757[info] - should negate a root
758[info] - should negate phi
759[info] QuadraticRoot.squareRoot
760[info] - should compute positive square root
761[info] - should compute negative square root
762[info] QuadraticRoot.add
763[info] - should add two quadratic roots with compatible solutions (pending)
764[info] - should return None for incompatible root addition
765[info] QuadraticRoot.pure
766[info] - should create new root with different equation
767[info] QuadraticRoot equality and hashCode
768[info] - should be equal to itself
769[info] - should be equal to another root with same equation and branch
770[info] - should not be equal if branches differ
771[info] - should not be equal if equations differ
772[info] - should have consistent hashCode
773[info] LinearRoot construction
774[info] - should create linear root from equation
775[info] - should define half constant
776[info] LinearRoot properties
777[info] - should always have branch 0
778[info] - should have 1 branch
779[info] - should branched returns itself
780[info] - should always be exact
781[info] LinearRoot.solution
782[info] - should compute solution for linear equation
783[info] - should compute solution for half
784[info] LinearRoot.pure
785[info] - should create new linear root with different equation
786[info] - should ignore branch parameter
787[info] Root.maybeFactor
788[info] - should determine factor for linear solutions
789[info] Root.approximation
790[info] - should provide approximation for phi
791[info] - should provide approximation for rootTwo
792[info] - should provide approximation for half
793[info] Root.maybeDouble
794[info] - should provide double value for exact solutions
795[info] Root edge cases
796[info] - should handle zero root
797[info] - should handle one root
798[info] - should handle equations with complex solutions
799[info] Root.evaluate and evaluateAsIs
800[info] - should evaluate root when solution is exact
801[info] - should evaluate phi
802[info] Root arithmetic combinations
803[info] - should compute phi squared
804[info] - should compute reciprocal of rootTwo
805[info] - should negate and square rootTwo
806[info] - should evaluate phi + psi
807[info] ExpressionMatchersSpec:
808[info] value
809[info] - should work with value on Literal
810[info] - should work with value on One
811[info] - should work with value on Number.one
812[info] - should work with value on Real
813[info] - should fail on non-value
814[info] matchValue
815[info] - should work with value 1
816[info] |
817[info] - should work with | 1 or 2
818[info] matchSimpler
819[info] - should matchSimpler 1
820[info] - should simplifyTrivial 1
821[info] - should handle Sum
822[info] - should handle Product
823[info] - should handle Power
824[info] - should cancel -1 and - 1
825[info] - should cancel multiplication and division
826[info] - should cancel multiplication and division with simplify
827[info] - should simplify sqrt(7)∧2
828[info] - should cancel 1 and - -1
829[info] - should cancel 1 and - -1 b
830[info] - should cancel 2 * 1/2 (a)
831[info] - should cancel 2 * 1/2 (b)
832[info] - should cancel ∧2 and sqrt for 7
833[info] - should show that lazy evaluation sometimes works even when you don't use it (a)
834[info] - should cancel multiplication and division 2
835[info] - should cancel multiplication and division backwards
836[info] - should cancel 1 and - -1 (a)
837[info] - should cancel 2 and * 1/2
838[info] - should cancel 2 * 1/2
839[info] - should cancel ∧2 and sqrt
840[info] - should cancel addition and subtraction of 3
841[info] - should cancel addition and subtraction of e
842[info] - should work for multi-levels 1
843[info] - should work for multi-levels 2
844[info] matchSimpler 2
845[info] - should simplify (1+2)*(2+1)
846[info] - should properly simplify 1 * (root3 / root3 * 3)
847[info] - should simplify e * 2 / 2
848[info] - should simplify root3 * 2 / 2
849[info] - should simplify root4 * 2 / 2 part 1
850[info] - should simplify root4 * 2 / 2 part 2
851[info] - should distribute
852[info] - should distributeProductSum a
853[info] - should distributeProductSum b
854[info] - should distributeProductPower on root(3) * root(3)
855[info] simplifyAggregate
856[info] - should asAggregate
857[info] - should simplifyAggregate 1
858[info] - should simplifyAggregate 2
859[info] - should simplifyAggregate 3
860[info] - should simplifyAggregate 4
861[info] - should simplifyAggregate 5
862[info] simplify
863[info] - should cancel addition and subtraction (a)
864[info] - should use multiply instead of addition
865[info] - should work for Negate
866[info] - should work for Negate Negate
867[info] - should work for Reciprocal
868[info] - should work for Reciprocal Reciprocal
869[info] - should work for Negate Zero
870[info] - should work for Negate MinusOne
871[info] - should work for Reciprocal Zero
872[info] - should work for Reciprocal One
873[info] - should work for Reciprocal Two
874[info] - should work for Exp Infinity
875[info] - should work for Exp neg Infinity
876[info] - should work for Exp Zero
877[info] - should work for Exp One
878[info] - should work for Ln Zero
879[info] - should work for Ln One
880[info] - should work for Ln e
881[info] - should work for Sine 0
882[info] - should work for Sine pi/2
883[info] - should work for Sine pi
884[info] - should work for Cosine 0
885[info] - should work for Cosine pi/2
886[info] - should work for Cosine pi
887[info] simplify rather than matchSimpler
888[info] - should matchSimpler 1
889[info] - should simplifyTrivial 1
890[info] - should handle Sum
891[info] - should handle Product
892[info] - should handle Power
893[info] - should cancel -1 and - 1
894[info] - should cancel multiplication and division
895[info] - should cancel multiplication and division with simplify
896[info] - should simplify sqrt(7)∧2
897[info] - should cancel 1 and - -1
898[info] - should cancel 1 and - -1 b
899[info] - should cancel 2 * 1/2 (a)
900[info] - should cancel 2 * 1/2 (b)
901[info] - should cancel ∧2 and sqrt for 7
902[info] - should show that lazy evaluation sometimes works even when you don't use it (a)
903[info] - should cancel multiplication and division 2
904[info] - should cancel multiplication and division backwards
905[info] - should cancel 1 and - -1 (a)
906[info] - should cancel 2 and * 1/2
907[info] - should cancel 2 * 1/2
908[info] - should cancel ∧2 and sqrt
909[info] - should cancel addition and subtraction of 3
910[info] - should cancel addition and subtraction of e
911[info] - should work for multi-levels 1
912[info] - should work for multi-levels 2
913[info] complementaryTermsEliminatorAggregate
914[info] - should eliminate * 2 / 2 in Aggregate
915[info] - should eliminate 2 :+ -2 in Aggregate
916[info] - should eliminate √3 and -√3 in Aggregate
917[info] - should eliminate square root ∧ 2 in Aggregate
918[info] simplifyAtomic
919[info] - should leave atomic expression as is
920[info] - should simplify literal expression one
921[info] - should simplify literal expression pi
922[info] factorsMatch
923[info] - should match expression Sum
924[info] - should match expression Product
925[info] - should match expression Power
926[info] simplify aggregate, etc.
927[info] - should aggregate 1
928[info] - should aggregate 2
929[info] - should simplify aggregate 1
930[info] - should simplify aggregate 1a
931[info] - should simplify aggregate 2a
932[info] - should simplify aggregate 2b
933[info] - should simplify binary expression 3
934[info] - should simplify aggregate 3a
935[info] - should simplify aggregate 4a
936[info] - should simplify aggregate 4b
937[info] simplifyAndEvaluate (a)
938[info] - should show ∧2 and sqrt for illustrative purposes (a)
939[info] - should evaluate E * 2
940[info] simplifyTerms
941[info] - should work for BiFunction 1
942[info] - should work for BiFunction 2
943[info] - should work for UniFunction
944[info] - should work for Aggregate total
945[info] - should work for Aggregate product 1
946[info] biFunctionAggregator
947[info] - should work for 7 :+ 2 - 3 a
948[info] - should work for 7 :+ 2 - 3 b
949[info] - should work for 7 * 2 * -3
950[info] biFunctionSimplifier
951[info] - should work for square of square root
952[info] - should work for products
953[info] - should work for sums
954[info] - should gather powers of 2 and * 1/2
955[info] matchComplementary
956[info] - should cancel plus and minus
957[info] matchDyadicTrivial
958[info] - should handle Sum
959[info] - should handle Product
960[info] - should handle Power 1
961[info] - should handle Power 2
962[info] - should cancel multiplication and division
963[info] - should cancel value and reciprocal 1
964[info] - should cancel value and reciprocal 2
965[info] matchComplementaryExpressions
966[info] - should work for plus and minus
967[info] - should work for reciprocals
968[info] matchSimplifyDyadicTermsTwoLevels
969[info] - should match 1
970[info] - should match 2
971[info] biFunctionSimplifier
972[info] - should simplify
973[info] - should simplify √3 * -1 as -√3
974[info] - should simplify √3 * 1 as √3
975[info] - should simplify (√3 :+ 1)(√3 - 1) as 2 exactly
976[info] - should evaluate (√3 :+ 1)(√3 :+ -1) as 2 exactly
977[info] - should biFunctionSimplifier on (1 :+ -3)
978[info] - should biFunctionSimplifier on (1 :+ √3)(1 - √3)
979[info] - should simplify 1 :+ 2 - 2
980[info] - should properly simplify 1 :+ 2 - 2 :+ 0
981[info] - should simplify expressions involving square root 3
982[info] various
983[info] - should distributeProductSum c
984[info] - should properly simplify 1 :+ root3 - root3 :+ 0
985[info] - should properly simplify (1 :+ root3) :+ (zero - root3)
986[info] - should properly simplify (1 * root3) * (3 / root3)
987[info] - should simplify 2 root(3) all squared
988[info] value with logging
989[info] - should work with value on Literal
990[info] - should work with value on One
991[info] - should work with value on Number.one
992[info] - should work with value on Real
993[info] - should fail on non-value
994[info] biFunctionTransformer (2)
995[info] - should simplify 1 :+ 1
996[info] - should simplify pi :+ pi
997[info] - should simplify 1 :+ 0
998[info] - should fail to simplify 1 :+ pi
999[info] - should simplify 1 :+ -1
1000[info] - should simplify 1 * 1
1001[info] - should simplify pi * pi
1002[info] - should simplify 1 * 0
1003[info] - should simplify 1 * -1
1004[info] - should evaluateAsIs 2 ∧ -1
1005[info] - should fail to simplify 2 ∧ 1/2
1006[info] evaluateMonadicDuple
1007[info] - should simplify E
1008[info] - should simplify ln(E)
1009[info] - should simplify ln(1)
1010[info] - should simplify ln(-1)
1011[info] matchSimplifyBiFunction
1012[info] - should simplify multiple similar ops
1013[info] two levels
1014[info] - should get 0 from -√3 :+ √3
1015[info] - should get 0 from √3 :+ -√3
1016[info] - should get 1 from 1/√3 * √3
1017[info] - should simplify -1 * √3 as negate(√3)
1018[info] - should simplify √3 * -1 as negate(√3)
1019[info] - should simplify various
1020[info] - should simplify root3 * 2 / 2
1021[info] matchAndCollectTwoDyadicLevels
1022[info] - should work for √3 * √3
1023[info] - should work for √3 :+ -√3
1024[info] - should work for (π :+ 1) * (π - 1) (pending)
1025[info] complementaryTermsEliminatorBiFunction
1026[info] - should match 1 and -1 in addition
1027[info] - should evaluate to Angle.zero
1028Starting build for ProjectRef(file:/build/repo/,algebra) (number-algebra)... [1/6]
1029Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wvalue-discard, -Wnonunit-statement, -explain, -Wunused:imports, -Wunused:privates, -Wunused:locals, -Wconf:msg=Couldn't resolve a member:s, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
1030[info] compiling 17 Scala sources to /build/repo/algebra/target/scala-3.8.0-RC6/test-classes ...
1031[warn] -- [E198] Unused Symbol Warning: /build/repo/algebra/src/test/scala/com/phasmidsoftware/number/algebra/eager/EqualityComprehensiveSpec.scala:20:37
1032[warn] 20 | import cats.syntax.eq.catsSyntaxEq as _
1033[warn] | ^^^^^^^^^^^^^^^^^
1034[warn] | unused import
1035[warn] one warning found
1036[info] done compiling
103702:16:16,934 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
103802:16:16,934 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1984dd47 - No custom configurators were discovered as a service.
103902:16:16,934 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1984dd47 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
104002:16:16,935 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1984dd47 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
104102:16:16,935 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
104202:16:16,935 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml]
104302:16:16,936 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@7fb892d - Resource [logback.xml] occurs multiple times on the classpath.
104402:16:16,936 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@7fb892d - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml]
104502:16:16,936 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@7fb892d - Resource [logback.xml] occurs at [jar:file:/root/.cache/coursier/v1/https/repo1.maven.org/maven2/com/phasmidsoftware/flog_3/1.0.11/flog_3-1.0.11.jar!/logback.xml]
104602:16:16,936 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@7fb892d - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml]
104702:16:17,051 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml
104802:16:17,051 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml}
104902:16:17,052 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
105002:16:17,054 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@59d263f2 - value "logs/Number.log" substituted for "${HOME_LOG}"
105102:16:17,056 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
105202:16:17,056 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
105302:16:17,064 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
105402:16:17,093 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
105502:16:17,093 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
105602:16:17,093 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
105702:16:17,094 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
105802:16:17,094 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
105902:16:17,096 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@59d263f2 - value "logs/Number.log" substituted for "${HOME_LOG}"
106002:16:17,100 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1749245838 - setting totalSizeCap to 20 GB
106102:16:17,102 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1749245838 - Archive files will be limited to [10 MB] each.
106202:16:17,102 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1749245838 - Will use gz compression
106302:16:17,105 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1749245838 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
106402:16:17,106 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@5712d924 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
106502:16:17,107 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@5712d924 - Roll-over at midnight.
106602:16:17,107 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@5712d924 - Setting initial period to 2026-01-08T01:16:08.716Z
106702:16:17,108 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
106802:16:17,110 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
106902:16:17,111 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
107002:16:17,111 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
107102:16:17,112 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
107202:16:17,112 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
107302:16:17,112 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
107402:16:17,113 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
107502:16:17,113 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
107602:16:17,113 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@c7b800a - End of configuration.
107702:16:17,113 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@467caf84 - Registering current configuration as safe fallback point
107802:16:17,114 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1984dd47 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 178 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
1079
1080[info] NormalizeIntegrationSpec:
1081[info] normalize in addition operations
1082[info] - should normalize RationalNumber + RationalNumber to WholeNumber when appropriate
1083[info] - should keep as RationalNumber when sum is not whole
1084[info] - should normalize WholeNumber + RationalNumber correctly
1085[info] normalize in multiplication operations
1086[info] - should normalize RationalNumber * RationalNumber to WholeNumber
1087[info] - should normalize WholeNumber * RationalNumber to WholeNumber when appropriate
1088[info] normalize in division operations
1089[info] - should create and normalize rational from WholeNumber division
1090[info] - should keep as RationalNumber when division is not exact
1091[info] normalize with InversePower operations
1092[info] - should simplify square root of perfect square
1093[info] - should simplify cube root of perfect cube
1094[info] normalize with logarithm operations
1095[info] - should reduce NatLog(0) in expressions
1096[info] normalize in nested operations
1097[info] - should normalize through multiple levels
1098[info] - should normalize NatLog with normalized argument
1099[info] normalize preserves mathematical equality
1100[info] - should maintain fuzzy equality after normalization
1101[info] - should normalize both sides of comparison consistently
1102[info] normalize edge cases
1103[info] - should handle normalization of zero in various forms
1104[info] - should handle normalization of one in various forms
1105[info] - should handle negative numbers correctly
1106[info] normalize with percentage flag
1107[info] - should preserve percentage flag when RationalNumber doesn't reduce to whole
1108[info] - should not lose percentage flag when normalizing
1109[info] LatexRendererInstancesSpec:
1110[info] Rational LatexRenderer
1111[info] - should render integers without denominator
1112[info] - should render proper fractions
1113[info] - should render negative fractions
1114[info] RationalNumber LatexRenderer
1115[info] - should delegate to Rational renderer
1116[info] - should render half correctly
1117[info] - should render zero correctly
1118[info] - should render one correctly
1119[info] Logarithm LatexRenderer
1120[info] - should render logarithmic numbers
1121[info] InversePower LatexRenderer
1122[info] - should render square roots
1123[info] - should render square roots of fractions
1124[info] - should render cube roots
1125[info] - should render fifth roots
1126[info] - should render nested roots properly
1127[info] QuadraticSolution LatexRenderer
1128[info] - should render phi constant with LaTeX symbol
1129[info] - should render psi constant with LaTeX symbol
1130[info] - should render solution with zero offset as just base
1131[info] - should render solution with zero base as just offset
1132[info] - should render solution with zero base and negative branch
1133[info] - should render real solution with positive branch (branch 0)
1134[info] - should render real solution with negative branch (branch 1)
1135[info] - should render complex solution with positive branch
1136[info] - should render complex solution with negative branch
1137[info] - should render solution with integer base and irrational offset
1138[info] - should render negative base correctly
1139[info] LinearSolution LatexRenderer
1140[info] - should render linear solution as its value
1141[info] - should render fractional linear solution
1142[info] - should render linear solution with irrational value
1143[info] Algebraic LatexRenderer (general)
1144[info] - should handle QuadraticSolution through Algebraic type
1145[info] - should handle LinearSolution through Algebraic type
1146[info] Edge cases and special values
1147[info] - should handle very large rationals
1148[info] - should handle negative zero-like cases
1149[info] - should render unity correctly in various forms
1150[info] Complex number representations
1151[info] - should handle the golden ratio phi correctly
1152[info] - should handle both roots of x² - x - 1 = 0
1153[info] Integration with existing render method
1154[info] - should provide LaTeX rendering separate from display rendering
1155[info] NumberSpec:
1156[info] Number
1157[info] - should perform addition correctly
1158[info] - should perform subtraction correctly
1159[info] - should perform multiplication correctly
1160[info] - should perform division correctly
1161[info] - should compare numbers correctly
1162[info] - should convert to different number types
1163[info] - should isExact
1164[info] - should handle zero correctly
1165[info] AngleSpec:
1166[info] Angle
1167[info] - should test creation
1168[info] - should test render
1169[info] - should test conversion to other Structures
1170[info] - should isExact
1171[info] - should maybeDouble
1172[info] - should isZero
1173[info] - should test comparison
1174[info] - should test compareExact
1175[info] - should test arithmetic operations
1176[info] Angle (in degrees)
1177[info] - should test equivalence
1178[info] - should test creation
1179[info] - should test render
1180[info] - should maybeDouble
1181[info] - should isZero
1182[info] - should test compareExact
1183[info] - should test arithmetic operations
1184[info] AdditiveCommutativeGroup[Angle]
1185[info] - should combine
1186[info] - should inverse
1187[info] EagerSpec:
1188[info] Eager
1189[info] - should ~= Real/Real
1190[info] - should ~= Angle/Angle
1191[info] - should ~= WholeNumber/WholeNumber
1192[info] - should ~= RationalNumber/RationalNumber
1193[info] - should ~= RationalNumber/WholeNumber
1194[info] - should ~= Functional/Functional
1195[info] - should ~= Real/WholeNumber
1196[info] - should ~= Real/RationalNumber
1197[info] - should ~= RationalNumber/Real
1198[info] - should ~= Real/Functional (1)
1199[info] - should ~= Real/Functional (2)
1200[info] - should ~= Functional/Real
1201[info] - should ~= Functional/WholeNumber
1202[info] - should ~= WholeNumber/Functional
1203[info] QuadraticSolutionSpec:
1204[info] QuadraticSolution construction
1205[info] - should create a quadratic solution with real roots (branch 0)
1206[info] - should create a quadratic solution with real roots (branch 1)
1207[info] - should create a quadratic solution with imaginary roots (branch 0)
1208[info] - should create a quadratic solution with imaginary roots (branch 1)
1209[info] - should create phi constant correctly
1210[info] - should create psi constant correctly
1211[info] QuadraticSolution.conjugate
1212[info] - should compute conjugate by inverting branch (0 -> 1)
1213[info] - should compute conjugate by inverting branch (1 -> 0)
1214[info] - should preserve imaginary flag in conjugate
1215[info] - should conjugate of conjugate returns original
1216[info] QuadraticSolution.negate
1217[info] - should negate base and flip branch
1218[info] - should negate and conjugate correctly for branch 1
1219[info] QuadraticSolution.normalize
1220[info] - should normalize to offset when base is zero
1221[info] - should normalize to base when offset is zero
1222[info] - should not normalize when both base and offset are non-zero
1223[info] QuadraticSolution boolean predicates
1224[info] - should identify zero solution correctly
1225[info] - should not identify non-zero solution as zero
1226[info] - should identify pure number when offset is zero
1227[info] - should not identify as pure number when offset is non-zero
1228[info] - should identify unity correctly
1229[info] - should not identify non-unity as unity
1230[info] - should always report as exact
1231[info] QuadraticSolution.branched
1232[info] - should compute correct coefficient for branch 0
1233[info] QuadraticSolution.add(Rational)
1234[info] - should add rational to base when base is pure number
1235[info] QuadraticSolution.add(Solution)
1236[info] - should add phi to psi
1237[info] QuadraticSolution.multiply(Solution)
1238[info] - should multiply phi by psi
1239[info] QuadraticSolution.*(Rational)
1240[info] - should scale both base and offset when both are scalars
1241[info] - should preserve branch when scaling
1242[info] QuadraticSolution equality
1243[info] - should be equal to itself
1244[info] - should be equal to another solution with same base, offset, and branch
1245[info] - should not be equal if branches differ
1246[info] - should not be equal if bases differ
1247[info] - should not be equal if offsets differ
1248[info] QuadraticSolution fuzzy equality
1249[info] - should be fuzzy equal to itself
1250[info] - should be fuzzy equal to similar solution
1251[info] - should not be fuzzy equal if branches differ
1252[info] QuadraticSolution.render
1253[info] - should render phi with its name
1254[info] - should render psi with its name
1255[info] - should render normalized form when offset is zero
1256[info] - should render with + for branch 0
1257[info] - should render with - for branch 1
1258[info] - should render complex solutions with appropriate prefix
1259[info] QuadraticSolution edge cases
1260[info] - should handle zero base and zero offset
1261[info] - should handle unity base with zero offset
1262[info] - should handle large rational values
1263[info] - should handle negative base values
1264[info] QuadraticSolution.approximation
1265[info] - should provide approximation for non-exact solutions
1266[info] - should handle approximation for pure number solutions
1267[info] QuadraticSolution with imaginary flag integration
1268[info] - should distinguish between real and imaginary solutions in rendering
1269[info] - should preserve imaginary flag through conjugate
1270[info] - should preserve imaginary flag through scaling (pending)
1271[info] QuadraticSolution toString
1272[info] - should delegate to render
1273[info] WholeNumberSpec:
1274[info] WholeNumber
1275[info] - should test creation
1276[info] - should test render
1277[info] - should test conversion to other Structures
1278[info] - should test comparison
1279[info] - should test compareExact
1280[info] - should test arithmetic operations
1281[info] WholeNumberSpec 2
1282[info] - should +
1283[info] - should *
1284[info] - should -
1285[info] - should apply
1286[info] - should approximation
1287[info] - should asJavaNumber
1288[info] - should asT
1289[info] - should compare
1290[info] - should compareExact
1291[info] - should compareTo
1292[info] - should convert
1293[info] - should plus
1294[info] - should scale
1295[info] - should doScale
1296[info] - should doScaleInt
1297[info] - should isExact
1298[info] - should isZero
1299[info] - should maybeDouble
1300[info] - should maybeFactor
1301[info] - should minusOne
1302[info] - should negate
1303[info] - should one
1304[info] - should render
1305[info] - should scaleFactor
1306[info] - should showWholeNumber
1307[info] - should signum
1308[info] - should maybeInt
1309[info] - should toString
1310[info] - should zero
1311[info] CommutativeGroup[WholeNumber]
1312[info] - should plus
1313[info] - should times
1314[info] - should negate
1315[info] ScalarSpec:
1316[info] Scalar
1317[info] - should parse string
1318[info] - should correctly determine if a value is exact
1319[info] - should convert to Real when possible
1320[info] - should render values correctly
1321[info] - should perform addition using doPlus
1322[info] - should compare for equality correctly
1323[info] LatexRendererSpec:
1324[info] LatexRenderer typeclass
1325[info] - should provide summoner method
1326[info] - should provide instance constructor
1327[info] - should provide syntax extension
1328[info] LatexRenderer helper methods
1329[info] - should wrap content in inline math mode
1330[info] - should wrap content in display math mode
1331[info] - should create fractions
1332[info] - should create square roots
1333[info] - should create nth roots
1334[info] - should format signs correctly
1335[info] EqualityComprehensiveSpec:
1336[info] === (Exact Equality)
1337[info] - should compare WholeNumbers with ===
1338[info] - should compare RationalNumbers with ===
1339[info] - should compare WholeNumber with RationalNumber using ===
1340[info] - should compare exact Reals with ===
1341[info] - should compare WholeNumber with exact Real using ===
1342[info] - should compare RationalNumber with exact Real using ===
1343[info] - should compare Angles with === (ignoring degrees flag)
1344[info] - should compare Nats with ===
1345[info] - should compare LinearSolutions with ===
1346[info] - should compare QuadraticSolutions with ===
1347[info] - should compare NatLogs with ===
1348[info] - should compare InversePowers with ===
1349[info] ~== (Fuzzy Equality)
1350[info] - should compare fuzzy Reals with ~==
1351[info] - should compare exact Real with fuzzy Real using ~==
1352[info] - should compare Angles with ~==
1353[info] - should handle fuzzy equality for normalized Angles
1354[info] - should use exact equality for RationalNumber with ~==
1355[info] - should use exact equality for WholeNumber with ~==
1356[info] - should use exact equality for Nat with ~==
1357[info] - should compare WholeNumber with fuzzy Real using ~==
1358[info] - should compare RationalNumber with fuzzy Real using ~==
1359[info] - should compare WholeNumber with RationalNumber using ~==
1360[info] - should compare Angle with different representations using ~==
1361[info] - should compare QuadraticSolutions with ~==
1362[info] - should compare InversePowers with ~=
1363[info] === and ~== edge cases
1364[info] - should handle zero comparisons
1365[info] - should handle one/unity comparisons
1366[info] - should handle negative numbers
1367[info] - should not consider infinity equal to large numbers
1368[info] - should handle NaN appropriately
1369[info] symmetry of === and ~==
1370[info] - should be symmetric for ===
1371[info] - should be symmetric for ~==
1372[info] - should be symmetric for cross-type comparisons with ~==
1373[info] transitivity of === and ~==
1374[info] - should be transitive for ===
1375[info] - should demonstrate that ~== respects transitivity for exact types
1376[info] - should note that ~== may not be transitive for fuzzy values
1377[info] + Fuzzy equality is not necessarily transitive
1378[info] reflexivity of === and ~==
1379[info] - should be reflexive for ===
1380[info] - should be reflexive for ~==
1381[info] special mathematical values
1382[info] - should handle pi correctly
1383[info] - should handle e correctly
1384[info] - should handle golden ratio (phi) correctly
1385[info] - should handle square roots correctly
1386[info] practical usage patterns
1387[info] - should work with collections using ===
1388[info] - should work with Option using ===
1389[info] - should work in pattern matching contexts
1390[info] RationalNumberSpec:
1391[info] RationalNumber
1392[info] - should apply
1393[info] - should assertEq
1394[info] - should render
1395[info] - should toString
1396[info] - should parse
1397[info] - should percentage
1398[info] - should perform addition correctly
1399[info] - should perform subtraction correctly
1400[info] - should perform multiplication correctly
1401[info] - should perform division correctly
1402[info] - should perform reciprocal correctly
1403[info] - should compare numbers correctly
1404[info] - should convert to different number types
1405[info] - should handle zero correctly
1406[info] Field[RationalNumber]
1407[info] - should plus
1408[info] - should negate
1409[info] InversePowerSpec:
1410[info] InversePower
1411[info] - should convert
1412[info] - should toDouble
1413[info] - should signum
1414[info] - should approximation
1415[info] - should asJavaNumber
1416[info] - should maybeDouble
1417[info] - should scale
1418[info] - should isZero
1419[info] - should isExact
1420[info] - should maybeFactor
1421[info] - should toRational
1422[info] - should showInversePower
1423[info] - should render
1424[info] - should render implicitly
1425[info] normalize
1426[info] - should normalize
1427[info] RealSpec:
1428[info] Real
1429[info] - should apply(String)
1430[info] - should perform addition correctly
1431[info] - should perform subtraction correctly
1432[info] - should perform multiplication correctly
1433[info] - should perform division correctly
1434[info] - should compare numbers correctly A
1435[info] - should compare numbers correctly B
1436[info] - should convert to different number types
1437[info] - should handle zero correctly
1438[info] Ring[Real]
1439[info] - should plus
1440[info] - should negate
1441[info] NormalizeSpec:
1442[info] WholeNumber.normalize
1443[info] - should return itself (already in simplest form)
1444[info] - should work for zero
1445[info] - should work for negative numbers
1446[info] RationalNumber.normalize
1447[info] - should reduce to WholeNumber when denominator is 1
1448[info] - should reduce fraction and then to WholeNumber
1449[info] - should keep as RationalNumber when not reducible to whole
1450[info] - should return same instance if already normalized and not whole
1451[info] - should preserve asPercentage flag when not reducing to whole
1452[info] - should work with negative rationals
1453[info] - should work with zero
1454[info] Real.normalize
1455[info] - should return itself (fuzzy numbers don't reduce)
1456[info] - should keep exact Reals as Real
1457[info] InversePower.normalize
1458[info] - should reduce to base when n=1
1459[info] - should normalize the base number
1460[info] - should return same instance if base doesn't normalize
1461[info] - should handle nested normalization
1462[info] NatLog.normalize
1463[info] - should reduce NatLog(0) to WholeNumber(1)
1464[info] - should normalize the number parameter
1465[info] - should return same instance if number doesn't normalize
1466[info] Logarithm.normalize
1467[info] - should reduce Logarithm(base, 0) to WholeNumber(1)
1468[info] - should normalize the number parameter
1469[info] - should return same instance if number doesn't normalize
1470[info] Angle.normalize
1471[info] - should return itself (angles have semantic meaning)
1472[info] - should normalize the radians parameter
1473[info] Complex.normalize
1474[info] normalize integration tests
1475[info] - should handle chains of normalization
1476[info] - should not work in raw arithmetic operations
1477[info] type discovery methods
1478[info] - should return correct typeName
1479[info] - should return correct category
1480[info] - should return correct describe string
1481[info] NatSpec:
1482[info] Nat
1483[info] - should have correct constant elements
1484[info] - should inc
1485[info] - should render
1486[info] - should fail on negative numbers
1487[info] - should perform addition correctly
1488[info] - should perform multiplication correctly
1489[info] - should satisfy distributive property
1490Starting build for ProjectRef(file:/build/repo/,core) (number-core)... [2/6]
1491Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wvalue-discard, -Wnonunit-statement, -explain, -Wunused:imports, -Wunused:privates, -Wunused:locals, -Wconf:msg=Couldn't resolve a member:s, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
1492[info] compiling 73 Scala sources and 5 Java sources to /build/repo/core/target/scala-3.8.0-RC6/test-classes ...
1493[warn] -- [E198] Unused Symbol Warning: /build/repo/core/src/test/scala/com/phasmidsoftware/number/core/applications/FibonacciSpec.scala:76:12
1494[warn] 76 | val q = t1 `plus` t2
1495[warn] | ^
1496[warn] | unused local definition
1497[warn] one warning found
1498[info] done compiling
149902:16:44,323 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
150002:16:44,324 |-INFO in ch.qos.logback.classic.util.ContextInitializer@284db004 - No custom configurators were discovered as a service.
150102:16:44,324 |-INFO in ch.qos.logback.classic.util.ContextInitializer@284db004 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
150202:16:44,325 |-INFO in ch.qos.logback.classic.util.ContextInitializer@284db004 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
150302:16:44,325 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/build/repo/core/target/scala-3.8.0-RC6/test-classes/logback-test.xml]
150402:16:44,409 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/core/target/scala-3.8.0-RC6/test-classes/logback-test.xml
150502:16:44,409 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/core/target/scala-3.8.0-RC6/test-classes/logback-test.xml}
150602:16:44,409 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
150702:16:44,412 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@31b04ada - value "logs/Number.log" substituted for "${HOME_LOG}"
150802:16:44,413 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
150902:16:44,413 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
151002:16:44,419 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
151102:16:44,446 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
151202:16:44,446 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
151302:16:44,446 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
151402:16:44,447 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
151502:16:44,447 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
151602:16:44,449 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@31b04ada - value "logs/Number.log" substituted for "${HOME_LOG}"
151702:16:44,452 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@195585434 - setting totalSizeCap to 20 GB
151802:16:44,454 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@195585434 - Archive files will be limited to [10 MB] each.
151902:16:44,454 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@195585434 - Will use gz compression
152002:16:44,457 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@195585434 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
152102:16:44,459 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@2eb7046c - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
152202:16:44,459 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@2eb7046c - Roll-over at midnight.
152302:16:44,459 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@2eb7046c - Setting initial period to 2026-01-08T01:16:08.716Z
152402:16:44,460 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
152502:16:44,462 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
152602:16:44,462 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
152702:16:44,462 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
152802:16:44,463 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
152902:16:44,463 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG
153002:16:44,463 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
153102:16:44,463 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG
153202:16:44,463 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
153302:16:44,464 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@6b3f4c2e - End of configuration.
153402:16:44,464 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@586a2d09 - Registering current configuration as safe fallback point
153502:16:44,464 |-INFO in ch.qos.logback.classic.util.ContextInitializer@284db004 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 139 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
1536
1537Some(-1)
15380
15391
1540
1541[info] BenchmarkSpec:
1542[info] Benchmark
1543[info] - should do 100rRepetitions !!! IGNORED !!!
1544[info] NewtonSpec:
1545[info] Newton
1546[info] - should solve x = cos(x)
1547[info] - should solve x * x = 2
1548[info] Newton Worksheet
1549[info] - should worksheet
1550[info] RationalParserSpec:
1551[info] simpleNumber
1552[info] - should parse 1
1553[info] - should reject 1
1554[info] rational
1555[info] - should parse 1/2
1556[info] realNumber
1557[info] - should parse 3.1415927
1558[info] - should parse 3.1415927E1
1559[info] number
1560[info] - should parse 1/2
1561[info] - should parse 1
1562[info] - should parse 3.1415927
1563[info] CatsKernelSpec:
1564[info] Cats instances for Rational
1565[info] - should provide Eq/Order/Show for Rational
1566[info] - should sort Rational via Cats Order (bridged to scala Ordering)
1567[info] Cats instances for ExactNumber
1568[info] - should provide Eq/Order/Show for ExactNumber
1569[info] Cats instances for Number
1570[info] - should provide PartialOrder/Eq/Show for Number
1571[info] - should Eq[Number] structural: Fuzzy same triple are equal !!! IGNORED !!!
1572[info] - should Eq[Number] structural: different fuzz not equal !!! IGNORED !!!
1573[info] - should Eq[Number] structural: different factor not equal !!! IGNORED !!!
1574[info] - should Eq[Number]/PartialOrder[Number] respect Gaussian fuzz !!! IGNORED !!!
1575[info] - should Eq[Number] structural: reflexive for Fuzzy !!! IGNORED !!!
1576[info] - should Eq[Number] structural: NaN equals NaN
1577[info] Cats instances for Field
1578[info] - should provide PartialOrder/Eq/Show for Field
1579[info] Cats instances for Algebraic
1580[info] - should provide PartialOrder/Eq/Show for Algebraic !!! IGNORED !!!
1581[info] Cats instances for Expression
1582[info] - should provide PartialOrder/Eq/Show for Expression
1583simplified = Solution: -0.5 + + √1.25
1584[info] ComplexAlgebraicInstancesLawSpec:
1585[info] InfiniteProductSpec:
1586[info] Leibniz
1587[info] - should asLazyList
1588[info] - should apply
1589[info] - should toDouble
1590[info] Euler
1591[info] - should asLazyList
1592[info] - should apply
1593[info] - should toDouble
1594[info] AggregateSpec:
1595[info] Aggregate
1596[info] - should render
1597[info] - should depth
1598[info] - should evaluate 1
1599[info] - should evaluate 2
1600[info] - should evaluate 3
1601[info] - should simplifyComponents {2 * -1}+{2 + 1}+{-1 * 5}+2
1602[info] - should simplify {2 * -1}+{2 + 1}+{-1 * 5}+2
1603[info] FactorialSpec:
1604[info] Factorial
1605[info] - should apply successfully
1606[info] - should fail on negative numbers
1607[info] ExpressionParserSpec:
1608[info] DoubleExpressionParser.factor
1609[info] - should parse 3.1415927
1610[info] DoubleExpressionParser(1)
1611[info] - should be 1.0
1612[info] - should parse (1)
1613[info] - should fail pi
1614[info] DoubleExpressionParser.term
1615[info] - should parse 1*2
1616[info] - should parse 1/2
1617[info] - should parse 3.1415927
1618[info] - should parse (1)
1619[info] - should fail pi
1620[info] - should fail 1+2
1621[info] DoubleExpressionParser.expr
1622[info] - should parse 1 as 1.0
1623[info] - should parse 1+1 as 2.0
1624[info] - should parse 1*2+1 as 3.0
1625[info] - should parse 1*2+1-1.5 as 1.5
1626[info] - should parse 1/0 as infinite
1627[info] - should parse 1*2+1-3/2 as 1.5
1628[info] - should parse 10/3 as ...
1629[info] - should succeed for DoubleExpressionParser(2+1-3/2)
1630[info] - should succeed DoubleExpressionParser(5*(6+1-(3/2))/4)
1631[info] - should succeed DoubleExpressionParser(5*(6+1-3/2)/4) even without explicit parentheses
1632[info] - should fail to parse 1*2+1-pi/2
1633[info] - should fail to parse (1?2)
1634[info] RationalExpressionParser(1)
1635[info] - should be 1
1636[info] RationalExpressionParser(1+1)
1637[info] - should be 2/1
1638[info] - should parse 1*2+1 as 3/1
1639[info] - should parse 1*2+1-3/2 as 3/2
1640[info] RationalExpressionParser(1/0)
1641[info] - should be infinite
1642[info] (
1643[info] - should fail
1644[info] - should fail 1+2=2
1645[info] IntExpressionParser(3/2)
1646[info] - should fail
1647[info] ExpressionSpec:
1648[info] evaluate
1649[info] - should evaluate 1 + -1
1650[info] - should evaluate 1 * -1
1651[info] - should evaluate i * 2
1652[info] parse
1653[info] - should parse 1
1654[info] - should parse and evaluate sqrt(3)
1655[info] - should parse and evaluate half
1656[info] ExpressionMonoFunction
1657[info] - should work for Negate
1658[info] - should work for Reciprocal
1659[info] - should work for Exp
1660[info] - should work for Ln
1661[info] - should work for Sine
1662[info] - should work for Cosine
1663[info] evaluateAsIs for UniFunction
1664[info] - should work for Exp(1)
1665[info] - should work for Reciprocal
1666[info] - should work for Ln(-1)
1667[info] materialize UniFunction
1668[info] - should work for Exp(1)
1669[info] - should work for Reciprocal
1670[info] - should work for Exp(Ln(2))
1671[info] Expression
1672[info] - should simplifyAndEvaluate
1673[info] - should render
1674[info] - should evaluate 3 5 + 7 2 – *
1675[info] ExpressionOps
1676[info] - should evaluate +
1677[info] - should evaluate -
1678[info] - should evaluate *
1679[info] - should evaluate /
1680[info] - should evaluate ∧ 2
1681[info] - should evaluate sqrt 36
1682[info] - should evaluate sin pi/2
1683[info] - should evaluate atan
1684[info] - should evaluate log 2
1685[info] - should evaluate log e
1686[info] - should evaluate log 10
1687[info] - should fail to evaluate log 1 x or log 0 x
1688[info] - should evaluate ln E
1689[info] - should evaluate ln 2E
1690[info] - should evaluate xxx
1691[info] - should evaluate xxx 2
1692[info] toString
1693[info] - should work for (sqrt 7)∧2
1694[info] various operations
1695[info] - should evaluate E * 2
1696[info] isExact
1697[info] - should be true for any constant Number
1698[info] - should be true for any sum of exact Numbers of the same factor (not e)
1699[info] - should be false for any product of exact Numbers and a NatLog factor (except for one)
1700[info] - should be true for product of one exact Numbers and a NatLog factor
1701[info] - should be true for product of zero exact Numbers and a NatLog factor
1702[info] depth
1703[info] - should be 1 for any atomic expression
1704[info] - should be 2 for any UniFunction expression
1705[info] - should be more than 1 for other expression
1706[info] Euler
1707[info] - should prove Euler's identity 1
1708[info] - should prove Euler's identity 2
1709[info] FieldExpression
1710[info] - should Zero be equal to zero
1711[info] - should One be equal to one
1712[info] simplifyConstant
1713[info] - should simplify biFunction expressions
1714[info] simplify
1715[info] - should simplify field expressions
1716[info] - should simplify function expressions
1717[info] - should simplify biFunction expressions
1718[info] - should simplify aggregate expressions
1719[info] - should aggregate 2
1720[info] - should evaluate e * e
1721[info] - should evaluate phi * phi
1722[info] - should evaluate 1 / phi
1723[info] - should evaluate - phi
1724[info] Sum
1725[info] - should add pi to -pi
1726[info] simplifyComposite
1727[info] - should evaluate e * e
1728[info] - should evaluate phi * phi
1729[info] RealAlgebraicInstancesSpec:
1730[info] realTruncatedDivisionCRing (tquot/tmod/tquotMod + order)
1731[info] - should truncate quotient toward zero and compute remainder !!! IGNORED !!!
1732[info] - should expose an order consistent with Real.RealIsOrdering
1733[info] SignificantSpaceParsersSpec:
1734[info] SignificantSpaceParsers
1735[info] - should stringParser
1736[info] - should match for RegexOps
1737[info] - should fail for RegexOps
1738[info] - should ParserOps
1739[info] - should ParserOptionOps 1
1740[info] - should ParserOptionOps 2
1741[info] - should trim
1742[info] - should repSepSp
1743[info] ShuntingYardParserSpec:
1744[info] ShuntingYardParser
1745[info] - should parseInfix 1
1746[info] - should parseInfix 1 + 2
1747[info] - should parseInfix ( 1 + 2 ) * 3
1748[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
1749[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
1750[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
1751[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
1752[info] - should parse Infix and evaluate: 9
1753[info] - should parse Infix and evaluate: 0.5
1754[info] - should parse Infix and evaluate: sqrt(3)
1755[info] - should parse Infix and evaluate: sin(pi)
1756[info] - should parse Infix and evaluate: sin(pi/2)
1757[info] - should shuntingYard
1758[info] - should shuntingYard w/o spaces
1759[info] - should operator
1760[info] MillSpec:
1761[info] Mill
1762[info] - should pop
1763[info] - should push
1764[info] - should iterate
1765[info] - should empty
1766[info] - should apply()
1767[info] - should apply(1)
1768[info] - should process empty list of Items
1769[info] - should create a Mill from list of Items: 42, 37, +
1770[info] - should accept list of Items: 42, 37, +
1771[info] - should process list of Items: 42, 37, +
1772[info] - should process list of Items: 42, 37, -
1773[info] - should process list of Items with Swap: 42, 37, Swap, -
1774[info] - should process list of Items with Noop: 42, 37, +, Noop
1775[info] - should process list of Items with Clr: 42, 37, +, c
1776[info] - should process Noop
1777[info] - should process list of Items: 3, 2, ∧
1778[info] - should process list of Items: 7, chs
1779[info] - should process list of Items: 42, 37, +, 2, *
1780[info] - should process list of Items: 2, inv
1781[info] - should process a String: 42 37 + 2 *
1782[info] parse and evaluate
1783[info] - should parse and evaluate: 2 37 + 2 *
1784[info] - should parse and evaluate: 2 3 ∧
1785[info] - should parse and evaluate: 2 3 /
1786[info] - should parse and evaluate: 2 v
1787[info] - should parse and evaluate: 73 24 <> -
1788[info] - should parse and evaluate: 𝛑 cos
1789[info] - should parse and evaluate: 𝛑 sin
1790[info] - should parse and evaluate: 𝜀 ln
1791[info] - should parse and evaluate: 2 exp
1792[info] - should parse and evaluate: 12 34 + 56 + 78 - 90 + 12 -
1793[info] - should parse and evaluate: 3696
1794[info] - should parse and evaluate: 207
1795[info] - should parse and evaluate: 207 with leading space
1796[info] - should parse and evaluate: 207 with trailing space
1797[info] - should parse and evaluate: 9
1798[info] - should parse 3 5 + 7 2 – *
1799[info] - should parse 3 4 2 × 1 5 − 2 3 ∧ ∧ ÷ +
1800[info] - should parse and evaluate: 220xxxx with trailing space
1801[info] - should parse infix
1802Seed length: 3457
1803800
18043
180522/7
1806333/106
1807355/113
1808103993/33102
1809104348/33215
1810208341/66317
1811312689/99532
1812833719/265381
18131146408/364913
1814ratio = 104348/33215
1815ratio = 104348/33215
1816[info] FuzzyParserSpec:
1817[info] integer
1818[info] - should parse 1
1819[info] - should parse 6
1820[info] fuzz
1821[info] - should parse (42)
1822[info] - should not parse 42
1823[info] fraction
1824[info] - should parse .42
1825[info] exponent
1826[info] - should parse E-11
1827[info] - should parse E11
1828[info] - should parse e2
1829[info] nominal
1830[info] - should parse 1
1831[info] - should parse 6.67408
1832[info] - should parse 6.67408E-11
1833[info] fuzzyRep
1834[info] - should parse 1
1835[info] partial parsing
1836[info] - should parse 6.67408(31)E−11
1837[info] fuzzyRep
1838[info] - should parse 6.67408(31)E−11
1839[info] fuzzy
1840[info] - should be Exact(1)
1841[info] - should parse 6.67408(31)E−11
1842[info] - should parse 3.1415927(01)
1843[info] - should parse 3.1415927
1844[info] - should parse 16.5[2]
1845[info] FactorSpec:
1846[info] Factor
1847[info] - should add pure numbers
1848[info] - should add roots
1849[info] - should multiply PureNumber by Other
1850[info] - should multiply Other by PureNumber
1851[info] - should multiply Other by Ln
1852[info] - should multiply Other by NthRoot
1853[info] - should handle percentages
1854[info] - should raise
1855[info] - should clean
1856[info] - should convert
1857[info] - should isAdditive
1858[info] - should isA
1859[info] - should modulate
1860[info] - should render
1861[info] - should sPiAlt2
1862[info] - should sPiAlt1
1863[info] - should sPiAlt0
1864[info] - should apply
1865[info] - should sPi
1866[info] - should sE and sEi
1867[info] FPSpec:
1868[info] FP
1869[info] - should identityTry
1870[info] - should tryMap
1871[info] - should toTry
1872[info] - should optionMap
1873[info] - should tryF1
1874[info] - should tryF2
1875[info] - should recover
1876[info] doMap function
1877[info] - should doMap: return Success(Z) when given Right(R)
1878[info] - should doMap: call tryMapLeft and return its result when given Left(L)
1879[info] - should resource
1880[info] - should toTryWithThrowable
1881[info] - should readFromResource
1882[info] - should optional
1883[info] - should resourceForClass
1884[info] - should sequence1
1885[info] - should sequence2
1886[info] - should sequence3
1887[info] - should sequence4
1888[info] - should sequence5
1889[info] - should fail1: return a Failure with CoreException when given a String
1890[info] - should fail2: return a Failure with the given Throwable
1891[info] - should getOrThrow
1892[info] - should transpose
1893[info] toTry
1894[info] - should toTry
1895[info] - should toTryWithThrowable
1896[info] - should toTryWithRationalException
1897Standard: 74.5
1898Karatsuba: 12.0
189983.89261744966443
1900Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1901Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1902Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
19031.4953487812212205
1904Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1905Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1906Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
1907BiFunction{𝛗 + 1}
1908phi2 = 2.6180339887498950(47)
1909psi2 = 0.3819660112501051(67)
1910[info] ConstantsSpec:
1911[info] constants
1912[info] - should have root2
1913[info] - should have root2 a
1914[info] - should have root3
1915[info] - should have root5
1916[info] - should have G
1917[info] - should have gamma
1918[info] - should have avagadro
1919[info] - should have boltzmann
1920[info] - should have planck
1921[info] - should have c
1922[info] - should have mu
1923[info] - should have phi
1924[info] - should have alpha
1925[info] toString
1926[info] - should work for G
1927[info] LinearSpec:
1928[info] Linear
1929[info] - should add 1
1930[info] - should branches
1931[info] - should isExact
1932[info] - should render
1933[info] - should approximation
1934[info] - should signum
1935[info] - should abs
1936[info] - should scale
1937[info] - should negate
1938[info] - should product
1939[info] - should solutionSquared
1940[info] - should invert
1941[info] - should add 2
1942[info] - should multiply
1943[info] - should power 2
1944[info] - should apply(Solution) to get half
1945[info] ExpressionSpec:
1946[info] Expression
1947[info] - should parseToMillExpression
1948[info] ShuntingYardParser
1949[info] - should parseInfix 1
1950[info] - should parseInfix 1 + 2
1951[info] - should parseInfix ( 1 + 2 ) * 3
1952[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
1953[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
1954[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
1955[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
1956[info] - should parse Infix and evaluate: 9
1957[info] - should parse Infix and evaluate: 0.5
1958[info] - should parse Infix and evaluate: sqrt(3)
1959[info] - should shuntingYard
1960[info] - should shuntingYard w/o spaces
1961[info] - should operator
1962[info] RationalAlgebraicInstancesSpec:
1963[info] rationalTruncatedDivisionCRing (tquot/tmod/tquotmod + order)
1964[info] - should truncate quotient toward zero and compute remainder
1965[info] - should expose an order consistent with Rational.RationalIsOrdering
1966[info] SolutionSpec:
1967[info] Solution
1968[info] - should isPureNumber
1969[info] - should base
1970[info] - should scale
1971[info] - should branch
1972[info] - should factor
1973[info] - should isZero
1974[info] - should maybeFactor
1975[info] - should isExact
1976[info] - should signum
1977[info] - should add
1978[info] - should offset
1979[info] - should isUnity
1980[info] - should asNumber
1981[info] - should asField
1982[info] MillParserSpec:
1983[info] MillParser
1984[info] - should parse monadicOperator
1985[info] - should parse dyadicOperator
1986[info] - should parse number
1987[info] - should parse dyadicTerm
1988[info] - should parse monadicTerm (1)
1989[info] - should parse monadicTerm (2)
1990[info] - should parse anadicTerm
1991[info] - should parse term
1992[info] - should parse mill
1993[info] - should parseMill
1994[info] - should parse: 73 24 <> -
1995[info] RealAlgebraicInstancesLawSpec:
1996[info] ContextSpec:
1997[info] Context
1998[info] - should or
1999[info] - should and
2000[info] - should qualifyingField
2001[info] - should fieldQualifies
2002[info] - should not
2003[info] - should AnyRoot
2004[info] - should AnyLog
2005[info] - should AnyScalar
2006[info] FieldSpec:
2007[info] Field
2008[info] - should isExact
2009[info] - should multiply i by itself correctly
2010[info] - should add
2011[info] - should take the natural log of i
2012[info] - should take the natural log of 2
2013[info] ContinuedFractionSpec:
2014[info] ConFrac.take
2015[info] - should create singleton simple ConFrac
2016[info] - should create doubleton simple ConFrac
2017[info] ConFrac.takeWhile
2018[info] - should phi ConFrac.simple precise to 1E-6
2019[info] - should fail to evaluate phi ConFrac precise to 1E-6
2020[info] ConFrac.convergents
2021[info] - should get convergents from simple ConFrac
2022[info] - should get convergents from simple finite expansion for pi
2023[info] - should get convergents for e
2024[info] - should get convergents for root 2
2025[info] ConFrac.coefficients
2026[info] - should work on finite simple ConFrac
2027[info] - should work on very short finite simple ConFrac
2028[info] - should work on infinite simple ConFrac
2029[info] - should work on finite general ConFrac
2030[info] ConFrac.reverseCoefficients
2031[info] - should work on finite simple ConFrac
2032[info] ConFrac.toNominalRational
2033[info] - should implement simple toNominalRational
2034[info] - should implement simple toRationalOption(Rational)
2035[info] - should implement simple finite toRationalOption(Rational)
2036[info] - should implement simple toNominalRational(Double)
2037[info] - should define implement coefficients for FourOverPiLeibniz
2038[info] ConFrac.phi
2039[info] - should toDouble
2040[info] - should implement toDouble(Double)
2041[info] ConFrac.e
2042[info] - should define ConFrac
2043[info] ConFrac.PiSimple
2044[info] - should define ConFrac
2045[info] ConFrac.root2
2046[info] - should define ConFrac
2047[info] - should solve the Strand magazine puzzle
2048[info] ConFrac.root3
2049[info] - should define ConFrac
2050[info] ConFrac.root19
2051[info] - should define ConFrac
2052[info] - should toDouble
2053[info] - should implement toDouble(Double)
2054[info] ConFrac.unapply
2055[info] - should work
2056[info] ContinuedFraction.prefix
2057[info] - should create singleton ContinuedFraction
2058[info] ContinuedFraction.takeWhile
2059[info] - should phi ContinuedFraction precise to 1E-6
2060[info] ContinuedFraction.toNominalRational
2061[info] - should implement toNominalRational
2062[info] - should implement toNominalRational(Double)
2063[info] ContinuedFraction.phi
2064[info] - should toDouble
2065[info] - should implement toDouble(Double)
2066[info] ContinuedFraction.e
2067[info] - should define ContinuedFraction
2068[info] ContinuedFraction.pi
2069[info] - should define ContinuedFraction.PiSimple
2070[info] - should get ContinuedFraction.PiSimple with precision 1 in 10^10
2071[info] - should define ContinuedFraction.PiSomayaji
2072[info] - should define ContinuedFraction.PiA
2073[info] ContinuedFraction.root2
2074[info] - should define ContinuedFraction
2075[info] ContinuedFraction.root3
2076[info] - should define ContinuedFraction
2077[info] ContinuedFraction.root19
2078[info] - should define ContinuedFraction
2079[info] - should toDouble
2080[info] - should implement toDouble(Double)
2081[info] GoldbachSpec:
2082[info] Goldbach
2083[info] - should goldbach success
2084[info] - should goldbach fail
2085[info] PotHolesSpec:
2086[info] PotHoles
2087[info] - should cost 0
2088[info] - should cost 1
2089[info] - should cost 3
2090[info] - should cost 8
2091[info] - should cost 15
2092[info] - should cost 16
2093[info] - should cost 10
2094[info] - should cost 11
2095[info] - should cost random
2096[info] ExpressionMatchersSpec:
2097[info] value
2098[info] - should work with value on Literal
2099[info] - should work with value on One
2100[info] - should work with value on Number.one
2101[info] - should work with value on FuzzyNumber
2102[info] - should fail on non-value
2103[info] matchValue
2104[info] - should work with value 1
2105[info] |
2106[info] - should work with | 1 or 2
2107[info] matchSimpler
2108[info] - should matchSimpler 1
2109[info] - should simplifyTrivial 1
2110[info] - should handle Sum
2111[info] - should handle Product
2112[info] - should handle Power
2113[info] - should cancel -1 and - 1
2114[info] - should cancel multiplication and division
2115[info] - should simplify sqrt(7)∧2
2116[info] - should cancel 1 and - -1
2117[info] - should cancel 1 and - -1 b
2118[info] - should cancel 2 * 1/2 (a)
2119[info] - should cancel 2 * 1/2 (b)
2120[info] - should cancel ∧2 and sqrt for 7
2121[info] - should show that lazy evaluation sometimes works even when you don't use it (a)
2122[info] - should cancel multiplication and division 2
2123[info] - should cancel multiplication and division backwards
2124[info] - should cancel 1 and - -1 (a)
2125[info] - should cancel 2 and * 1/2
2126[info] - should cancel 2 * 1/2
2127[info] - should cancel ∧2 and sqrt
2128[info] - should cancel addition and subtraction of 3
2129[info] - should cancel addition and subtraction of e
2130[info] - should work for multi-levels 1
2131[info] - should work for multi-levels 2
2132[info] matchSimpler 2
2133[info] - should simplify (1+2)*(2+1)
2134[info] - should properly simplify 1 * (root3 / root3 * 3)
2135[info] - should simplify e * 2 / 2
2136[info] - should simplify root3 * 2 / 2
2137[info] - should simplify root4 * 2 / 2
2138[info] - should distribute
2139[info] - should distributeProductSum a
2140[info] - should distributeProductSum b
2141[info] - should distributeProductPower on root(3) * root(3)
2142[info] simplifyAggregate
2143[info] - should simplifyAggregate
2144[info] simplify
2145[info] - should cancel addition and subtraction (a)
2146[info] - should use multiply instead of addition
2147[info] - should work for Negate
2148[info] - should work for Negate Negate
2149[info] - should work for Reciprocal
2150[info] - should work for Reciprocal Reciprocal
2151[info] - should work for Negate Zero
2152[info] - should work for Negate MinusOne
2153[info] - should work for Reciprocal Zero
2154[info] - should work for Reciprocal One
2155[info] - should work for Reciprocal Two
2156[info] - should work for Exp Infinity
2157[info] - should work for Exp neg Infinity
2158[info] - should work for Exp Zero
2159[info] - should work for Exp One
2160[info] - should work for Ln Zero
2161[info] - should work for Ln One
2162[info] - should work for Ln e
2163[info] - should work for Sine 0
2164[info] - should work for Sine pi/2
2165[info] - should work for Sine pi
2166[info] - should work for Cosine 0
2167[info] - should work for Cosine pi/2
2168[info] - should work for Cosine pi
2169[info] complementaryTermsEliminatorAggregate
2170[info] - should eliminate * 2 / 2 in Aggregate
2171[info] - should eliminate 2 + -2 in Aggregate
2172[info] - should eliminate √3 and -√3 in Aggregate
2173[info] - should eliminate square root ∧ 2 in Aggregate
2174[info] simplifyAtomic
2175[info] - should leave atomic expression as is
2176[info] - should simplify literal expression one
2177[info] - should simplify literal expression pi
2178[info] factorsMatch
2179[info] - should match expression Sum
2180[info] - should match expression Product
2181[info] - should match expression Power
2182[info] simplify aggregate, etc.
2183[info] - should aggregate 1
2184[info] - should aggregate 2
2185[info] - should simplify aggregate 1
2186[info] - should simplify aggregate 1a
2187[info] - should simplify aggregate 2a
2188[info] - should simplify aggregate 2b
2189[info] - should simplify binary expression 3
2190[info] - should simplify aggregate 3a
2191[info] - should simplify aggregate 4a
2192[info] - should simplify aggregate 4b
2193[info] simplifyAndEvaluate (a)
2194[info] - should show ∧2 and sqrt for illustrative purposes (a)
2195[info] - should evaluate E * 2
2196[info] simplifyTerms
2197[info] - should work for BiFunction 1
2198[info] - should work for BiFunction 2
2199[info] - should work for UniFunction
2200[info] - should work for Aggregate total
2201[info] - should work for Aggregate product 1
2202[info] - should work for Aggregate product 2
2203[info] biFunctionAggregator
2204[info] - should work for 7 + 2 - 3
2205[info] - should work for 7 * 2 * -3
2206[info] biFunctionSimplifier
2207[info] - should work for square of square root
2208[info] - should work for products
2209[info] - should work for sums
2210[info] - should gather powers of 2 and * 1/2
2211[info] matchComplementary
2212[info] - should cancel plus and minus
2213[info] matchDyadicTrivial
2214[info] - should handle Sum
2215[info] - should handle Product
2216[info] - should handle Power
2217[info] - should cancel multiplication and division
2218[info] - should cancel value and reciprocal 1
2219[info] - should cancel value and reciprocal 2
2220[info] matchComplementaryExpressions
2221[info] - should work for plus and minus
2222[info] - should work for reciprocals
2223[info] matchSimplifyDyadicTermsTwoLevels
2224[info] - should match 1
2225[info] - should match 2
2226[info] biFunctionSimplifier
2227[info] - should simplify
2228[info] - should simplify √3 * -1 as -√3
2229[info] - should simplify √3 * 1 as √3
2230[info] - should simplify (√3 + 1)(√3 - 1) as 2 exactly
2231[info] - should evaluate (√3 + 1)(√3 + -1) as 2 exactly
2232[info] - should biFunctionSimplifier on (1 + -3)
2233[info] - should biFunctionSimplifier on (1 + √3)(1 - √3)
2234[info] - should simplify 1 + 2 - 2
2235[info] - should properly simplify 1 + 2 - 2 + 0
2236[info] - should simplify expressions involving square root 3
2237[info] various
2238[info] - should distributeProductSum c
2239[info] - should properly simplify 1 + root3 - root3 + 0
2240[info] - should properly simplify (1 + root3) + (zero - root3)
2241[info] - should properly simplify (1 * root3) * (3 / root3)
2242[info] - should simplify 2 root(3) all squared
2243[info] value with logging
2244[info] - should work with value on Literal
2245[info] - should work with value on One
2246[info] - should work with value on Number.one
2247[info] - should work with value on FuzzyNumber
2248[info] - should fail on non-value
2249[info] biFunctionTransformer (2)
2250[info] - should simplify 1 + 1
2251[info] - should simplify pi + pi
2252[info] - should simplify 1 + 0
2253[info] - should fail to simplify 1 + pi
2254[info] - should simplify 1 + -1
2255[info] - should simplify 1 * 1
2256[info] - should simplify pi * pi
2257[info] - should simplify 1 * 0
2258[info] - should simplify 1 * -1
2259[info] - should simplify 2 ∧ -1
2260[info] - should fail to simplify 2 ∧ 1/2
2261[info] evaluateMonadicDuple
2262[info] - should simplify E
2263[info] - should simplify ln(E)
2264[info] - should simplify ln(1)
2265[info] - should simplify ln(-1)
2266[info] matchSimplifyBiFunction
2267[info] - should simplify multiple similar ops
2268[info] two levels
2269[info] - should get 0 from -√3 + √3
2270[info] - should get 0 from √3 + -√3
2271[info] - should get 1 from 1/√3 * √3
2272[info] - should simplify -1 * √3 as negate(√3)
2273[info] - should simplify √3 * -1 as negate(√3)
2274[info] - should simplify various
2275[info] - should simplify root3 * 2 / 2
2276[info] matchAndCollectTwoDyadicLevels
2277[info] - should work for √3 * √3
2278[info] - should work for √3 + -√3
2279[info] - should work for (π + 1) * (π - 1)
2280[info] NumberParserSpec:
2281[info] percentage
2282[info] - should parse 10%
2283[info] - should parse 10.35%
2284[info] - should parse 10.352%
2285[info] degree
2286[info] - should parse 180°
2287[info] - should parse -180°
2288[info] - should parse 0°
2289[info] numberWithFuzziness
2290[info] - should parse 1.0*
2291[info] - should reject 1.0 *
2292[info] - should parse 1.*
2293[info] - should reject 1.*
2294[info] - should parse 3.1415927*
2295[info] - should parse 3.1415927...
2296[info] - should parse 3.1415927*E1
2297[info] - should reject 3.1415927* E1
2298[info] - should parse 1.00(5)
2299[info] - should reject 1.00 (5)
2300[info] generalNumber
2301[info] - should parse 1.0
2302[info] - should parse 1.*
2303[info] - should work for 3.14
2304[info] - should work for 3.1415927
2305[info] - should parse 3.1415927*
2306[info] - should parse 2.9979245800E8
2307[info] - should parse 3.1415927*E1
2308[info] - should parse 1/2
2309[info] - should work for 1.00(5)
2310[info] fuzz
2311[info] - should parse (17)
2312[info] - should parse *
2313[info] number
2314[info] - should parse 1.*
2315[info] - should work for 3.14
2316[info] - should work for 3.1415927
2317[info] - should parse 3.1415927*
2318[info] - should parse 3.1415927*E1
2319[info] - should parse 3.141592653589793*
2320[info] - should parse 𝛑
2321[info] - should parse 1𝛑
2322[info] - should reject 1 𝛑
2323[info] realNumber
2324[info] - should parse 2.9979245800E8
2325[info] ComplexParserSpec:
2326[info] ComplexParser
2327[info] - should doParse
2328[info] PrimesSpec:
2329[info] Prime
2330[info] - should bits
2331[info] - should isProbablePrime
2332[info] - should isProbableOddPrime
2333[info] - should fermat
2334[info] - should implement Lucas for 7 and 71
2335[info] - should implement primeFactors
2336[info] - should implement primeFactorMultiplicity
2337[info] - should implement Lucas()
2338[info] - should implement testPrimitiveRoot
2339[info] - should implement primitiveRoot
2340[info] - should multiplicativeInverse
2341[info] - should validate
2342[info] - should next
2343[info] - should isCarmichaelNumber2
2344[info] - should isCarmichaelNumber3
2345[info] - should create primes from Mersenne numbers
2346[info] - should create Mersenne numbers
2347[info] - should create Mersenne prime
2348[info] - should get first 100 primes
2349[info] - should get first 1000 primes
2350[info] - should get primes < 1000
2351[info] piApprox
2352[info] - should be correct for specific values
2353[info] - should be correct for 10∧x
2354[info] MillerRabin
2355[info] - should get small primes < 1000
2356[info] - should eSieve for primes < 1000
2357[info] - should eSieve for primes < 10000
2358[info] - should test MillerRabin
2359[info] - should totient
2360Series: 0, 0.01𝛑, 0, -5.16771278004997E-6±0.00000000000072%, 0, 2.5501640398773455E-10±0.00000000000032%, 0, -5.992645293207921E-15±0.00000000000048%, 0, 8.214588661112824E-20±0.00000000000043%, ...
2361phi = 1.6180339887498950(47), expected = 1.6180339887498950*
2362psi = -0.6180339887498949(67)
2363𝛗
2364solution = Solution: -0.5 + + √1.25, expected = Solution: -0.5 + + √1.25
2365solution = 0.6180339887498949(37)
2366psi.abs = Some(Some(0.6180339887498949)), expected = Some(Some(0.6180339887498949))
2367[info] BumperatorSpec:
2368[info] Bumperator
2369[info] - should hasNext 0
2370[info] - should hasNext 1
2371[info] - should hasNext 2
2372[info] - should next 1
2373[info] - should toList 1
2374[info] LazyFunctionSpec:
2375[info] Compose
2376[info] - should yield identity result when complementary functions composed
2377[info] - should form Identity when complementary functions provided
2378[info] - should form Composed when non-complementary functions provided (1)
2379[info] - should form Composed when non-complementary functions provided (2)
2380[info] InfiniteSumSpec:
2381[info] harmonic series
2382[info] - should asLazyList
2383[info] - should apply
2384[info] - should toDouble
2385[info] Leibniz
2386[info] - should asLazyList
2387[info] - should apply
2388[info] - should toDouble
2389[info] Euler
2390[info] - should asLazyList
2391[info] - should apply
2392[info] - should toDouble
2393[info] Stefan-Boltzmann
2394[info] - should asLazyList
2395[info] - should apply
2396[info] - should toDouble
2397[info] FuzzSpec:
2398[info] Gaussian
2399[info] - should sum with self
2400[info] - should not multiply with self
2401[info] Bounded
2402[info] - should sum with self
2403[info] - should multiply with self
2404[info] - should implement negate
2405[info] - should implement inverse
2406[info] - should implement power(Int)
2407[info] - should implement power(Double)
2408[info] - should implement power(Fuzzy)
2409[info] fuzzy(String)
2410[info] - should parse 1
2411[info] - should parse 6.67408(31)E−11
2412[info] - should parse 3.1415927(01)
2413[info] - should parse 3.1415927
2414[info] RootSpec:
2415[info] Root
2416[info] - should work from first principles
2417[info] - should evaluate Phi correctly
2418[info] - should evaluate Phi∧2 correctly
2419[info] - should evaluate Phi + Psi
2420[info] - should evaluate Phi * Psi
2421[info] - should evaluate Phi + Phi
2422[info] - should evaluate 2 * Phi
2423[info] - should evaluate 2 + Phi
2424[info] - should mind its ps and qs
2425[info] - should materialize
2426[info] - should evaluateAsIs
2427[info] - should maybeFactor
2428[info] - should isExact
2429[info] - should render
2430[info] - should asNumber
2431[info] - should depth
2432[info] - should discriminant
2433[info] - should isAtomic
2434[info] - should evaluate(AnyContext)
2435[info] RealSpec:
2436[info] create
2437[info] - should yield Right(1)
2438[info] - should yield Right(1, Radian)
2439[info] toString
2440[info] - should yield 1
2441[info] - should work for Pi
2442[info] - should work for E
2443[info] - should work for E∧2
2444[info] - should work for E∧3
2445[info] - should work for E∧4
2446[info] - should work for E∧10
2447[info] render
2448[info] - should work for square root E
2449[info] toDouble
2450[info] - should yield 1
2451[info] apply
2452[info] - should work for "1"
2453[info] - should work for "𝛑"
2454[info] - should work for 1
2455[info] asReal
2456[info] - should work for real
2457[info] - should work for number
2458[info] plus
2459[info] - should add 1 and 2
2460[info] - should add 1 to pi
2461[info] - should add 1 to e
2462[info] minus
2463[info] - should negate 1
2464[info] subtract
2465[info] - should subtract 1 from 2
2466[info] multiply
2467[info] - should multiply 1 and 2
2468[info] invert
2469[info] - should invert 1
2470[info] division
2471[info] - should divide 1 by 2
2472[info] power
2473[info] - should work for squaring PureNumber
2474[info] - should work for squaring SquareRoot
2475[info] sqrt
2476[info] - should work for easy ints
2477[info] sin
2478[info] - should be zero for pi
2479[info] - should work for 0
2480[info] - should work for Radian/2
2481[info] - should work for Radian/6
2482[info] - should work for Radian/3
2483[info] - should work for Radian/4
2484[info] - should work for One
2485[info] cos
2486[info] - should be zero for pi
2487[info] - should work for 0
2488[info] - should work for Pi/2
2489[info] - should work for Pi/3
2490[info] - should work for Pi/6
2491[info] tan
2492[info] - should be zero for 0
2493[info] - should be zero for pi
2494[info] - should work for Pi/2
2495[info] - should work for Pi/3
2496[info] - should work for Pi/6
2497[info] atan
2498[info] - should be 0Pi for 0/1
2499[info] - should be pi/4 for 1/1
2500[info] - should be 0Pi for 0/-1
2501[info] - should be Pi / 3 for root(3)
2502[info] - should be 7 Pi / 6 for 1/-root(3)
2503[info] - should be 11 Pi / 6 for -1/2
2504[info] - should be 3 pi / 4 for 1/-1
2505[info] - should evaluate atan of 1 over -0
2506[info] - should evaluate atan of -1 over 0
2507[info] exp
2508[info] - should be E for 1
2509[info] - should be 1 for 0
2510[info] - should be e∧2 for 2
2511[info] ln
2512[info] - should be 1 for E
2513[info] - should be 0 for 1
2514[info] - should be 2 for E∧2
2515[info] compare
2516[info] - should work for 1, 1
2517[info] - should work for 1, 2
2518[info] - should work for 2, 1
2519[info] Numeric toInt
2520[info] - should work for 1
2521[info] - should work for BigInt 1
2522[info] - should work for 1.0
2523[info] Numeric toLong
2524[info] - should work for 1
2525[info] - should work for 1.0
2526[info] Numeric toDouble
2527[info] - should work for 1
2528[info] Numeric plus
2529[info] - should work for 1
2530[info] - should work for 1.0
2531[info] Numeric minus
2532[info] - should work for 1
2533[info] - should work for 1.0
2534[info] Numeric fromInt
2535[info] - should work for -1
2536[info] - should work for 0
2537[info] - should work for 1
2538[info] Numeric parseString
2539[info] - should work for -1
2540[info] - should work for 0
2541[info] - should work for 1
2542[info] - should work for 6.67430(15)E-11
2543[info] Real div
2544[info] - should work for 1/2
2545[info] - should work for 2/2
2546[info] - should work for 2/3
2547[info] RealOps
2548[info] - should work for 2 + Real(3)
2549[info] - should work for 2 * Real(3)
2550[info] - should work for 1 :/ 2
2551[info] multiply
2552[info] - should work for pure numbers
2553[info] LazyNumberRationalSpec:
2554[info] rat1
2555[info] - should be 1
2556[info] - should be -1 after negate
2557[info] - should be 0 after minus(1)
2558[info] rat2
2559[info] - should be 2
2560[info] - should be 4 when multiplied by itself
2561[info] - should be 1 when divided by itself
2562[info] - should be 3 when added to one
2563[info] - should be 6 when added to one and three
2564[info] - should be 3 when added to one by explicit function
2565[info] for comprehension
2566[info] - should give 4
2567[info] - should give 8
2568[info] ExactNumberSpec:
2569[info] ExactNumber
2570[info] - should isProbablyZero
2571[info] - should isSame
2572[info] - should signum
2573[info] - should compare
2574[info] - should isZero
2575[info] - should isExact
2576[info] - should doAdd
2577[info] - should scale
2578[info] - should doPower
2579[info] - should factor
2580[info] - should render
2581[info] - should make
2582[info] - should doMultiply
2583[info] - should simplify
2584[info] - should nominalValue
2585[info] - should apply
2586[info] - should succeed with log
2587[info] - should fail with log
2588[info] ValueSpec:
2589[info] Value
2590[info] - should signum
2591[info] - should isZero
2592[info] - should isEqual
2593[info] - should maybeDouble
2594[info] - should valueToString 1
2595[info] - should valueToString 2
2596[info] - should valueToString 3
2597[info] - should maybeInt
2598[info] - should maybeNominalRational
2599[info] - should add
2600[info] - should abs
2601[info] - should scaleDouble
2602[info] NumberSpec:
2603[info] create
2604[info] - should yield Right(1)
2605[info] - should yield Left(Right(bigBigInt))
2606[info] - should yield Right(1, Fuzz)
2607[info] - should yield Right(1, Radian)
2608[info] - should yield ExactNumber(1, Euler)
2609[info] - should yield ExactNumber(1/2, Euler)
2610[info] - should yield Right(1, Radian, Fuzz)
2611[info] nominalValue
2612[info] - should yield Right(1)
2613[info] - should yield Left(Right(bigBigInt))
2614[info] toNominalRational
2615[info] - should yield Some(1)
2616[info] toString
2617[info] - should yield 1
2618[info] - should work for Pi
2619[info] - should work for E
2620[info] - should work for Radian as scalar
2621[info] - should work for E as scalar (rel fuzzy)
2622[info] - should work for 1 scaled as Radian
2623[info] - should work for E∧2
2624[info] - should work for E∧3
2625[info] - should work for E∧4
2626[info] - should work for E∧10
2627[info] - should work for square root E
2628[info] - should work for i
2629[info] - should work for e∧ix
2630[info] normalize
2631[info] - should work for E as scalar (abs fuzzy)
2632[info] - should work for E∧2 as Real
2633[info] - should work for E, SquareRoot
2634[info] - should work for NatLog, SquareRoot
2635[info] - should work for NatLog, SquareRoot approx
2636[info] - should multiply root2 and root2
2637[info] - should multiply sin by sin
2638[info] - should work for easy Rational
2639[info] toDouble
2640[info] - should yield 1
2641[info] isValid
2642[info] - should yield true for 1
2643[info] - should yield false for None
2644[info] parse
2645[info] - should work for 1
2646[info] - should work for 3/2
2647[info] - should work for 3.1415927
2648[info] - should work for BigInt
2649[info] - should work for Radian
2650[info] - should work for pi
2651[info] - should work for e
2652[info] - should fail with x
2653[info] - should fail for ""
2654[info] apply
2655[info] - should fail for ""
2656[info] - should work for "1"
2657[info] - should work for "2147483648"
2658[info] - should work for "3.1415927"
2659[info] - should work for 3.1416
2660[info] - should work for "𝛑"
2661[info] - should work for 1
2662[info] - should work for bigBigInt
2663[info] - should work for Rational(1,2)
2664[info] - should work for math.pi
2665[info] - should work for nothing
2666[info] - should work for BigDecimal(3.1415927)
2667[info] - should work for 3.1415927
2668[info] - should work for 3.1415926535897932384626433
2669[info] - should work for 0.5
2670[info] - should work for 1.23
2671[info] - should work for 1.234
2672[info] - should work for 1.23400
2673[info] - should support exact strings
2674[info] Number.parse
2675[info] - should parse boltzmann
2676[info] - should fail to parse boltzmann with alternative minus
2677[info] - should parse planck
2678[info] - should parse c
2679[info] - should parse avagadro
2680[info] FuzzOps
2681[info] - should get mu
2682[info] - should get G using FuzzStringOps
2683[info] - should get alpha
2684[info] specialize
2685[info] - should work for 1
2686[info] - should work for BigInt 1
2687[info] - should work for BigInt(1+Int.MaxValue)
2688[info] - should work for Rational(1)
2689[info] - should work for Rational.half
2690[info] - should work for 0.5
2691[info] - should work for 1.0
2692[info] - should work for nothing
2693[info] scale
2694[info] - should work for PureNumber, PureNumber
2695[info] - should work for Radian, Radian
2696[info] - should work for PureNumber, Radian
2697[info] - should work for Radian, PureNumber
2698[info] - should work for PureNumber, NatLog
2699[info] - should work for NatLog, PureNumber
2700[info] - should work for 2E, PureNumber
2701[info] - should work for 2E, PureNumber but comparing against NatLog * NatLog
2702[info] - should work for PureNumber, 2E (same as before but with parameters to === reversed
2703[info] - should work for PureNumber, 2E (same as before but using NatLog * NatLog and parameters to === reversed
2704[info] - should work for NatLog, Radian
2705[info] - should work for Radian, NatLog
2706[info] - should work for Log2, PureNumber
2707[info] - should work for Log10, PureNumber
2708[info] - should work for Log2, NatLog
2709[info] - should work for SquareRoot, PureNumber
2710[info] - should work for Root2s
2711[info] - should work for CubeRoot, PureNumber
2712[info] - should work for SquareRoot, CubeRoot
2713[info] - should work for PureNumber, SquareRoot
2714[info] alignFactors
2715[info] - should work for PureNumber, PureNumber
2716[info] - should work for PureNumber, Radian
2717[info] - should work for Radian, PureNumber
2718[info] - should work for Radian, Radian
2719[info] alignTypes
2720[info] - should work for Int,Int
2721[info] - should work for Int Int(Radian)
2722[info] - should work for Int,BigInt
2723[info] - should work for BigInt,Int
2724[info] - should work for Int,Rational
2725[info] - should work for Rational,Int
2726[info] - should work for Int,Double
2727[info] - should work for Double,Int
2728[info] - should work for Int,None
2729[info] - should work for None,Int
2730[info] - should work for BigInt,BigInt
2731[info] - should work for BigInt,Rational
2732[info] - should work for Rational,BigInt
2733[info] - should work for BigInt,Double
2734[info] - should work for Double,BigInt
2735[info] - should work for BigInt,None
2736[info] - should work for None,BigInt
2737[info] - should work for Rational,Rational
2738[info] - should work for Rational,Double
2739[info] - should work for Double,Rational
2740[info] - should work for Rational,None
2741[info] - should work for None,Rational
2742[info] - should work for Double,Double
2743[info] - should work for Double,None
2744[info] - should work for None,Double
2745[info] - should work for None,None
2746[info] plus
2747[info] - should add 1 and 2
2748[info] - should add BigInt 1 and 2
2749[info] - should add Rational 1 and 2
2750[info] - should add Double 1 and 2
2751[info] - should add Double 1 and Radian
2752[info] - should add Radian and 2Pi
2753[info] - should add 1 to pi
2754[info] - should add 1 to e
2755[info] - should add 1 to √2
2756[info] - should add 1 to √3
2757[info] - should add 1 to √5
2758[info] - should add pi to -pi
2759[info] minus
2760[info] - should negate 1
2761[info] - should negate BigInt 1
2762[info] - should negate Rational 1
2763[info] - should negate Double 1
2764[info] subtract
2765[info] - should subtract 1 from 2
2766[info] - should subtract BigInt 1 from 2
2767[info] - should subtract Rational 1 from 2
2768[info] - should subtract Double 1 from 2
2769[info] multiply
2770[info] - should multiply 1 and 2
2771[info] - should multiply BigInt 1 and 2
2772[info] - should multiply Rational 1 and 2
2773[info] - should multiply Double 1 and 2
2774[info] - should multiply 2 and Radian
2775[info] - should multiply Radian and 2
2776[info] - should multiply rational by Int
2777[info] invert
2778[info] - should invert 1
2779[info] - should invert BigInt 1
2780[info] - should invert 2
2781[info] - should invert BigInt 2
2782[info] - should invert Rational 2
2783[info] - should invert Double pi
2784[info] division
2785[info] - should divide 1 by 2
2786[info] - should divide BigInt 1 by 2
2787[info] - should divide Rational 1 by 2
2788[info] - should divide Double 1 by Double Radian
2789[info] **
2790[info] - should work for 2∧2
2791[info] power
2792[info] - should work for squaring PureNumber
2793[info] - should work for squaring SquareRoot
2794[info] - should work for squaring CubeRoot
2795[info] - should work for cubing cube-root2
2796[info] - should work for squaring NatLog
2797[info] - should work for squaring Log2
2798[info] - should power by one half
2799[info] - should sqrt
2800[info] - should power 1/2
2801[info] sqrt
2802[info] - should work for easy ints
2803[info] - should work for BigInt
2804[info] - should work for negative numbers
2805[info] sin
2806[info] - should be zero for pi
2807[info] - should work for 0
2808[info] - should be one for pi/2
2809[info] - should work for Radian/2
2810[info] - should work for Radian/6
2811[info] - should work for Radian/3
2812[info] - should work for Radian/4
2813[info] - should work for One
2814[info] - should work for 1/12
2815[info] cos
2816[info] - should be zero for pi
2817[info] - should work for 0
2818[info] - should work for Pi/2
2819[info] - should work for Pi/3
2820[info] - should work for Pi/6
2821[info] tan
2822[info] - should be zero for 0
2823[info] - should be zero for pi
2824[info] - should work for Pi/2
2825[info] - should work for Pi/3
2826[info] - should work for Pi/6
2827[info] atan
2828[info] - should be 0Pi for 0/1
2829[info] - should be pi/4 for 1/1
2830[info] - should be 0Pi for 0/-1
2831[info] - should be Pi / 3 for root(3)
2832[info] - should be 7 Pi / 6 for 1/-root(3)
2833[info] - should be 11 Pi / 6 for -1/2
2834[info] - should be 3 pi / 4 for 1/-1
2835[info] - should evaluate atan of 1 over -0
2836[info] - should evaluate atan of -1 over 0
2837[info] exp
2838[info] - should be E for 1
2839[info] - should be 1 for 0
2840[info] - should be e∧2 for 2
2841[info] ln
2842[info] - should be 1 for E
2843[info] - should be 0 for 1
2844[info] - should be 2 for E∧2
2845[info] - should be 0.69... for 2
2846[info] log
2847[info] - should be 1 for E
2848[info] - should be 0 for 1
2849[info] - should be 0.69... for 2
2850[info] - should lg 1024
2851[info] - should log exact
2852[info] toInt
2853[info] - should work for 1
2854[info] - should work for BigInt 1
2855[info] - should work for Rational 1
2856[info] - should work for too big
2857[info] - should work for 3.14...
2858[info] - should work for pi
2859[info] compare
2860[info] - should work for 1, 1
2861[info] - should work for 1, 2
2862[info] - should work for 2, 1
2863[info] - should work for BigInt 1, 1
2864[info] - should work for BigInt 1, 2
2865[info] - should work for BigInt 2, 1
2866[info] - should work for Rational 1, 1
2867[info] - should work for Rational 1, 2
2868[info] - should work for Rational 2, 1
2869[info] - should work for Double 1, 1
2870[info] - should work for Double 1, 2
2871[info] - should work for Double 2, 1
2872[info] Numeric toInt
2873[info] - should work for 1
2874[info] - should work for BigInt 1
2875[info] - should work for Rational 1
2876[info] - should work for 1.0
2877[info] Numeric toLong
2878[info] - should work for 1
2879[info] - should work for BigInt 1
2880[info] - should work for Rational 1
2881[info] - should work for 1.0
2882[info] Numeric toDouble
2883[info] - should work for 1
2884[info] - should work for BigInt 1
2885[info] - should work for Rational 1
2886[info] - should work for 1.0
2887[info] Numeric toFloat
2888[info] - should work for 1
2889[info] - should work for BigInt 1
2890[info] - should work for Rational 1
2891[info] - should work for 1.0
2892[info] Numeric plus
2893[info] - should work for 1
2894[info] - should work for BigInt 1
2895[info] - should work for Rational 1
2896[info] - should work for 1.0
2897[info] Numeric minus
2898[info] - should work for 1
2899[info] - should work for BigInt 1
2900[info] - should work for Rational 1
2901[info] - should work for 1.0
2902[info] Numeric fromInt
2903[info] - should work for -1
2904[info] - should work for 0
2905[info] - should work for 1
2906[info] Numeric parseString
2907[info] - should work for -1
2908[info] - should work for 0
2909[info] - should work for 1
2910[info] - should work for 6.67430(15)E-11
2911[info] Numeric div
2912[info] - should work for 1/2
2913[info] - should work for 2/2
2914[info] - should work for 2/3
2915[info] NumberOps
2916[info] - should work for 2 + Number(3)
2917[info] - should work for 2 * Number(3)
2918[info] - should work for 1 :/ 2
2919[info] isImaginary
2920[info] - should be true for i and its multiples
2921[info] - should be false for all ordinary numbers
2922[info] multiply
2923[info] - should work for pure numbers
2924[info] - should work for complex numbers
2925[info] - should work for i
2926[info] - should multiply root2 and 3
2927[info] - should multiply cube-root2 and 3
2928[info] - should multiply 3 and root2
2929[info] - should multiply 3 and cube-root2
2930[info] field operations
2931[info] - should work with asReal
2932[info] ComplexSpec:
2933[info] Complex
2934[info] - should real
2935[info] - should imag
2936[info] - should isInfinite
2937[info] - should asNumber
2938[info] - should add1
2939[info] - should add2
2940[info] - should multiply
2941[info] - should unary_-
2942[info] - should divide
2943[info] - should - Constants
2944[info] - should - Number
2945[info] - should - ComplexPolar
2946[info] - should - ComplexCartesian
2947[info] power
2948[info] - should c1_2∧1
2949[info] - should c1_2∧2
2950[info] - should c1_2∧0
2951[info] - should c1_2∧-1
2952[info] - should c1_2∧1/2
2953[info] - should c2_0∧1/2
2954[info] - should p1_pi_2∧1
2955[info] - should p1_pi_2∧2
2956[info] - should p1_pi_2∧0
2957[info] - should p1_pi_2∧-1
2958[info] - should p1_1∧-1/2
2959[info] - should c2_0∧1/3
2960[info] - should e^i𝛑
2961[info] other
2962[info] - should modulus
2963[info] - should argument
2964[info] - should conjugate (1)
2965[info] - should conjugate (2)
2966[info] - should invert
2967[info] - should numberProduct
2968[info] - should convertToPolar
2969[info] - should convertToPolar 2
2970[info] - should convertToPolar 3
2971[info] - should convertToPolar 4
2972[info] - should check that math.atan really works 1
2973[info] - should check that math.atan really works 2
2974[info] - should check that math.atan really works 3
2975[info] - should check that math.atan really works for many fractions
2976[info] - should convertToCartesian
2977[info] render
2978[info] - should work for various Complex values
2979[info] - should work for negative polar angle
2980[info] - should work for iPi
2981[info] - should work for zero
2982[info] - should work for root 2 in c2_0∧1/2
2983[info] - should render c2_0∧1/3
2984[info] - should render root2s
2985[info] Number.asComplex
2986[info] - should work
2987[info] numberProduct
2988[info] - should work
2989[info] - should work when i is scaled by two (prefix)
2990[info] - should work when i is scaled by two (postfix)
2991[info] i
2992[info] - should render as √-1
2993[info] - should render as √-4
2994[info] - should convertToNumber
2995[info] - should scale(PureNumber)
2996[info] - should normalize i as itself
2997[info] - should normalize 11i
2998[info] C interpolator
2999[info] - should parse
3000[info] NumberSetSpec:
3001[info] NumberSet
3002[info] - should maybeSuperSet
3003[info] - should isMember (Number)
3004[info] - should isMember (Real)
3005[info] - should belongsToSetExclusively
3006[info] - should not belongsToSetExclusively
3007[info] NumberLike
3008[info] - should memberOf
3009[info] - should memberOf(set)
3010[info] FuzzySpec:
3011[info] Fuzzy
3012[info] - should same
3013[info] OperationsSpec:
3014[info] MonadicOperationModulate
3015[info] - should work
3016[info] - should work with circular true
3017[info] - should work with circular false
3018[info] PrimeSpec:
3019[info] Prime
3020[info] - should bits
3021[info] - should isProbablePrime
3022[info] - should isProbableOddPrime
3023[info] - should fermat
3024[info] - should implement Lucas for 7 and 71
3025[info] - should implement primeFactors
3026[info] - should implement primeFactorMultiplicity
3027[info] - should implement Lucas()
3028[info] - should implement testPrimitiveRoot
3029[info] - should implement primitiveRoot
3030[info] - should multiplicativeInverse
3031[info] - should multiplicativeInverse1
3032[info] - should multiplicativeInverse2
3033[info] - should validated
3034[info] - should next
3035[info] - should create primes from Mersenne numbers
3036[info] - should create (potential) Mersenne numbers
3037[info] - should get first 100 primes
3038[info] - should get first 1000 primes
3039[info] - should get primes < 1000
3040[info] - should test MillerRabin
3041[info] - should totient
3042[info] - should form toString correctly
3043[info] - should get the reciprocal period
3044[info] RandomLongSpec:
3045[info] RandomLong
3046[info] - should get
3047[info] - should map
3048[info] FuzzinessSpec:
3049[info] generalNumber
3050[info] - should parse 1.
3051[info] - should parse 1.0
3052[info] - should parse 1.00
3053[info] - should parse 1.000 as fuzzy
3054[info] - should parse G as fuzzy
3055[info] maybeNumber
3056[info] - should
3057[info] number
3058[info] - should
3059[info] StringParser
3060[info] - should
3061[info] fuzz
3062[info] - should parse *
3063[info] - should parse ...
3064[info] - should parse (5)
3065[info] - should parse (15)
3066[info] - should fail to parse (315)
3067[info] - should fail to parse ..
3068[info] FuzzOps
3069[info] - should understand ...
3070[info] exponent
3071[info] - should parse E-11
3072[info] numberWithFuzziness
3073[info] - should parse 1.0*
3074[info] - should parse 1.0...
3075[info] - should parse G
3076[info] - should parse alpha
3077[info] Fuzz.toString
3078[info] - should work for 1/0.5/Box
3079[info] - should work for 1/0.005/Box
3080[info] - should work for 1/0.5/Gaussian
3081[info] - should work for 1/0.005/Gaussian
3082[info] - should work for Planck
3083[info] - should work for Avagadro
3084[info] - should work for 3.1415927
3085[info] - should work for 3.1416
3086[info] parse
3087[info] - should work for 2.*
3088[info] createFuzz
3089[info] - should work for 0
3090[info] - should work for 1
3091[info] - should work for 5
3092[info] render
3093[info] - should render Pi
3094[info] - should render Planck
3095[info] - should render Avagadro
3096[info] Box.wiggle
3097[info] - should be likely for 1.251
3098[info] Fuzziness.wiggle
3099[info] - should be likely for 1.251 (box)
3100[info] Box.wiggle
3101[info] - should be likely for 5.0040
3102[info] Gaussian.wiggle
3103[info] - should be likely for 5.0040
3104[info] - should define the following ranges
3105[info] - should be likely.
3106[info] probability
3107[info] - should work for a box
3108[info] - should work for a Gaussian
3109[info] map
3110[info] - should work
3111[info] power
3112[info] - should work for e∧x
3113[info] fuzz
3114[info] - should work
3115[info] TranscendentalSpec:
3116[info] Transcendental
3117[info] - should evaluate pi
3118[info] - should evaluate e
3119[info] - should evaluate l2
3120[info] - should evaluate lg2e
3121[info] - should evaluate gamma
3122[info] - should expression pi
3123[info] - should expression e
3124[info] - should expression l2
3125[info] - should simplify pi
3126[info] - should simplify e
3127[info] - should simplify l2
3128[info] - should function 1
3129[info] - should function 2
3130[info] - should render
3131[info] FibonacciSpec:
3132[info] Fibonacci
3133[info] - should psi
3134[info] - should phi
3135[info] - should render phi+1 as a Field
3136[info] - should render phi+1 as an Expression
3137[info] - should fib0
3138[info] - should fib1
3139[info] - should fib2
3140[info] - should psiFuzzy
3141[info] - should fibFuzzy
3142[info] - should fib
3143[info] ApproximationSpec:
3144[info] Approximation
3145[info] - should solve Newton's original problem
3146[info] - should solve cosine problem
3147[info] - should solve cosine problem using Halley's method
3148[info] - should solve Newton's original problem using Halley's method
3149[info] - should solve Wikipedia example using Halley's method
3150[info] - should solve the inverse square root problem for 0.15625
3151[info] - should evaluate newtonsPolynomial
3152[info] - should evaluate newtonsDerivative
3153[info] - should evaluate newtonsSecondDerivative
3154[info] - should evaluate newtons method
3155[info] - should converged
3156[info] - should iterate
3157[info] - should delta
3158[info] - should do correction for Newton's polynomial
3159[info] - should do correction for cosine problem
3160[info] VarianceSpec:
3161[info] sumOfSquares
3162[info] - should work (pair)
3163[info] - should work for first (5) integers
3164[info] - should sum (n) squares according to formula
3165[info] rootSumSquares
3166[info] - should work (pair)
3167[info] - should work for first (5) integers
3168[info] - should sum (n) squares according to formula
3169[info] rootMeanSquare
3170[info] - should work (pair)
3171[info] - should work for first (5) integers
3172[info] - should sum (n) squares according to formula
3173[info] PowerSeriesSpec:
3174[info] PowerSeries
3175[info] - should apply
3176[info] TaylorSeries
3177[info] - should approximate sine about x = 0
3178[info] FuzzyNumberSpec:
3179[info] create
3180[info] - should yield 1 with absolute fuzz
3181[info] - should yield 1 with relative fuzz
3182[info] Fuzz.toString
3183[info] - should work for 1/0.5/Box
3184[info] - should work for 1/0.005/Box
3185[info] - should work for 1/0.5/Gaussian
3186[info] - should work for 1/0.005/Gaussian
3187[info] parse
3188[info] - should work for 1.*
3189[info] - should work for 1.00(5)
3190[info] - should work for 1.000(50)
3191[info] - should work for 1.00(05)
3192[info] - should parse gamma
3193[info] - should parse phi
3194[info] - should parse G
3195[info] - should parse alpha
3196[info] - should parse mu
3197[info] plus
3198[info] - should add 1 and 2
3199[info] - should add 1.* and 2
3200[info] - should add 1 and 2.*
3201[info] - should add 1.* and 2.*
3202[info] times
3203[info] - should multiply 1 and 2
3204[info] - should multiply 1.* and 2
3205[info] - should multiply 1 and 2.*
3206[info] - should multiply 1.* and 2.*
3207[info] - should multiply 1.* and 2.* with normalization of fuzz
3208[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Box))
3209[info] -
3210[info] - should work for 1.*
3211[info] negate
3212[info] - should work for 1.*
3213[info] power
3214[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Box))
3215[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Gaussian))
3216[info] - should work for 2**2 (i.e. an constant Int power)
3217[info] - should work for 2**2 (i.e. a fuzzy Number power)
3218[info] compare
3219[info] - should find 1.* equivalent to 1.*
3220[info] - should find 1 smaller than 2
3221[info] sin
3222[info] - should work for 0
3223[info] - should work for pi
3224[info] - should work for 2pi
3225[info] - should work for pi/2
3226[info] - should work for 3pi/2
3227[info] - should work for 3.141592653589793
3228[info] - should work for 3.141592653589793 backwards
3229[info] cos
3230[info] - should work for 0
3231[info] - should work for pi
3232[info] - should work for 2pi
3233[info] - should work for pi/2
3234[info] - should work for 3pi/2
3235[info] - should work for 3.141592653589793
3236[info] - should work for 3.141592653589793 backwards
3237[info] tan
3238[info] - should work for 0
3239[info] - should work for pi
3240[info] - should work for 2pi
3241[info] - should work for pi/2
3242[info] - should work for 3pi/2
3243[info] - should work for 3.141592653589793
3244[info] - should work for 3.141592653589793 backwards
3245[info] exp
3246[info] - should work for non-exact 1
3247[info] compare
3248[info] - should work for 1, 1
3249[info] same
3250[info] - should think 1 and 1 are the same
3251[info] - should think pi and pi are the same
3252[info] isProbablyZero
3253[info] - should think pi and pi are the same (1)
3254[info] - should think pi and pi are the same (2)
3255[info] make(Fuzziness)
3256[info] - should work
3257[info] - should implement asComparedWith
3258[info] foucault
3259[info] - should do part of the calculation
3260[info] - should calculate length of Foucault's pendulum but with relative box fuzziness
3261[info] - should calculate length of Foucault's pendulum
3262[info] - should calculate the acceleration due to gravity based on the London Foucault's pendulum
3263[info] NumberLikeSpec:
3264[info] NumberLike
3265[info] - should asJavaNumber
3266[info] - should asNumber
3267[info] - should maybeFactor
3268[info] - should isExact
3269[info] - should memberOf
3270[info] - should render
3271[info] ErrorCommutativeMonoidLawSpec:
3272[info] - AbsSigma.commutativeMonoid.associative
3273[info] - AbsSigma.commutativeMonoid.collect0
3274[info] - AbsSigma.commutativeMonoid.combine all
3275[info] - AbsSigma.commutativeMonoid.combineAllOption
3276[info] - AbsSigma.commutativeMonoid.commutative
3277[info] - AbsSigma.commutativeMonoid.intercalateCombineAllOption
3278[info] - AbsSigma.commutativeMonoid.intercalateIntercalates
3279[info] - AbsSigma.commutativeMonoid.intercalateRepeat1
3280[info] - AbsSigma.commutativeMonoid.intercalateRepeat2
3281[info] - AbsSigma.commutativeMonoid.is id
3282[info] - AbsSigma.commutativeMonoid.left identity
3283[info] - AbsSigma.commutativeMonoid.repeat0
3284[info] - AbsSigma.commutativeMonoid.repeat1
3285[info] - AbsSigma.commutativeMonoid.repeat2
3286[info] - AbsSigma.commutativeMonoid.reverseCombineAllOption
3287[info] - AbsSigma.commutativeMonoid.reverseRepeat1
3288[info] - AbsSigma.commutativeMonoid.reverseRepeat2
3289[info] - AbsSigma.commutativeMonoid.reverseReverses
3290[info] - AbsSigma.commutativeMonoid.right identity
3291[info] InfiniteSeriesSpec:
3292[info] InfiniteSeries
3293[info] - should terms
3294[info] - should convergenceRate
3295[info] - should nTerms
3296[info] - should evaluateToTolerance 0.001
3297[info] - should evaluateToTolerance 0.00001
3298[info] - should evaluateToTolerance 0.000001
3299actual = Solution: 1 + + √5, expected = 3.236067977499790(42)
3300phi = 𝛗
3301phi add Real(one) = 2.6180339887498950(55)
3302phi = 𝛗
3303[info] ErrorCommutativeMonoidSpec:
3304[info] Abstracting advocacy communication into lawful scalar folding
3305[info] - should match decoupled parallel error folding with direct Number addition (all addition) !!! IGNORED !!!
3306[info] - should match decoupled parallel error folding with direct Number multiplication (all multiplication) !!! IGNORED !!!
3307[info] LazyNumberFuzzySpec:
3308[info] fuzz1
3309[info] - should be 1
3310[info] - should be -1 after negate
3311[info] - should be 0 after minus(1)
3312[info] fuzz2
3313phi add Real(one) = 0.6180339887498949(47)
3314[info] - should be 2
3315[info] - should be 4 when multiplied by itself
3316[info] - should be 1 when divided by itself
3317[info] - should be 3 when added to one
3318[info] - should be 6 when added to one and three
3319[info] - should be 3 when added to one by explicit function
3320[info] fuzzy for comprehension
3321[info] - should give 4
3322[info] fuzzy composition
3323[info] - should work *** FAILED ***
3324[info] Exact: 2.718281828459045 was not equal to Exact: 2.7182818284590455 (LazyNumberFuzzySpec.scala:82)
3325[info] - should work with fuzzy 1 *** FAILED ***
3326[info] Bounded: 2.718281828459045, 0.001 was not equal to Bounded: 2.7182818284590455, 0.001 (LazyNumberFuzzySpec.scala:89)
3327[info] - should give 8
3328[info] RootSpec:
3329[info] Root
3330[info] - should evaluateAsIs
3331[info] - should solution
3332[info] - should isExact
3333[info] - should maybeFactor
3334[info] - should render
3335[info] - should approximation
3336[info] - should maybeValue
3337[info] - should simplify
3338[info] - should isAtomic
3339[info] - should simplifyAtomic
3340[info] - should evaluate(PureNumber)
3341[info] - should evaluate(NthRoot)
3342[info] Root expressions
3343[info] - should evaluate 1 / √5
3344[info] - should evaluate phi∧2
3345[info] - should evaluate squareRoot(phi)
3346[info] - should evaluate phi + psi
3347[info] - should evaluate 2
3348[info] RationalAlgebraicInstancesLawSpec:
3349[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.associativity
3350[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.can serialize and deserialize
3351[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAll
3352[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAll(Nil) == id
3353[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAllOption
3354[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 0) == id
3355[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 1) == a
3356[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 2) == a |+| a
3357[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.commutative
3358[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.consistent remove
3359[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.isEmpty
3360[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.left inverse
3361[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.leftIdentity
3362[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.right inverse
3363[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.rightIdentity
3364[info] - Rational.commutative ring.additive:additive commutative group.can serialize and deserialize
3365[info] - Rational.commutative ring.additive:additive commutative group.consistent subtract
3366[info] - Rational.commutative ring.additive:additive commutative group.sum(Nil) == zero
3367[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 0) == zero
3368[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 1) == a
3369[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 2) == a + a
3370[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.associativity
3371[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.can serialize and deserialize
3372[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAll
3373[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAll(Nil) == id
3374[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAllOption
3375[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 0) == id
3376[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 1) == a
3377[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 2) == a |+| a
3378[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.commutative
3379[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.isEmpty
3380[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.leftIdentity
3381[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.rightIdentity
3382[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.can serialize and deserialize
3383[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 0) == one
3384[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 1) == a
3385[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 2) == a * a
3386[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.product(Nil) == one
3387[info] - Rational.commutative ring.distributive
3388[info] - Rational.commutative ring.fromBigInt
3389[info] - Rational.commutative ring.fromInt
3390phi = 𝛗
3391phi add Real(one) = 3.6180339887498950(55)
3392phi=𝛗; phi.power(1) = 𝛗
3393phi∧3 = 4.23606797749979±0.0000000000017%. expected=Solution: 2 + + √5
3394expectedValue = 4.2360679774997900*
3395phi∧3 = 6.854101966249686±0.0000000000014%. expected=Solution: 3.5 + + √11.25
3396equation = Quadratic Equation: x∧2 - 1x - 1 = 0
3397quadratic (transformed equation) = Quadratic Equation: x∧2 - 3x + 1 = 0
3398equation = Quadratic Equation: x∧2 - 1x - 1 = 0
3399Solution: 1.5 + + √1.25
3400Solution: 1.5 + - √1.25
3401quadratic.value = Solution: 1.5 + + √1.25
3402[info] PolynomialSpec:
3403[info] Polynomial
3404[info] - should apply 0
3405[info] - should apply 1
3406[info] - should apply 2
3407[info] - should degree
3408[info] - should derivative 1
3409[info] - should derivative 2
3410[info] - should coefficients
3411[info] - should derivativeN
3412[info] - should nthDerivative
3413[info] QuadraticSpec:
3414[info] Quadratic
3415[info] - should normalize
3416[info] - should branches
3417[info] - should isExact
3418[info] - should value 1
3419[info] - should value 2
3420[info] - should value root 2
3421[info] - should render
3422[info] - should approximation
3423[info] - should signum
3424[info] - should abs
3425[info] - should scale
3426[info] - should negate
3427[info] - should product
3428[info] - should solutionSquared
3429[info] - should invert
3430[info] - should scale phi and psi with negative number
3431[info] - should add phi
3432[info] - should add phi and psi
3433[info] - should add 1
3434[info] - should add -1
3435[info] - should add 2
3436[info] - should multiply
3437[info] - should zero
3438[info] - should one
3439[info] - should power 0
3440[info] - should power 1
3441[info] - should power 2
3442[info] - should power 3
3443[info] - should power 4
3444[info] - should transform
3445[info] - should apply(Solution) to get phi
3446[info] - should apply(ExactNumber,ExactNumber) to get phi
3447[info] + Rational.FromIntAndShort: OK, passed 100 tests.
3448[info] + Rational.Double: OK, passed 100 tests.
3449[info] + Rational.FromString: OK, passed 100 tests.
3450[info] + Rational.Addition: OK, passed 100 tests.
3451Some(9.980029960049940069920089900109880E-7...)
3452actual = 1.643(1)
3453expected = 1.6449340668482262±0.00000000000030%
3454expected.fuzz = Some(RelativeFuzz(3.068906722219106E-15,Gaussian))
3455wiggle = 0.0038905918864131214
3456difference = -0.001(1)
3457fuzz = AbsoluteFuzz(0.001,Gaussian)
3458[info] CatsKernelLawSpec:
3459[info] - Fuzziness[Double].eq.antisymmetry eq
3460[info] - Fuzziness[Double].eq.reflexivity eq
3461[info] - Fuzziness[Double].eq.symmetry eq
3462[info] - Fuzziness[Double].eq.transitivity eq
3463[info] - Fuzziness[Double].partialOrder.antisymmetry
3464[info] - Fuzziness[Double].partialOrder.antisymmetry eq
3465[info] - Fuzziness[Double].partialOrder.gt
3466[info] - Fuzziness[Double].partialOrder.gteqv
3467[info] - Fuzziness[Double].partialOrder.lt
3468[info] - Fuzziness[Double].partialOrder.partialCompare
3469[info] - Fuzziness[Double].partialOrder.pmax
3470[info] - Fuzziness[Double].partialOrder.pmin
3471[info] - Fuzziness[Double].partialOrder.reflexivity eq
3472[info] - Fuzziness[Double].partialOrder.reflexivity gt
3473[info] - Fuzziness[Double].partialOrder.reflexivity lt
3474[info] - Fuzziness[Double].partialOrder.symmetry eq
3475[info] - Fuzziness[Double].partialOrder.transitivity
3476[info] - Fuzziness[Double].partialOrder.transitivity eq
3477[info] - Rational.order.antisymmetry
3478[info] - Rational.order.antisymmetry eq
3479[info] - Rational.order.compare
3480[info] - Rational.order.gt
3481[info] - Rational.order.gteqv
3482[info] - Rational.order.lt
3483[info] - Rational.order.max
3484[info] - Rational.order.min
3485[info] - Rational.order.partialCompare
3486[info] - Rational.order.pmax
3487[info] - Rational.order.pmin
3488[info] - Rational.order.reflexivity eq
3489[info] - Rational.order.reflexivity gt
3490[info] - Rational.order.reflexivity lt
3491[info] - Rational.order.symmetry eq
3492[info] - Rational.order.totality
3493[info] - Rational.order.transitivity
3494[info] - Rational.order.transitivity eq
3495[info] - ExactNumber.order.antisymmetry
3496[info] - ExactNumber.order.antisymmetry eq
3497[info] - ExactNumber.order.compare
3498[info] - ExactNumber.order.gt
3499[info] - ExactNumber.order.gteqv
3500[info] - ExactNumber.order.lt
3501[info] - ExactNumber.order.max
3502[info] - ExactNumber.order.min
3503[info] - ExactNumber.order.partialCompare
3504[info] - ExactNumber.order.pmax
3505[info] - ExactNumber.order.pmin
3506[info] - ExactNumber.order.reflexivity eq
3507[info] - ExactNumber.order.reflexivity gt
3508[info] - ExactNumber.order.reflexivity lt
3509[info] - ExactNumber.order.symmetry eq
3510[info] - ExactNumber.order.totality
3511[info] - ExactNumber.order.transitivity
3512[info] - ExactNumber.order.transitivity eq
3513[info] ComplexAlgebraicInstancesSpec:
3514[info] complexCommutativeRing (zero/one/fromInt/plus/times/negate)
3515[info] - should provide zero/one/fromInt/plus/times/negate
3516[info] SeriesSpec:
3517[info] FiniteSeries
3518[info] - should term
3519[info] - should evaluateToTolerance n
3520[info] - should evaluateToTolerance epsilon
3521[info] InfiniteSeries
3522[info] - should term
3523[info] - should evaluateToTolerance n
3524[info] - should evaluateToTolerance infinity
3525[info] - should evaluateToTolerance epsilon
3526[info] Basel Problem
3527[info] - should term
3528[info] - should evaluateToTolerance n
3529[info] - should evaluateToTolerance N
3530[info] - should evaluateToTolerance epsilon
3531[info] RationalSpec:
3532[info] new Rational(BigInt,Long)
3533[info] - should work for 0, 1
3534[info] - should yield infinity for 1, 0
3535[info] - should yield NaN for 0, 0
3536[info] - should fail for 2, 2
3537[info] - should succeed for 0, -1
3538[info] - should fail for 1, -1
3539[info] apply(BigInt,Long)
3540[info] - should work for 0, 1
3541[info] - should succeed for 2, 2
3542[info] - should succeed for -1, -1
3543[info] - should work for 355, 113
3544[info] - should work for 355*2, 113*2
3545[info] - should work for -355, -113
3546[info] - should work for -355 (2)
3547[info] apply(Long,Long)
3548[info] - should work for 0, 1
3549[info] apply(Long,Int)
3550[info] - should work for 0, 1
3551[info] apply(Int,Int)
3552[info] - should work for 0, 1
3553[info] - should work for 0, 0
3554[info] - should work for 1, 0
3555[info] - should work for -1, 0
3556[info] - should work for -1, -2
3557[info] - should work for -2624712818L, -1
3558[info] - should fail to convert to BigInt
3559[info] apply(Long)
3560[info] - should work for Rational.bigZero
3561[info] apply(Int)
3562[info] - should work for 0
3563[info] apply(Double)
3564[info] - should convert zero
3565[info] - should convert negative zero
3566[info] - should convert Avagadro's number
3567[info] - should convert a very small number
3568[info] - should be zero for very very small number
3569[info] - should be zero for very very very small number
3570[info] - should convert 3.1416 correctly
3571[info] - should convert 3.1416 the same as "3.1416"
3572[info] - should pick up a float
3573[info] apply(BigDecimal)
3574[info] - should convert 0.5 to Rational
3575[info] - should convert to Rational
3576[info] isWhole
3577[info] - should be true for integers
3578[info] - should be false for reciprocals
3579[info] isDecimal
3580[info] - should be true for 3.14
3581[info] - should be true for 223606797749979/200000000000000
3582[info] toBigInt
3583[info] - should work for Long.MaxValue
3584[info] toLong
3585[info] - should work for Long.MaxValue
3586[info] toBigDecimal
3587[info] - should work for pi
3588[info] equals
3589[info] - should equate 0 and zero
3590[info] - should be whole
3591[info] - should equal 0
3592[info] - should equal infinity when inverted
3593[info] - should equal BigDecimal.ZERO
3594[info] - should equal r when added to r
3595[info] - should equal infinity when r-interpolator has 0 denominator
3596[info] - should equal infinities
3597[info] +
3598[info] - should return 4 for 2+2
3599[info] - should return result for 0+-236274181
3600[info] - should add 0 to large number
3601[info] - should add 0 to large number (2)
3602[info] - should add 1 to large number
3603[info] - should add large number to smaller one
3604[info] *
3605[info] - should return 4 for 2*2
3606[info] - should return result for 0 * -236274181
3607[info] - should multiply 2 by large number
3608[info] - should multiply large number by smaller one
3609[info] - should multiply large number by short
3610[info] division
3611[info] - should work for 6 / 10 / 3
3612[info] -
3613[info] - should work for -1
3614[info] negate
3615[info] - should work for -1
3616[info] implicit conversion
3617[info] - should work for 0
3618[info] 1/2
3619[info] - should be OK
3620[info] - should equal half
3621[info] - should be half of one
3622[info] - should be OK using r-interpolator
3623[info] - should be OK using r-interpolator with variable
3624[info] 1
3625[info] - should be OK
3626[info] - should be one
3627[info] - should be positive
3628[info] - should be whole
3629[info] - should be unity
3630[info] - should equal 1
3631[info] - should not equal infinity when inverted
3632[info] - should equal itself when inverted
3633[info] - should equal BigDecimal.one
3634[info] - should equal r when multiplied by r
3635[info] - should be -1 when negated
3636[info] power
3637[info] - should work for Int power
3638[info] - should work for Rational power (1)
3639[info] - should work for Rational power (2)
3640[info] - should work for Rational power (3)
3641[info] - should work for Rational ∧ (4)
3642[info] - should get the correct precedence for ∧
3643[info] - should work for Rational power (5)
3644[info] - should fail for non-exact powers
3645[info] - should apply
3646[info] power
3647[info] - should power 1
3648[info] - should power 2
3649[info] - should power 3
3650[info] - should power 4
3651[info] - should fail with bad power
3652[info] root
3653[info] - should root 0
3654[info] - should root 1
3655[info] - should root 2
3656[info] - should root -2
3657[info] exponent
3658[info] - should work for 2
3659[info] - should work for Avagadro
3660[info] 10
3661[info] - should be OK
3662[info] - should be ten
3663[info] - should be whole
3664[info] - should not be zero
3665[info] - should equal 10
3666[info] - should equal 5*2
3667[info] - should equal 10*1
3668[info] - should equal BigDecimal(10)
3669[info] - should equal a million (ten raised to 6th power)
3670[info] 2/3
3671[info] - should be OK
3672[info] - should equal -1/3 when added to -1
3673[info] - should be less than 1
3674[info] - should not be whole
3675[info] - should equal 2 when multiplied by 3
3676[info] - should equal 3/2 when inverted
3677[info] - should equal 5/3 when added to 1
3678[info] - should equal 4/9 when multiplied by itself
3679[info] - should equal 4/9 when squared using ∧
3680[info] - should barf when toInt invoked
3681[info] - should barf when Rational.toInt invoked
3682[info] 2/4
3683[info] - should not be OK
3684[info] - should not OK via apply
3685[info] Floating Point Problem
3686[info] - should be OK
3687[info] toString
3688[info] - should be decimal when exact
3689[info] - should be recurring when exact: 2/3
3690[info] - should be decimal when not exact: pi
3691[info] - should work for NaN
3692[info] - should work for Infinity
3693[info] - should work for negative Infinity
3694[info] - should work for gamma
3695[info] - should work for various prime denominators
3696[info] render
3697[info] - should be decimal when exact
3698[info] - should be recurring when exact: 5/3
3699[info] - should be decimal when not exact: pi
3700[info] - should work for NaN
3701[info] - should work for Infinity
3702[info] - should work for negative Infinity
3703[info] - should work for gamma
3704[info] - should work for various prime denominators
3705[info] - should work for various composite denominators
3706[info] findRepeatingSequence
3707[info] - should fail for 4/5
3708[info] - should work when denominator is prime
3709[info] - should work when numerator and denominator are prime 1
3710[info] - should work when numerator and denominator are prime 2
3711[info] - should work when denominator is composite 1
3712[info] - should work when denominator is composite 2
3713[info] - should fail when denominator has too many prime factors
3714[info] renderApproximate
3715[info] - should work with one parameter (1)
3716[info] - should fail with one parameter
3717[info] - should work with two parameters (1)
3718[info] - should fail with two parameters
3719[info] renderAsPercent
3720[info] - should work
3721[info] Rational(String)
3722[info] - should work for 0.1
3723[info] - should work for 1.0e6
3724[info] - should convert Avagadro's number
3725[info] parse(String)
3726[info] - should work for 0.1
3727[info] - should work for 1.
3728[info] - should work for 1.0e6
3729[info] - should work for 15699511928844194920/4294967295
3730[info] - should work for 15699511928844194920
3731[info] - should work for -15699511928844194920/4294967295
3732[info] - should work for -15699511928844194920/-4294967295
3733[info] - should fail for x
3734[info] edu/neu/coe/csye7200/sorting
3735[info] - should work
3736[info] r-interpolator
3737[info] - should work for -1/0
3738[info] - should work for 1/-2147483648
3739[info] - should work for -1/-2147483648
3740[info] toInt
3741[info] - should work for Int.MaxValue
3742[info] - should work for Int.MinValue
3743[info] - should fail for Int.MaxValue+1
3744[info] - should fail for Int.MinValue-1
3745[info] narrow(BigInt)
3746[info] - should work for Int.MaxValue
3747[info] - should not work for Int.MaxValue+1
3748[info] narrow(Rational)
3749[info] - should work for Int.MaxValue
3750[info] - should work for Int.MaxValue+1
3751[info] normalize
3752[info] - should work for 0,0
3753[info] - should work for 1,0
3754[info] - should work for 1,1
3755[info] - should work for 2,2
3756[info] - should work for 3,5
3757[info] compare
3758[info] - should work for 0,0
3759[info] - should work for 0,1
3760[info] - should work for 1,0
3761[info] - should work for 1,1
3762[info] - should work for inf,inf
3763[info] - should work for -inf,inf
3764[info] mediant
3765[info] - should work
3766[info] approximate
3767[info] - should work
3768[info] - should fail
3769[info] approximateAny
3770[info] - should work for specific epsilon
3771[info] convertDouble
3772[info] - should work
3773[info] sqrt
3774[info] - should work correctly
3775[info] rootOfBigInt
3776[info] - should work for sqrt(4)
3777[info] RationalOps
3778[info] - should work correctly for 2 + 3
3779[info] - should work correctly for 2 + Rational(3)
3780[info] - should work correctly for 2 * 3
3781[info] - should work correctly for 2 * Rational(3)
3782[info] - should work correctly for 2:/3
3783[info] - should work correctly (but somewhat counter-intuitively) for 2/3
3784[info] negZero
3785[info] - should add to zero correctly
3786[info] - should add to one correctly
3787[info] - should multiply correctly
3788[info] - should convert to double correctly
3789[info] Rat...
3790[info] - should parse a String
3791[info] - should convert from an Int
3792[info] - should convert to an Int
3793[info] - should convert to a Long
3794[info] - should convert to a Float
3795[info] - should convert infinity to a Double
3796[info] renderExact
3797[info] - should render -1/6
3798[info] - should render 1/2
3799[info] - should render thirds
3800[info] - should render quarters
3801[info] - should render fifths
3802[info] - should render sixths
3803[info] - should render eighths
3804[info] - should render tenths
3805[info] - should render other
3806[info] apply(String)
3807[info] - should handle the vulgar fractions
3808[info] + Rational.Division: OK, passed 100 tests.
3809Starting build for ProjectRef(file:/build/repo/,root) (number)... [3/6]
3810Compile scalacOptions: -Wconf:msg=can be rewritten automatically under:s, -source:3.8
3811[info] compiling 2 Scala sources to /build/repo/parse/target/scala-3.8.0-RC6/classes ...
3812[info] done compiling
3813[info] compiling 3 Scala sources to /build/repo/top/target/scala-3.8.0-RC6/classes ...
3814[warn] there were 2 deprecation warnings; re-run with -deprecation for details
3815[warn] one warning found
3816[info] done compiling
3817Starting build for ProjectRef(file:/build/repo/,parse) (number-parse)... [4/6]
3818Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wvalue-discard, -Wnonunit-statement, -explain, -Wunused:imports, -Wunused:privates, -Wunused:locals, -Wconf:msg=Couldn't resolve a member:s, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
3819[info] compiling 2 Scala sources to /build/repo/parse/target/scala-3.8.0-RC6/test-classes ...
3820[info] done compiling
382102:17:00,697 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
382202:17:00,697 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10e563aa - No custom configurators were discovered as a service.
382302:17:00,697 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10e563aa - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
382402:17:00,698 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10e563aa - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
382502:17:00,698 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
382602:17:00,698 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml]
382702:17:00,698 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@32f3f5c6 - Resource [logback.xml] occurs multiple times on the classpath.
382802:17:00,698 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@32f3f5c6 - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml]
382902:17:00,698 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@32f3f5c6 - Resource [logback.xml] occurs at [jar:file:/root/.cache/coursier/v1/https/repo1.maven.org/maven2/com/phasmidsoftware/flog_3/1.0.11/flog_3-1.0.11.jar!/logback.xml]
383002:17:00,698 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@32f3f5c6 - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml]
383102:17:00,698 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@32f3f5c6 - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml]
383202:17:00,780 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml
383302:17:00,780 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml}
383402:17:00,780 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
383502:17:00,783 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@54335519 - value "logs/Number.log" substituted for "${HOME_LOG}"
383602:17:00,784 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
383702:17:00,784 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
383802:17:00,791 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
383902:17:00,820 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
384002:17:00,820 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
384102:17:00,820 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
384202:17:00,821 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
384302:17:00,821 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
384402:17:00,823 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@54335519 - value "logs/Number.log" substituted for "${HOME_LOG}"
384502:17:00,826 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1171013450 - setting totalSizeCap to 20 GB
384602:17:00,828 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1171013450 - Archive files will be limited to [10 MB] each.
384702:17:00,828 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1171013450 - Will use gz compression
384802:17:00,831 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1171013450 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
384902:17:00,833 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@7e0fec6a - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
385002:17:00,833 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@7e0fec6a - Roll-over at midnight.
385102:17:00,834 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@7e0fec6a - Setting initial period to 2026-01-08T01:16:08.716Z
385202:17:00,836 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
385302:17:00,837 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
385402:17:00,837 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
385502:17:00,837 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
385602:17:00,838 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
385702:17:00,838 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
385802:17:00,838 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
385902:17:00,839 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
386002:17:00,839 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
386102:17:00,839 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@537f6ba8 - End of configuration.
386202:17:00,839 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1daa7743 - Registering current configuration as safe fallback point
386302:17:00,840 |-INFO in ch.qos.logback.classic.util.ContextInitializer@10e563aa - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 142 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
3864
3865[info] LaTeXParserSpec:
3866[info] LaTeXParser
3867[info] - should apply number expressions
3868[info] - should apply pi
3869[info] - should apply e
3870[info] - should apply functions
3871[info] parsed expressions
3872[info] - should apply number expressions
3873[info] degrees and percentages
3874[info] - should parse percentages and degrees
3875[info] ExpressionParserSpec:
3876[info] ExpressionParser
3877[info] - should puremath number expressions
3878[info] - should lazymath number expressions
3879[info] - should puremath pi
3880[info] - should lazymath pi
3881[info] - should puremath e
3882[info] - should lazymath e
3883[info] - should puremath functions
3884[info] - should lazymath functions
3885[info] - should puremath symbols
3886[info] - should lazymath symbols
3887Starting build for ProjectRef(file:/build/repo/,top) (number-top)... [5/6]
3888Compile scalacOptions: -encoding, UTF-8, -unchecked, -Wvalue-discard, -Wnonunit-statement, -explain, -Wunused:imports, -Wunused:privates, -Wunused:locals, -Wconf:msg=Couldn't resolve a member:s, -Wconf:msg=any2stringadd:e, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
3889[info] compiling 1 Scala source to /build/repo/top/target/scala-3.8.0-RC6/test-classes ...
3890[info] done compiling
389102:17:04,392 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
389202:17:04,393 |-INFO in ch.qos.logback.classic.util.ContextInitializer@793d3cab - No custom configurators were discovered as a service.
389302:17:04,393 |-INFO in ch.qos.logback.classic.util.ContextInitializer@793d3cab - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
389402:17:04,394 |-INFO in ch.qos.logback.classic.util.ContextInitializer@793d3cab - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
389502:17:04,394 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
389602:17:04,394 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/top/target/scala-3.8.0-RC6/classes/logback.xml]
389702:17:04,394 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs multiple times on the classpath.
389802:17:04,395 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs at [file:/build/repo/top/target/scala-3.8.0-RC6/classes/logback.xml]
389902:17:04,395 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0-RC6/classes/logback.xml]
390002:17:04,395 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs at [jar:file:/root/.cache/coursier/v1/https/repo1.maven.org/maven2/com/phasmidsoftware/flog_3/1.0.11/flog_3-1.0.11.jar!/logback.xml]
390102:17:04,395 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0-RC6/classes/logback.xml]
390202:17:04,395 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@788be021 - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0-RC6/classes/logback.xml]
390302:17:04,462 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/top/target/scala-3.8.0-RC6/classes/logback.xml
390402:17:04,462 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/top/target/scala-3.8.0-RC6/classes/logback.xml}
390502:17:04,462 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
390602:17:04,464 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@1bb0aae7 - value "logs/Number.log" substituted for "${HOME_LOG}"
390702:17:04,465 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
390802:17:04,465 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
390902:17:04,471 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
391002:17:04,496 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
391102:17:04,496 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
391202:17:04,496 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
391302:17:04,497 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
391402:17:04,497 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
391502:17:04,499 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@1bb0aae7 - value "logs/Number.log" substituted for "${HOME_LOG}"
391602:17:04,502 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@41963643 - setting totalSizeCap to 20 GB
391702:17:04,504 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@41963643 - Archive files will be limited to [10 MB] each.
391802:17:04,504 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@41963643 - Will use gz compression
391902:17:04,508 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@41963643 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
392002:17:04,510 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@12c8ece4 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
392102:17:04,510 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@12c8ece4 - Roll-over at midnight.
392202:17:04,510 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@12c8ece4 - Setting initial period to 2026-01-08T01:16:08.716Z
392302:17:04,511 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
392402:17:04,512 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
392502:17:04,513 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
392602:17:04,513 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
392702:17:04,513 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
392802:17:04,514 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
392902:17:04,514 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
393002:17:04,514 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
393102:17:04,514 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
393202:17:04,514 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@35e59c74 - End of configuration.
393302:17:04,515 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2b1cefbd - Registering current configuration as safe fallback point
393402:17:04,515 |-INFO in ch.qos.logback.classic.util.ContextInitializer@793d3cab - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 121 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
3935
3936[info] TopSpec:
3937[info] Noop
3938[info] - should return Noop
3939[info] - should throw exception
3940[info] - should return None
3941[info] math and lazymath
3942[info] - should parse and render numbers
3943[info] - should parse and render angles
3944[info] - should cancel multiplication and division with simplify 1
3945[info] - should show that lazy evaluation sometimes works even when you don't use it (a2)
3946[info] - should properly simplify 1 * (root3 / root3 * 3)
3947[info] - should distributeProductSum b 0
3948[info] - should distributeProductSum b 1
3949[info] - should distributeProductSum b 2
3950[info] - should distributeProductPower on root(3) * root(3)
3951[info] - should cancel addition and subtraction (a)
3952[info] - should use multiply instead of addition
3953[info] - should work for Negate
3954[info] - should work for Negate Negate
3955[info] - should work for Reciprocal
3956[info] - should work for Reciprocal Reciprocal
3957[info] - should work for Negate Zero
3958[info] - should work for Reciprocal Zero
3959[info] - should work for Reciprocal One
3960[info] - should work for Reciprocal Two
3961[info] - should work for Exp Infinity
3962[info] - should work for Exp neg Infinity
3963[info] - should work for Exp Zero
3964[info] - should work for Exp One
3965[info] - should work for Ln Zero
3966[info] - should work for Ln One
3967[info] - should work for Ln e
3968[info] - should work for Sine 0, etc.
3969[info] - should work for Sine pi/2, etc.
3970[info] - should work for Cosine pi
3971[info] - should cancel multiplication and division with simplify 2
3972[info] - should simplify sqrt(7)∧2
3973[info] - should simplify phi∧2
3974[info] - should cancel 1 + -1
3975[info] - should cancel 2 * 1/2 (a)
3976[info] - should work for multi-levels 1
3977[info] - should work for multi-levels 2
3978[info] - should simplify binary expression 3
3979[info] - should simplify aggregate 4a
3980[info] - should simplify aggregate 4b
3981[info] Other stuff
3982[info] - should
3983
3984************************
3985Build summary:
3986[{
3987 "module": "number-expression",
3988 "compile": {"status": "ok", "tookMs": 37379, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
3989 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
3990 "test-compile": {"status": "ok", "tookMs": 18685, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
3991 "test": {"status": "ok", "tookMs": 2280, "passed": 657, "failed": 0, "ignored": 0, "skipped": 0, "total": 657, "byFramework": [{"framework": "unknown", "stats": {"passed": 657, "failed": 0, "ignored": 0, "skipped": 0, "total": 657}}]},
3992 "publish": {"status": "skipped", "tookMs": 0},
3993 "metadata": {
3994 "crossScalaVersions": ["2.12.20"]
3995}
3996},{
3997 "module": "number-algebra",
3998 "compile": {"status": "ok", "tookMs": 119, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
3999 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4000 "test-compile": {"status": "ok", "tookMs": 5873, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4001 "test": {"status": "ok", "tookMs": 967, "passed": 321, "failed": 0, "ignored": 0, "skipped": 0, "total": 321, "byFramework": [{"framework": "unknown", "stats": {"passed": 321, "failed": 0, "ignored": 0, "skipped": 0, "total": 321}}]},
4002 "publish": {"status": "skipped", "tookMs": 0},
4003 "metadata": {
4004 "crossScalaVersions": ["2.12.20"]
4005}
4006},{
4007 "module": "number-core",
4008 "compile": {"status": "ok", "tookMs": 65, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4009 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4010 "test-compile": {"status": "ok", "tookMs": 25861, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4011 "test": {"status": "failed", "tookMs": 6434, "passed": 1826, "failed": 2, "ignored": 10, "skipped": 0, "total": 1838, "byFramework": [{"framework": "unknown", "stats": {"passed": 1826, "failed": 2, "ignored": 10, "skipped": 0, "total": 1838}}]},
4012 "publish": {"status": "skipped", "tookMs": 0},
4013 "metadata": {
4014 "crossScalaVersions": ["2.12.20"]
4015}
4016},{
4017 "module": "number",
4018 "compile": {"status": "ok", "tookMs": 4853, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4019 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4020 "test-compile": {"status": "ok", "tookMs": 307, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4021 "test": {"status": "ok", "tookMs": 358, "passed": 0, "failed": 0, "ignored": 0, "skipped": 0, "total": 0, "byFramework": []},
4022 "publish": {"status": "ok", "tookMs": 3},
4023 "metadata": {
4024 "crossScalaVersions": ["2.12.20"]
4025}
4026},{
4027 "module": "number-parse",
4028 "compile": {"status": "ok", "tookMs": 200, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4029 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4030 "test-compile": {"status": "ok", "tookMs": 1961, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4031 "test": {"status": "ok", "tookMs": 1090, "passed": 16, "failed": 0, "ignored": 0, "skipped": 0, "total": 16, "byFramework": [{"framework": "unknown", "stats": {"passed": 16, "failed": 0, "ignored": 0, "skipped": 0, "total": 16}}]},
4032 "publish": {"status": "skipped", "tookMs": 0},
4033 "metadata": {
4034 "crossScalaVersions": ["2.12.20"]
4035}
4036},{
4037 "module": "number-top",
4038 "compile": {"status": "ok", "tookMs": 224, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4039 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4040 "test-compile": {"status": "ok", "tookMs": 1813, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4041 "test": {"status": "ok", "tookMs": 1285, "passed": 43, "failed": 0, "ignored": 0, "skipped": 0, "total": 43, "byFramework": [{"framework": "unknown", "stats": {"passed": 43, "failed": 0, "ignored": 0, "skipped": 0, "total": 43}}]},
4042 "publish": {"status": "skipped", "tookMs": 0},
4043 "metadata": {
4044 "crossScalaVersions": ["2.12.20"]
4045}
4046}]
4047************************
4048[error] Scala3CommunityBuild$ProjectBuildFailureException: 1 module(s) finished with failures: number-core
4049[error] (Global / runBuild) Scala3CommunityBuild$ProjectBuildFailureException: 1 module(s) finished with failures: number-core
4050[error] Total time: 118 s (0:01:58.0), completed Jan 8, 2026, 2:17:05 AM
4051[0JBuild failed, not retrying.