Build Logs
rchillyard/number • 3.8.0:2026-01-13
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
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
15Execute tests: true
16sbt project found:
17No prepare script found for project rchillyard/number
18##################################
19Scala version: 3.8.0
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
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"
41"++3.8.0 -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 """{"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.218s.
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
75OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in algebra/crossScalaVersions
76OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in parse/crossScalaVersions
77OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in parse/crossScalaVersions
78OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in expression/crossScalaVersions
79OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in expression/crossScalaVersions
80OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in root/crossScalaVersions
81OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in root/crossScalaVersions
82OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in top/crossScalaVersions
83OpenCB::Changing crossVersion 3.7.3 -> 3.8.0 in core/crossScalaVersions
84OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in core/crossScalaVersions
85OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in algebra/crossScalaVersions
86OpenCB::Limitting incorrect crossVersions List(2.12.20) -> List(3.8.0) in top/crossScalaVersions
87[info] set current project to number (in build file:/build/repo/)
88[info] Setting Scala version to 3.8.0 on 6 projects.
89[info] Switching Scala version on:
90[info] * root (3.8.0)
91[info] expression (3.8.0)
92[info] parse (3.8.0)
93[info] algebra (3.8.0)
94[info] core (3.8.0)
95[info] top (3.8.0)
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 13, 2026, 4:01:25 PM
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/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/classes ...
138[info] done compiling
139[info] compiling 25 Scala sources to /build/repo/expression/target/scala-3.8.0/classes ...
140[info] done compiling
141[info] compiling 23 Scala sources to /build/repo/expression/target/scala-3.8.0/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
14916:02:25,521 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
15016:02:25,522 |-INFO in ch.qos.logback.classic.util.ContextInitializer@3c1ec26c - No custom configurators were discovered as a service.
15116:02:25,522 |-INFO in ch.qos.logback.classic.util.ContextInitializer@3c1ec26c - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
15216:02:25,523 |-INFO in ch.qos.logback.classic.util.ContextInitializer@3c1ec26c - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
15316:02:25,523 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15416:02:25,523 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/expression/target/scala-3.8.0/classes/logback.xml]
15516:02:25,524 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1943aa62 - Resource [logback.xml] occurs multiple times on the classpath.
15616:02:25,524 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1943aa62 - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0/classes/logback.xml]
15716:02:25,524 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1943aa62 - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0/classes/logback.xml]
15816:02:25,524 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1943aa62 - 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]
15916:02:25,524 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1943aa62 - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml]
16016:02:25,632 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/expression/target/scala-3.8.0/classes/logback.xml
16116:02:25,633 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/expression/target/scala-3.8.0/classes/logback.xml}
16216:02:25,633 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
16316:02:25,637 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@5928ea52 - value "logs/Number.log" substituted for "${HOME_LOG}"
16416:02:25,642 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
16516:02:25,642 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
16616:02:25,664 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
16716:02:25,724 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
16816:02:25,724 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
16916:02:25,724 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
17016:02:25,725 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
17116:02:25,725 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
17216:02:25,729 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@5928ea52 - value "logs/Number.log" substituted for "${HOME_LOG}"
17316:02:25,740 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@573670208 - setting totalSizeCap to 20 GB
17416:02:25,744 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@573670208 - Archive files will be limited to [10 MB] each.
17516:02:25,745 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@573670208 - Will use gz compression
17616:02:25,748 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@573670208 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
17716:02:25,750 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@687638c8 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
17816:02:25,750 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@687638c8 - Roll-over at midnight.
17916:02:25,751 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@687638c8 - Setting initial period to 2026-01-13T15:02:25.751Z
18016:02:25,753 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
18116:02:25,754 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
18216:02:25,754 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
18316:02:25,756 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
18416:02:25,756 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
18516:02:25,756 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
18616:02:25,758 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
18716:02:25,758 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
18816:02:25,758 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@6ce28f1e - End of configuration.
18916:02:25,759 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@720682aa - Registering current configuration as safe fallback point
19016:02:25,765 |-INFO in ch.qos.logback.classic.util.ContextInitializer@3c1ec26c - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 237 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
191
192result = 5.000(82)
193[info] RationalParserSpec:
194[info] simpleNumber
195[info] - should parse 1
196[info] - should reject 1
197[info] rational
198[info] - should parse 1/2
199[info] realNumber
200[info] - should parse 3.1415927
201[info] - should parse 3.1415927E1
202[info] number
203[info] - should parse 1/2
204[info] - should parse 1
205[info] - should parse 3.1415927
206[info] EagerOpsSpec:
207[info] EagerOps addition (+)
208[info] - should add two WholeNumbers and normalize
209[info] - should add two RationalNumbers and normalize to WholeNumber
210[info] - should add two RationalNumbers and keep as RationalNumber
211[info] - should add WholeNumber and RationalNumber
212[info] - should add fuzzy Reals and return Structure
213[info] - should add exact Real and WholeNumber
214[info] - should handle addition with zero
215[info] - should handle negative numbers
216[info] EagerOps multiplication (*)
217[info] - should multiply two WholeNumbers and normalize
218[info] - should multiply two RationalNumbers and normalize to WholeNumber
219[info] - should multiply WholeNumber and RationalNumber
220[info] - should multiply RationalNumbers keeping as RationalNumber
221[info] - should multiply fuzzy Reals and return Expression
222[info] - should handle multiplication by zero
223[info] - should handle multiplication by one
224[info] - should handle negative multiplication
225[info] EagerOps subtraction (-)
226[info] - should subtract two WholeNumbers
227[info] - should subtract resulting in negative
228[info] - should subtract RationalNumbers normalizing to WholeNumber
229[info] EagerOps division (/)
230[info] - should divide two WholeNumbers with exact result
231[info] - should divide two WholeNumbers creating RationalNumber
232[info] - should divide RationalNumbers normalizing to WholeNumber
233[info] - should handle division by one
234[info] EagerOps power (∧)
235[info] - should raise WholeNumber to power
236[info] - should handle power of zero
237[info] - should handle power of one
238[info] EagerOps mixed operations
239[info] - should structure operations on WholeNumber correctly
240[info] - should structure operations on RationalNumber correctly
241[info] - should normalize intermediate results
242[info] EagerOps with special types
243[info] - should work with InversePower
244[info] - should work with NatLog
245[info] - should work with Angle
246[info] - should work with Angle flipped
247[info] - should work with Angle mixed
248[info] EagerOps associativity and commutativity
249[info] - should be commutative for addition
250[info] - should be commutative for multiplication
251[info] - should be associative for addition
252[info] - should be associative for multiplication
253[info] EagerOps edge cases
254[info] - should handle large WholeNumbers
255[info] - should handle very small rationals
256[info] EagerOps type discovery after operations
257[info] - should have correct typeName after operation
258[info] - should have correct category after operation
259[info] - should have correct describe after operation
260[info] - should show Expression category for fuzzy operations
261[info] ExpressionSpec:
262[info] Expression
263[info] - should parseToMillExpression
264[info] ShuntingYardParser
265[info] - should parseInfix 1
266[info] - should parseInfix 1 + 2
267[info] - should parseInfix ( 1 + 2 ) * 3
268[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
269[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
270[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
271[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
272[info] - should parse Infix and evaluate: 9
273[info] - should parse Infix and evaluate: 0.5
274[info] - should parse Infix and evaluate: sqrt(3)
275[info] - should shuntingYard
276[info] - should shuntingYard w/o spaces
277[info] - should operator
278[info] TranscendentalSpec:
279[info] Transcendental constants
280[info] - should normalize Pi to Angle
281[info] - should normalize E to Real
282[info] - should normalize L2 to Real
283[info] - should normalize lgE to Real
284[info] - should normalize EulerMascheroni to itself
285[info] - should render Pi correctly
286[info] - should render E correctly
287[info] - should materialize Pi to Angle
288[info] - should materialize E to Real
289[info] - should materialize 𝛾 to Real
290[info] - should have correct isAtomic
291Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
292simplified = BiFunction{<𝛗> + <-1>}
293Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
294Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
295simplifyAggregate 3: x=Aggregate{*,<1>,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>})}; simplified=<1>; result=Match: <1>
296simplifyAggregate 4: x=1; simplified=1; result=Match: <1>
297x1=Aggregate{*,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>}),<3>}
298x2=Aggregate{*,BiFunction{<3> ∧ <½>},rec(BiFunction{<3> ∧ <½>}),<3>}
299simplifyAggregate 5:
300 x1=3;
301 x1 simplified=3;
302 x2 simplified=3
303[info] QuadraticEquationSpec:
304[info] QuadraticEquation
305[info] - should create a quadratic equation with given p and q coefficients
306[info] - should always have 2 branches
307[info] - should format toString correctly for positive coefficients
308[info] - should format toString correctly for negative coefficients
309[info] - should compute discriminant correctly for positive case
310[info] - should compute discriminant correctly for zero case (repeated roots)
311[info] - should compute discriminant correctly for negative case (complex roots)
312[info] - should solve equation with two distinct real roots
313[info] - should solve equation with repeated root
314[info] - should solve simple square root equation x² - 4 = 0
315[info] - should solve equation with complex roots
316[info] - should solve equation x² + 1 = 0 (pure imaginary roots)
317[info] - should throw exception for invalid branch index -1
318[info] - should throw exception for invalid branch index 2
319[info] - should return Expression for valid branch 0
320[info] - should return Expression for valid branch 1
321[info] - should compute conjugate sum correctly
322[info] - should compute conjugate sum for negative p
323[info] - should compute conjugate product correctly
324[info] - should compute conjugate product for negative q
325[info] - should shift origin by c = 1
326[info] - should shift origin by c = -1
327[info] - should shift origin by c = 0 (identity)
328[info] - should invert equation correctly
329[info] - should handle invert with negative coefficients
330[info] - should apply arbitrary transformation
331[info] - should transform with identity functions
332[info] - should scale equation by positive factor
333[info] - should scale equation by negative factor
334[info] - should scale equation by fractional factor
335[info] - should support canEqual for QuadraticEquation instances
336[info] - should reject canEqual for non-QuadraticEquation instances
337[info] - should be equal to itself
338[info] - should be equal to another equation with same coefficients
339[info] - should not be equal to equation with different coefficients
340[info] QuadraticEquation companion object
341[info] - should create square root equation
342[info] - should provide golden ratio equation
343[info] - should provide root two equation
344[info] - should solve golden ratio equation correctly
345[info] - should solve root two equation correctly
346[info] - should handle equation with zero p coefficient
347[info] - should handle equation with zero q coefficient
348[info] - should handle equation with both coefficients negative
349[info] - should handle very small coefficients
350[info] - should handle very large coefficients
351[info] MillParserSpec:
352[info] MillParser
353[info] - should parse monadicOperator
354[info] - should parse dyadicOperator
355[info] - should parse number
356[info] - should parse dyadicTerm
357[info] - should parse monadicTerm (1)
358[info] - should parse monadicTerm (2)
359[info] - should parse anadicTerm
360[info] - should parse term
361[info] - should parse mill
362[info] - should parseMill
363[info] - should parse: 73 24 <> -
364[info] ExpressionSpec:
365[info] evaluate
366[info] - should evaluate 1 + -1
367[info] - should evaluate 1 * -1
368[info] - should evaluate i * 2 (pending)
369[info] parse
370[info] - should parse and evaluate sqrt(3)
371[info] - should parse and evaluate half
372[info] ExpressionMonoFunction
373[info] - should work for Negate
374[info] - should work for Reciprocal
375[info] - should work for Exp
376[info] - should work for Ln
377[info] - should work for Sine
378[info] - should work for Cosine
379[info] evaluateAsIs for UniFunction
380[info] - should work for Exp(1)
381[info] - should work for Reciprocal
382[info] - should work for Ln(-1)
383[info] materialize UniFunction
384[info] - should work for Exp(1)
385[info] - should work for Reciprocal
386[info] - should work for Exp(Ln(2))
387[info] Expression
388[info] - should simplifyAndEvaluate
389[info] - should render
390[info] - should evaluate 3 5 + 7 2 – *
391[info] ExpressionOps
392[info] - should evaluate +
393[info] - should evaluate -
394[info] - should evaluate *
395[info] - should evaluate /
396[info] - should evaluate ∧ 2
397[info] - should evaluate sqrt 36 (pending)
398[info] - should evaluate sin pi/2
399[info] - should evaluate atan
400[info] - should evaluate log 2
401[info] - should evaluate log e
402[info] - should evaluate log 10
403[info] - should fail to evaluate log 1 x or log 0 x
404[info] - should evaluate ln E
405[info] - should evaluate ln 2E
406[info] - should evaluate xxx
407[info] - should evaluate xxx 2
408[info] toString
409[info] - should work for (sqrt 7)∧2
410[info] various operations
411[info] - should evaluate E * 2
412[info] isExact
413[info] - should be true for any constant Valuable
414[info] - should be true for any sum of exact Numbers of the same factor (not e)
415[info] - should be false for any product of exact Numbers and a NatLog factor (except for one)
416[info] - should be true for product of one exact Numbers and a NatLog factor
417[info] - should be true for product of zero exact Numbers and a NatLog factor
418[info] depth
419[info] - should be 1 for any atomic expression
420[info] - should be 2 for any UniFunction expression
421[info] - should be more than 1 for other expression
422[info] Euler
423[info] - should prove Euler's identity 1 (pending)
424[info] - should prove Euler's identity 2 (pending)
425[info] FieldExpression
426[info] - should Zero be equal to zero
427[info] - should One be equal to one
428[info] simplifyConstant
429[info] - should simplify biFunction expressions
430[info] simplifyExact
431[info] - should simplify biFunction expressions
432[info] simplify
433[info] - should simplify field expressions
434[info] - should simplify constant expressions
435[info] - should simplify unary expressions
436[info] - should simplify binary expressions
437[info] - should simplify function expressions
438[info] - should simplify biFunction expressions
439[info] - should simplify aggregate expressions
440[info] - should aggregate 2
441[info] - should evaluate e * e
442[info] - should evaluate phi * phi
443[info] - should evaluate 1 / phi
444[info] - should evaluate - phi
445[info] Sum
446[info] - should add pi to -pi
447[info] simplifyComposite
448[info] - should evaluate 1/2 * 2
449[info] - should evaluate e * e
450[info] - should evaluate phi * phi
451[info] Expression.apply(String)
452[info] - should
453[info] MillSpec:
454[info] Mill
455[info] - should pop
456[info] - should push
457[info] - should iterate
458[info] - should empty
459[info] - should apply()
460[info] - should apply(1)
461[info] - should process empty list of Items
462[info] - should create a Mill from list of Items: 42, 37, +
463[info] - should accept list of Items: 42, 37, +
464[info] - should process list of Items: 42, 37, +
465[info] - should process list of Items: 42, 37, -
466[info] - should process list of Items with Swap: 42, 37, Swap, -
467[info] - should process list of Items with Noop: 42, 37, +, Noop
468[info] - should process list of Items with Clr: 42, 37, +, c
469[info] - should process Noop
470[info] - should process list of Items: 3, 2, ∧
471[info] - should process list of Items: 7, chs
472[info] - should process list of Items: 42, 37, +, 2, *
473[info] - should process list of Items: 2, inv
474[info] - should process a String: 42 37 + 2 *
475[info] parse and evaluate
476[info] - should parse and evaluate: 2 37 + 2 *
477[info] - should parse and evaluate: 2 3 ∧
478[info] - should parse and evaluate: 2 3 /
479[info] - should parse and evaluate: 2 √
480[info] - should parse and evaluate: 73 24 <> -
481[info] - should parse and evaluate: 𝛑 cos
482[info] - should parse and evaluate: 𝜀 ln
483[info] - should parse and evaluate: 2 exp
484[info] - should parse and evaluate: 12 34 + 56 + 78 - 90 + 12 -
485[info] - should parse and evaluate: 3696
486[info] - should parse and evaluate: 207
487[info] - should parse and evaluate: 207 with leading space
488[info] - should parse and evaluate: 207 with trailing space
489[info] - should parse and evaluate: 9
490[info] - should parse 3 5 + 7 2 – *
491[info] - should parse 3 4 2 × 1 5 − 2 3 ∧ ∧ ÷ +
492[info] - should parse and evaluate: 220xxxx with trailing space
493[info] - should parse infix
494[info] QuadraticRootSpec:
495[info] QuadraticRoot
496[info] - should create quadratic root
497[info] normalize - simple integer roots
498[info] - should normalize x² - 3x + 2 (roots: 1, 2) - positive branch
499[info] - should normalize x² - 3x + 2 - negative branch
500[info] - should normalize x² - 4 (roots: -2, 2) - positive branch
501[info] - should normalize x² - 4 - negative branch
502[info] normalize - golden ratio
503[info] - should normalize x² - x - 1 to golden ratio (positive branch)
504[info] - should normalize x² - x - 1 (negative branch)
505[info] normalize - irrational roots
506[info] - should normalize x² - 2 (roots: ±√2)
507[info] - should normalize x² + x - 1 (irrational roots)
508[info] normalize - rational roots
509[info] - should normalize 2x² - 5x + 2 converted to monic form
510[info] normalize - double root
511[info] - should normalize x² - 4x + 4 (double root: 2)
512[info] render
513[info] - should render quadratic root correctly
514[info] materialize
515[info] - should materialize to QuadraticSolution
516[info] - should have correct isAtomic
517[info] ExpressionParserSpec:
518[info] ExpressionParser
519[info] - should apply number expressions
520[info] - should apply pi
521[info] - should apply e
522[info] ComplexParserSpec:
523[info] ComplexParser
524[info] - should doParse
525[info] CompositeExpressionSpec:
526[info] CompositeExpression
527[info] - should terms
528[info] - should simplifyExact 1
529[info] - should simplifyExact 2
530[info] - should simplifyExact 3
531[info] - should simplifyComponents
532[info] - should render
533[info] - should maybeDouble
534[info] - should simplifyTrivial
535[info] - should simplifyComposite
536[info] - should simplifyConstant
537[info] - should isAtomic
538[info] - should apply
539[info] - should create
540[info] FuzzyParserSpec:
541[info] integer
542[info] - should parse 1
543[info] - should parse 6
544[info] fuzz
545[info] - should parse (42)
546[info] - should not parse 42
547[info] fraction
548[info] - should parse .42
549[info] exponent
550[info] - should parse E-11
551[info] - should parse E11
552[info] - should parse e2
553[info] nominal
554[info] - should parse 1
555[info] - should parse 6.67408
556[info] - should parse 6.67408E-11
557[info] fuzzyRep
558[info] - should parse 1
559[info] partial parsing
560[info] - should parse 6.67408(31)E−11
561[info] fuzzyRep
562[info] - should parse 6.67408(31)E−11
563[info] fuzzy
564[info] - should be Exact(1)
565[info] - should parse 6.67408(31)E−11
566[info] - should parse 3.1415927(01)
567[info] - should parse 3.1415927
568[info] - should parse 16.5[2]
569[info] ShuntingYardParserSpec:
570[info] ShuntingYardParser
571[info] - should parse the easy expressions
572[info] - should parse the tricky expressions (pending)
573[info] Mill
574[info] - should parseInfix 1
575[info] - should parseInfix 1 + 2
576[info] - should parseInfix ( 1 + 2 ) * 3
577[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
578[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
579[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
580[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
581[info] - should parse Infix and evaluate: 9
582[info] - should parse Infix and evaluate: 0.5
583[info] - should parse Infix and evaluate: sqrt(3)
584[info] - should parse Infix and evaluate: sin(𝛑)
585[info] - should parse Infix and evaluate: sin(𝛑/2)
586[info] - should parse Infix and evaluate: sin(𝛑) - 1
587[info] - should shuntingYard
588[info] - should shuntingYard w/o spaces
589[info] - should operator
590[info] - should essentially do nothing
591[info] LiteralSpec:
592[info] Literal
593[info] - should create from WholeNumber
594[info] - should create from RationalNumber
595[info] - should normalize to its underlying number
596[info] - should render correctly
597[info] - should materialize to Some of its number
598[info] - should have correct isAtomic
599[info] EmptySpec:
600[info] ∅
601[info] - should yield 42a
602[info] - should yield 42b
603[info] - should yield 42c
604[info] - should yield 4a
605[info] - should yield 4b
606[info] - should yield 4c
607[info] - should yield 5a
608[info] - should NOT yield 10
609[info] - should use implicit materialization
610[info] ArithmeticParserSpec:
611[info] DoubleArithmeticParser$.factor
612[info] - should parse 3.1415927
613[info] DoubleArithmeticParser(1)
614[info] - should be 1.0
615[info] - should parse (1)
616[info] - should fail pi
617[info] DoubleArithmeticParser.term
618[info] - should parse 1*2
619[info] - should parse 1/2
620[info] - should parse 3.1415927
621[info] - should parse (1)
622[info] - should fail pi
623[info] - should fail 1+2
624[info] DoubleArithmeticParser.expr
625[info] - should parse 1 as 1.0
626[info] - should parse 1+1 as 2.0
627[info] - should parse 1*2+1 as 3.0
628[info] - should parse 1*2+1-1.5 as 1.5
629[info] - should parse 1/0 as infinite
630[info] - should parse 1*2+1-3/2 as 1.5
631[info] - should parse 10/3 as ...
632[info] - should succeed for DoubleArithmeticParser(2+1-3/2)
633[info] - should succeed DoubleArithmeticParser(5*(6+1-(3/2))/4)
634[info] - should succeed DoubleArithmeticParser(5*(6+1-3/2)/4) even without explicit parentheses
635[info] - should fail to parse 1*2+1-pi/2
636[info] - should fail to parse (1?2)
637[info] RationalArithmeticParser(1)
638[info] - should be 1
639[info] RationalArithmeticParser(1+1)
640[info] - should be 2/1
641[info] - should parse 1*2+1 as 3/1
642[info] - should parse 1*2+1-3/2 as 3/2
643[info] RationalArithmeticParser(1/0)
644[info] - should be infinite
645[info] (
646[info] - should fail
647[info] - should fail 1+2=2
648[info] IntArithmeticParser(3/2)
649[info] - should fail
650[info] RootSpec:
651[info] Root factory method
652[info] - should create QuadraticRoot for quadratic equation
653[info] - should create LinearRoot for linear equation
654[info] - should ignore branch parameter for linear equations
655[info] QuadraticRoot construction
656[info] - should create root from equation and branch
657[info] - should create root for branch 1
658[info] - should create root from QuadraticSolution
659[info] QuadraticRoot predefined constants
660[info] - should define phi (golden ratio)
661[info] - should define psi (conjugate of golden ratio)
662[info] - should define rootTwo (√2)
663[info] - should define negRootTwo (-√2)
664[info] - should define one
665[info] - should define zero
666[info] QuadraticRoot.solution
667[info] - should compute solution lazily for phi
668[info] - should compute correct solution for x² - 4 = 0, branch 0
669[info] - should compute correct solution for x² - 4 = 0, branch 1
670[info] - should compute solution for complex roots
671[info] QuadraticRoot.branches and branched
672[info] - should return 2 branches for quadratic equations
673[info] - should get specific branch using branched(index)
674[info] QuadraticRoot.isExact
675[info] - should always be exact
676[info] QuadraticRoot.render
677[info] - should render phi with special character
678[info] - should render psi with special character
679[info] - should render generic quadratic root
680[info] QuadraticRoot.toString
681[info] - should use special symbol for phi
682[info] - should use special symbol for psi
683[info] - should use descriptive string for generic roots
684[info] QuadraticRoot.power
685[info] - should return One for power of 0
686[info] - should return self for power of 1
687[info] - should compute square (power of 2)
688[info] - should compute higher powers
689[info] - should handle negative powers using reciprocal
690[info] - should compute square root (power of 1/2)
691[info] QuadraticRoot.reciprocal
692[info] - should compute reciprocal for quadratic roots
693[info] - should compute reciprocal for phi
694[info] QuadraticRoot.negate
695[info] - should negate a root
696[info] - should negate phi
697[info] QuadraticRoot.squareRoot
698[info] - should compute positive square root
699[info] - should compute negative square root
700[info] QuadraticRoot.add
701[info] - should add two quadratic roots with compatible solutions (pending)
702[info] - should return None for incompatible root addition
703[info] QuadraticRoot.pure
704[info] - should create new root with different equation
705[info] QuadraticRoot equality and hashCode
706[info] - should be equal to itself
707[info] - should be equal to another root with same equation and branch
708[info] - should not be equal if branches differ
709[info] - should not be equal if equations differ
710[info] - should have consistent hashCode
711[info] LinearRoot construction
712[info] - should create linear root from equation
713[info] - should define half constant
714[info] LinearRoot properties
715[info] - should always have branch 0
716[info] - should have 1 branch
717[info] - should branched returns itself
718[info] - should always be exact
719[info] LinearRoot.solution
720[info] - should compute solution for linear equation
721[info] - should compute solution for half
722[info] LinearRoot.pure
723[info] - should create new linear root with different equation
724[info] - should ignore branch parameter
725[info] Root.maybeFactor
726[info] - should determine factor for linear solutions
727[info] Root.approximation
728[info] - should provide approximation for phi
729[info] - should provide approximation for rootTwo
730[info] - should provide approximation for half
731[info] Root.maybeDouble
732[info] - should provide double value for exact solutions
733[info] Root edge cases
734[info] - should handle zero root
735[info] - should handle one root
736[info] - should handle equations with complex solutions
737[info] Root.evaluate and evaluateAsIs
738[info] - should evaluate root when solution is exact
739[info] - should evaluate phi
740[info] Root arithmetic combinations
741[info] - should compute phi squared
742[info] - should compute reciprocal of rootTwo
743[info] - should negate and square rootTwo
744[info] - should evaluate phi + psi
745[info] NumberParserSpec:
746[info] numberWithFuzziness
747[info] - should parse 1.0*
748[info] - should reject 1.0 *
749[info] - should parse 1.*
750[info] - should reject 1.*
751[info] - should parse 3.1415927*
752[info] - should parse 3.1415927...
753[info] - should parse 3.1415927*E1
754[info] - should reject 3.1415927* E1
755[info] - should parse 1.00(5)
756[info] - should reject 1.00 (5)
757[info] generalNumber
758[info] - should parse 1.0
759[info] - should parse 1.*
760[info] - should work for 3.14
761[info] - should work for 3.1415927
762[info] - should parse 3.1415927*
763[info] - should parse 2.9979245800E8
764[info] - should parse 3.1415927*E1
765[info] - should parse 1/2
766[info] - should work for 1.00(5)
767[info] fuzz
768[info] - should parse (17)
769[info] - should parse *
770[info] number
771[info] - should parse 1.*
772[info] - should work for 3.14
773[info] - should work for 3.1415927
774[info] - should parse 3.1415927*
775[info] - should parse 3.1415927*E1
776[info] - should parse 3.141592653589793*
777[info] - should parse 𝛑
778[info] - should parse 1𝛑
779[info] - should reject 1 𝛑
780[info] realNumber
781[info] - should parse 2.9979245800E8
782[info] NamedConstantSpec:
783[info] NamedConstant
784[info] - should create pi
785[info] - should create e
786[info] - should normalize to Real
787[info] - should render with its name
788[info] - should materialize to Real
789[info] - should have correct isAtomic
790[info] - should scale correctly
791[info] SignificantSpaceParsersSpec:
792[info] SignificantSpaceParsers
793[info] - should stringParser
794[info] - should match for RegexOps
795[info] - should fail for RegexOps
796[info] - should ParserOps
797[info] - should ParserOptionOps 1
798[info] - should ParserOptionOps 2
799[info] - should trim
800[info] - should repSepSp
801[info] EagerOpsIntegrationSpec:
802[info] EagerOps full pipeline
803[info] - should create Expression -> simplify -> materialize -> normalize
804[info] - should handle complex expression that normalizes through multiple steps
805[info] - should preserve Expression for fuzzy operations
806[info] - should work with all normalize tests passing
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/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
1037[info] LatexRendererSpec:
1038[info] LatexRenderer typeclass
1039[info] - should provide summoner method
1040[info] - should provide instance constructor
1041[info] - should provide syntax extension
1042[info] LatexRenderer helper methods
1043[info] - should wrap content in inline math mode
1044[info] - should wrap content in display math mode
1045[info] - should create fractions
1046[info] - should create square roots
1047[info] - should create nth roots
1048[info] - should format signs correctly
1049[info] NatSpec:
1050[info] Nat
1051[info] - should have correct constant elements
1052[info] - should inc
1053[info] - should render
1054[info] - should fail on negative numbers
1055[info] - should perform addition correctly
1056[info] - should perform multiplication correctly
1057[info] - should satisfy distributive property
1058[info] WholeNumberSpec:
1059[info] WholeNumber
1060[info] - should test creation
1061[info] - should test render
1062[info] - should test conversion to other Structures
1063[info] - should test comparison
1064[info] - should test compareExact
1065[info] - should test arithmetic operations
1066[info] WholeNumberSpec 2
1067[info] - should +
1068[info] - should *
1069[info] - should -
1070[info] - should apply
1071[info] - should approximation
1072[info] - should asJavaNumber
1073[info] - should asT
1074[info] - should compare
1075[info] - should compareExact
1076[info] - should compareTo
1077[info] - should convert
1078[info] - should plus
1079[info] - should scale
1080[info] - should doScale
1081[info] - should doScaleInt
1082[info] - should isExact
1083[info] - should isZero
1084[info] - should maybeDouble
1085[info] - should maybeFactor
1086[info] - should minusOne
1087[info] - should negate
1088[info] - should one
1089[info] - should render
1090[info] - should scaleFactor
1091[info] - should showWholeNumber
1092[info] - should signum
1093[info] - should maybeInt
1094[info] - should toString
1095[info] - should zero
1096[info] CommutativeGroup[WholeNumber]
1097[info] - should plus
1098[info] - should times
1099[info] - should negate
1100[info] RationalNumberSpec:
1101[info] RationalNumber
1102[info] - should apply
1103[info] - should assertEq
1104[info] - should render
1105[info] - should toString
1106[info] - should parse
1107[info] - should percentage
1108[info] - should perform addition correctly
1109[info] - should perform subtraction correctly
1110[info] - should perform multiplication correctly
1111[info] - should perform division correctly
1112[info] - should perform reciprocal correctly
1113[info] - should compare numbers correctly
1114[info] - should convert to different number types
1115[info] - should handle zero correctly
1116[info] Field[RationalNumber]
1117[info] - should plus
1118[info] - should negate
111916:02:34,378 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
112016:02:34,380 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6b7f52b6 - No custom configurators were discovered as a service.
112116:02:34,381 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6b7f52b6 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
112216:02:34,381 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6b7f52b6 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
112316:02:34,383 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
112416:02:34,383 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml]
112516:02:34,384 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4b0c6a7d - Resource [logback.xml] occurs multiple times on the classpath.
112616:02:34,384 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4b0c6a7d - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0/classes/logback.xml]
112716:02:34,384 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4b0c6a7d - 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]
112816:02:34,384 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4b0c6a7d - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml]
112916:02:34,467 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml
113016:02:34,467 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/algebra/target/scala-3.8.0/classes/logback.xml}
113116:02:34,467 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
113216:02:34,470 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@71f82856 - value "logs/Number.log" substituted for "${HOME_LOG}"
113316:02:34,471 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
113416:02:34,471 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
113516:02:34,478 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
113616:02:34,506 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
113716:02:34,506 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
113816:02:34,506 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
113916:02:34,507 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
114016:02:34,507 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
114116:02:34,509 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@71f82856 - value "logs/Number.log" substituted for "${HOME_LOG}"
114216:02:34,513 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1460404440 - setting totalSizeCap to 20 GB
114316:02:34,515 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1460404440 - Archive files will be limited to [10 MB] each.
114416:02:34,515 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1460404440 - Will use gz compression
114516:02:34,518 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1460404440 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
114616:02:34,520 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@46f7026d - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
114716:02:34,520 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@46f7026d - Roll-over at midnight.
114816:02:34,520 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@46f7026d - Setting initial period to 2026-01-13T15:02:25.754Z
114916:02:34,522 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
115016:02:34,523 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
115116:02:34,524 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
115216:02:34,524 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
115316:02:34,525 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
115416:02:34,525 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
115516:02:34,525 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
115616:02:34,526 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
115716:02:34,526 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
115816:02:34,526 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@6e80d74c - End of configuration.
115916:02:34,527 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5e0af852 - Registering current configuration as safe fallback point
116016:02:34,528 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6b7f52b6 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 147 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
1161
1162[info] NormalizeIntegrationSpec:
1163[info] normalize in addition operations
1164[info] - should normalize RationalNumber + RationalNumber to WholeNumber when appropriate
1165[info] - should keep as RationalNumber when sum is not whole
1166[info] - should normalize WholeNumber + RationalNumber correctly
1167[info] normalize in multiplication operations
1168[info] - should normalize RationalNumber * RationalNumber to WholeNumber
1169[info] - should normalize WholeNumber * RationalNumber to WholeNumber when appropriate
1170[info] normalize in division operations
1171[info] - should create and normalize rational from WholeNumber division
1172[info] - should keep as RationalNumber when division is not exact
1173[info] normalize with InversePower operations
1174[info] - should simplify square root of perfect square
1175[info] - should simplify cube root of perfect cube
1176[info] normalize with logarithm operations
1177[info] - should reduce NatLog(0) in expressions
1178[info] normalize in nested operations
1179[info] - should normalize through multiple levels
1180[info] - should normalize NatLog with normalized argument
1181[info] normalize preserves mathematical equality
1182[info] - should maintain fuzzy equality after normalization
1183[info] - should normalize both sides of comparison consistently
1184[info] normalize edge cases
1185[info] - should handle normalization of zero in various forms
1186[info] - should handle normalization of one in various forms
1187[info] - should handle negative numbers correctly
1188[info] normalize with percentage flag
1189[info] - should preserve percentage flag when RationalNumber doesn't reduce to whole
1190[info] - should not lose percentage flag when normalizing
1191[info] QuadraticSolutionSpec:
1192[info] QuadraticSolution construction
1193[info] - should create a quadratic solution with real roots (branch 0)
1194[info] - should create a quadratic solution with real roots (branch 1)
1195[info] - should create a quadratic solution with imaginary roots (branch 0)
1196[info] - should create a quadratic solution with imaginary roots (branch 1)
1197[info] - should create phi constant correctly
1198[info] - should create psi constant correctly
1199[info] QuadraticSolution.conjugate
1200[info] - should compute conjugate by inverting branch (0 -> 1)
1201[info] - should compute conjugate by inverting branch (1 -> 0)
1202[info] - should preserve imaginary flag in conjugate
1203[info] - should conjugate of conjugate returns original
1204[info] QuadraticSolution.negate
1205[info] - should negate base and flip branch
1206[info] - should negate and conjugate correctly for branch 1
1207[info] QuadraticSolution.normalize
1208[info] - should normalize to offset when base is zero
1209[info] - should normalize to base when offset is zero
1210[info] - should not normalize when both base and offset are non-zero
1211[info] QuadraticSolution boolean predicates
1212[info] - should identify zero solution correctly
1213[info] - should not identify non-zero solution as zero
1214[info] - should identify pure number when offset is zero
1215[info] - should not identify as pure number when offset is non-zero
1216[info] - should identify unity correctly
1217[info] - should not identify non-unity as unity
1218[info] - should always report as exact
1219[info] QuadraticSolution.branched
1220[info] - should compute correct coefficient for branch 0
1221[info] QuadraticSolution.add(Rational)
1222[info] - should add rational to base when base is pure number
1223[info] QuadraticSolution.add(Solution)
1224[info] - should add phi to psi
1225[info] QuadraticSolution.multiply(Solution)
1226[info] - should multiply phi by psi
1227[info] QuadraticSolution.*(Rational)
1228[info] - should scale both base and offset when both are scalars
1229[info] - should preserve branch when scaling
1230[info] QuadraticSolution equality
1231[info] - should be equal to itself
1232[info] - should be equal to another solution with same base, offset, and branch
1233[info] - should not be equal if branches differ
1234[info] - should not be equal if bases differ
1235[info] - should not be equal if offsets differ
1236[info] QuadraticSolution fuzzy equality
1237[info] - should be fuzzy equal to itself
1238[info] - should be fuzzy equal to similar solution
1239[info] - should not be fuzzy equal if branches differ
1240[info] QuadraticSolution.render
1241[info] - should render phi with its name
1242[info] - should render psi with its name
1243[info] - should render normalized form when offset is zero
1244[info] - should render with + for branch 0
1245[info] - should render with - for branch 1
1246[info] - should render complex solutions with appropriate prefix
1247[info] QuadraticSolution edge cases
1248[info] - should handle zero base and zero offset
1249[info] - should handle unity base with zero offset
1250[info] - should handle large rational values
1251[info] - should handle negative base values
1252[info] QuadraticSolution.approximation
1253[info] - should provide approximation for non-exact solutions
1254[info] - should handle approximation for pure number solutions
1255[info] QuadraticSolution with imaginary flag integration
1256[info] - should distinguish between real and imaginary solutions in rendering
1257[info] - should preserve imaginary flag through conjugate
1258[info] - should preserve imaginary flag through scaling (pending)
1259[info] QuadraticSolution toString
1260[info] - should delegate to render
1261[info] InversePowerSpec:
1262[info] InversePower
1263[info] - should convert
1264[info] - should toDouble
1265[info] - should signum
1266[info] - should approximation
1267[info] - should asJavaNumber
1268[info] - should maybeDouble
1269[info] - should scale
1270[info] - should isZero
1271[info] - should isExact
1272[info] - should maybeFactor
1273[info] - should toRational
1274[info] - should showInversePower
1275[info] - should render
1276[info] - should render implicitly
1277[info] normalize
1278[info] - should normalize
1279[info] AngleSpec:
1280[info] Angle
1281[info] - should test creation
1282[info] - should test render
1283[info] - should test conversion to other Structures
1284[info] - should isExact
1285[info] - should maybeDouble
1286[info] - should isZero
1287[info] - should test comparison
1288[info] - should test compareExact
1289[info] - should test arithmetic operations
1290[info] Angle (in degrees)
1291[info] - should test equivalence
1292[info] - should test creation
1293[info] - should test render
1294[info] - should maybeDouble
1295[info] - should isZero
1296[info] - should test compareExact
1297[info] - should test arithmetic operations
1298[info] AdditiveCommutativeGroup[Angle]
1299[info] - should combine
1300[info] - should inverse
1301[info] ScalarSpec:
1302[info] Scalar
1303[info] - should parse string
1304[info] - should correctly determine if a value is exact
1305[info] - should convert to Real when possible
1306[info] - should render values correctly
1307[info] - should perform addition using doPlus
1308[info] - should compare for equality correctly
1309[info] NormalizeSpec:
1310[info] WholeNumber.normalize
1311[info] - should return itself (already in simplest form)
1312[info] - should work for zero
1313[info] - should work for negative numbers
1314[info] RationalNumber.normalize
1315[info] - should reduce to WholeNumber when denominator is 1
1316[info] - should reduce fraction and then to WholeNumber
1317[info] - should keep as RationalNumber when not reducible to whole
1318[info] - should return same instance if already normalized and not whole
1319[info] - should preserve asPercentage flag when not reducing to whole
1320[info] - should work with negative rationals
1321[info] - should work with zero
1322[info] Real.normalize
1323[info] - should return itself (fuzzy numbers don't reduce)
1324[info] - should keep exact Reals as Real
1325[info] InversePower.normalize
1326[info] - should reduce to base when n=1
1327[info] - should normalize the base number
1328[info] - should return same instance if base doesn't normalize
1329[info] - should handle nested normalization
1330[info] NatLog.normalize
1331[info] - should reduce NatLog(0) to WholeNumber(1)
1332[info] - should normalize the number parameter
1333[info] - should return same instance if number doesn't normalize
1334[info] Logarithm.normalize
1335[info] - should reduce Logarithm(base, 0) to WholeNumber(1)
1336[info] - should normalize the number parameter
1337[info] - should return same instance if number doesn't normalize
1338[info] Angle.normalize
1339[info] - should return itself (angles have semantic meaning)
1340[info] - should normalize the radians parameter
1341[info] Complex.normalize
1342[info] normalize integration tests
1343[info] - should handle chains of normalization
1344[info] - should not work in raw arithmetic operations
1345[info] type discovery methods
1346[info] - should return correct typeName
1347[info] - should return correct category
1348[info] - should return correct describe string
1349[info] NumberSpec:
1350[info] Number
1351[info] - should perform addition correctly
1352[info] - should perform subtraction correctly
1353[info] - should perform multiplication correctly
1354[info] - should perform division correctly
1355[info] - should compare numbers correctly
1356[info] - should convert to different number types
1357[info] - should isExact
1358[info] - should handle zero correctly
1359[info] RealSpec:
1360[info] Real
1361[info] - should apply(String)
1362[info] - should perform addition correctly
1363[info] - should perform subtraction correctly
1364[info] - should perform multiplication correctly
1365[info] - should perform division correctly
1366[info] - should compare numbers correctly A
1367[info] - should compare numbers correctly B
1368[info] - should convert to different number types
1369[info] - should handle zero correctly
1370[info] Ring[Real]
1371[info] - should plus
1372[info] - should negate
1373[info] EagerSpec:
1374[info] Eager
1375[info] - should ~= Real/Real
1376[info] - should ~= Angle/Angle
1377[info] - should ~= WholeNumber/WholeNumber
1378[info] - should ~= RationalNumber/RationalNumber
1379[info] - should ~= RationalNumber/WholeNumber
1380[info] - should ~= Functional/Functional
1381[info] - should ~= Real/WholeNumber
1382[info] - should ~= Real/RationalNumber
1383[info] - should ~= RationalNumber/Real
1384[info] - should ~= Real/Functional (1)
1385[info] - should ~= Real/Functional (2)
1386[info] - should ~= Functional/Real
1387[info] - should ~= Functional/WholeNumber
1388[info] - should ~= WholeNumber/Functional
1389[info] LatexRendererInstancesSpec:
1390[info] Rational LatexRenderer
1391[info] - should render integers without denominator
1392[info] - should render proper fractions
1393[info] - should render negative fractions
1394[info] RationalNumber LatexRenderer
1395[info] - should delegate to Rational renderer
1396[info] - should render half correctly
1397[info] - should render zero correctly
1398[info] - should render one correctly
1399[info] Logarithm LatexRenderer
1400[info] - should render logarithmic numbers
1401[info] InversePower LatexRenderer
1402[info] - should render square roots
1403[info] - should render square roots of fractions
1404[info] - should render cube roots
1405[info] - should render fifth roots
1406[info] - should render nested roots properly
1407[info] QuadraticSolution LatexRenderer
1408[info] - should render phi constant with LaTeX symbol
1409[info] - should render psi constant with LaTeX symbol
1410[info] - should render solution with zero offset as just base
1411[info] - should render solution with zero base as just offset
1412[info] - should render solution with zero base and negative branch
1413[info] - should render real solution with positive branch (branch 0)
1414[info] - should render real solution with negative branch (branch 1)
1415[info] - should render complex solution with positive branch
1416[info] - should render complex solution with negative branch
1417[info] - should render solution with integer base and irrational offset
1418[info] - should render negative base correctly
1419[info] LinearSolution LatexRenderer
1420[info] - should render linear solution as its value
1421[info] - should render fractional linear solution
1422[info] - should render linear solution with irrational value
1423[info] Algebraic LatexRenderer (general)
1424[info] - should handle QuadraticSolution through Algebraic type
1425[info] - should handle LinearSolution through Algebraic type
1426[info] Edge cases and special values
1427[info] - should handle very large rationals
1428[info] - should handle negative zero-like cases
1429[info] - should render unity correctly in various forms
1430[info] Complex number representations
1431[info] - should handle the golden ratio phi correctly
1432[info] - should handle both roots of x² - x - 1 = 0
1433[info] Integration with existing render method
1434[info] - should provide LaTeX rendering separate from display rendering
1435[info] EqualityComprehensiveSpec:
1436[info] === (Exact Equality)
1437[info] - should compare WholeNumbers with ===
1438[info] - should compare RationalNumbers with ===
1439[info] - should compare WholeNumber with RationalNumber using ===
1440[info] - should compare exact Reals with ===
1441[info] - should compare WholeNumber with exact Real using ===
1442[info] - should compare RationalNumber with exact Real using ===
1443[info] - should compare Angles with === (ignoring degrees flag)
1444[info] - should compare Nats with ===
1445[info] - should compare LinearSolutions with ===
1446[info] - should compare QuadraticSolutions with ===
1447[info] - should compare NatLogs with ===
1448[info] - should compare InversePowers with ===
1449[info] ~== (Fuzzy Equality)
1450[info] - should compare fuzzy Reals with ~==
1451[info] - should compare exact Real with fuzzy Real using ~==
1452[info] - should compare Angles with ~==
1453[info] - should handle fuzzy equality for normalized Angles
1454[info] - should use exact equality for RationalNumber with ~==
1455[info] - should use exact equality for WholeNumber with ~==
1456[info] - should use exact equality for Nat with ~==
1457[info] - should compare WholeNumber with fuzzy Real using ~==
1458[info] - should compare RationalNumber with fuzzy Real using ~==
1459[info] - should compare WholeNumber with RationalNumber using ~==
1460[info] - should compare Angle with different representations using ~==
1461[info] - should compare QuadraticSolutions with ~==
1462[info] - should compare InversePowers with ~=
1463[info] === and ~== edge cases
1464[info] - should handle zero comparisons
1465[info] - should handle one/unity comparisons
1466[info] - should handle negative numbers
1467[info] - should not consider infinity equal to large numbers
1468[info] - should handle NaN appropriately
1469[info] symmetry of === and ~==
1470[info] - should be symmetric for ===
1471[info] - should be symmetric for ~==
1472[info] - should be symmetric for cross-type comparisons with ~==
1473[info] transitivity of === and ~==
1474[info] - should be transitive for ===
1475[info] - should demonstrate that ~== respects transitivity for exact types
1476[info] - should note that ~== may not be transitive for fuzzy values
1477[info] + Fuzzy equality is not necessarily transitive
1478[info] reflexivity of === and ~==
1479[info] - should be reflexive for ===
1480[info] - should be reflexive for ~==
1481[info] special mathematical values
1482[info] - should handle pi correctly
1483[info] - should handle e correctly
1484[info] - should handle golden ratio (phi) correctly
1485[info] - should handle square roots correctly
1486[info] practical usage patterns
1487[info] - should work with collections using ===
1488[info] - should work with Option using ===
1489[info] - should work in pattern matching contexts
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/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
1499[info] RandomLongSpec:
1500[info] RandomLong
1501[info] - should get
1502[info] - should map
1503[info] SignificantSpaceParsersSpec:
1504[info] SignificantSpaceParsers
1505[info] - should stringParser
1506[info] - should match for RegexOps
1507[info] - should fail for RegexOps
1508[info] - should ParserOps
1509[info] - should ParserOptionOps 1
1510[info] - should ParserOptionOps 2
1511[info] - should trim
1512[info] - should repSepSp
1513[info] PolynomialSpec:
1514[info] Polynomial
1515[info] - should apply 0
1516[info] - should apply 1
1517[info] - should apply 2
1518[info] - should degree
1519[info] - should derivative 1
1520[info] - should derivative 2
1521[info] - should coefficients
1522[info] - should derivativeN
1523[info] - should nthDerivative
1524[info] FactorialSpec:
1525[info] Factorial
1526[info] - should apply successfully
1527[info] - should fail on negative numbers
1528[info] OperationsSpec:
1529[info] MonadicOperationModulate
1530[info] - should work
1531[info] - should work with circular true
1532[info] - should work with circular false
1533[info] ExpressionParserSpec:
1534[info] DoubleExpressionParser.factor
1535[info] - should parse 3.1415927
1536[info] DoubleExpressionParser(1)
1537[info] - should be 1.0
1538[info] - should parse (1)
1539[info] - should fail pi
1540[info] DoubleExpressionParser.term
1541[info] - should parse 1*2
1542[info] - should parse 1/2
1543[info] - should parse 3.1415927
1544[info] - should parse (1)
1545[info] - should fail pi
1546[info] - should fail 1+2
1547[info] DoubleExpressionParser.expr
1548[info] - should parse 1 as 1.0
1549[info] - should parse 1+1 as 2.0
1550[info] - should parse 1*2+1 as 3.0
1551[info] - should parse 1*2+1-1.5 as 1.5
1552[info] - should parse 1/0 as infinite
1553[info] - should parse 1*2+1-3/2 as 1.5
1554[info] - should parse 10/3 as ...
1555[info] - should succeed for DoubleExpressionParser(2+1-3/2)
1556[info] - should succeed DoubleExpressionParser(5*(6+1-(3/2))/4)
1557[info] - should succeed DoubleExpressionParser(5*(6+1-3/2)/4) even without explicit parentheses
1558[info] - should fail to parse 1*2+1-pi/2
1559[info] - should fail to parse (1?2)
1560[info] RationalExpressionParser(1)
1561[info] - should be 1
1562[info] RationalExpressionParser(1+1)
1563[info] - should be 2/1
1564[info] - should parse 1*2+1 as 3/1
1565[info] - should parse 1*2+1-3/2 as 3/2
1566[info] RationalExpressionParser(1/0)
1567[info] - should be infinite
1568[info] (
1569[info] - should fail
1570[info] - should fail 1+2=2
1571[info] IntExpressionParser(3/2)
1572[info] - should fail
1573Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1574Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
1575Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
1576[info] ComplexParserSpec:
1577[info] ComplexParser
1578[info] - should doParse
1579[info] SolutionSpec:
1580[info] Solution
1581[info] - should isPureNumber
1582[info] - should base
1583[info] - should scale
1584[info] - should branch
1585[info] - should factor
1586[info] - should isZero
1587[info] - should maybeFactor
1588[info] - should isExact
1589[info] - should signum
1590[info] - should add
1591[info] - should offset
1592[info] - should isUnity
1593[info] - should asNumber
1594[info] - should asField
1595[info] FuzzyParserSpec:
1596[info] integer
1597[info] - should parse 1
1598[info] - should parse 6
1599[info] fuzz
1600[info] - should parse (42)
1601[info] - should not parse 42
1602[info] fraction
1603[info] - should parse .42
1604[info] exponent
1605[info] - should parse E-11
1606[info] - should parse E11
1607[info] - should parse e2
1608[info] nominal
1609[info] - should parse 1
1610[info] - should parse 6.67408
1611[info] - should parse 6.67408E-11
1612[info] fuzzyRep
1613[info] - should parse 1
1614[info] partial parsing
1615[info] - should parse 6.67408(31)E−11
1616[info] fuzzyRep
1617[info] - should parse 6.67408(31)E−11
1618[info] fuzzy
1619[info] - should be Exact(1)
1620[info] - should parse 6.67408(31)E−11
1621[info] - should parse 3.1415927(01)
1622[info] - should parse 3.1415927
1623[info] - should parse 16.5[2]
1624[info] PotHolesSpec:
1625[info] PotHoles
1626[info] - should cost 0
1627[info] - should cost 1
1628[info] - should cost 3
1629[info] - should cost 8
1630[info] - should cost 15
1631[info] - should cost 16
1632[info] - should cost 10
1633[info] - should cost 11
1634[info] - should cost random
163516:02:59,767 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
163616:02:59,768 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6c0226e5 - No custom configurators were discovered as a service.
163716:02:59,768 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6c0226e5 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
163816:02:59,772 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6c0226e5 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
163916:02:59,772 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/build/repo/core/target/scala-3.8.0/test-classes/logback-test.xml]
164016:02:59,987 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/core/target/scala-3.8.0/test-classes/logback-test.xml
164116:02:59,987 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/core/target/scala-3.8.0/test-classes/logback-test.xml}
164216:02:59,987 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
164316:02:59,992 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2da0d0c4 - value "logs/Number.log" substituted for "${HOME_LOG}"
164416:02:59,997 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
164516:02:59,997 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
164616:03:00,015 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
164716:03:00,091 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
164816:03:00,091 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
164916:03:00,091 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
165016:03:00,092 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
165116:03:00,092 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
165216:03:00,098 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2da0d0c4 - value "logs/Number.log" substituted for "${HOME_LOG}"
165316:03:00,104 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1022304657 - setting totalSizeCap to 20 GB
165416:03:00,109 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1022304657 - Archive files will be limited to [10 MB] each.
165516:03:00,109 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1022304657 - Will use gz compression
165616:03:00,116 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1022304657 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
165716:03:00,118 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@78c97ac0 - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
165816:03:00,118 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@78c97ac0 - Roll-over at midnight.
165916:03:00,118 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@78c97ac0 - Setting initial period to 2026-01-13T15:02:25.754Z
166016:03:00,121 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
166116:03:00,122 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
166216:03:00,122 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
166316:03:00,122 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
166416:03:00,127 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
166516:03:00,128 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG
166616:03:00,128 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
166716:03:00,128 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG
166816:03:00,128 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
166916:03:00,128 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@5015e32 - End of configuration.
167016:03:00,129 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2e0c88a6 - Registering current configuration as safe fallback point
167116:03:00,132 |-INFO in ch.qos.logback.classic.util.ContextInitializer@6c0226e5 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 360 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY
1672
1673Some(-1)
16740
16751
1676∞
1677BiFunction{𝛗 + 1}
1678phi2 = 2.6180339887498950(47)
1679psi2 = 0.3819660112501051(67)
1680[info] CatsKernelSpec:
1681[info] Cats instances for Rational
1682[info] - should provide Eq/Order/Show for Rational
1683[info] - should sort Rational via Cats Order (bridged to scala Ordering)
1684[info] Cats instances for ExactNumber
1685[info] - should provide Eq/Order/Show for ExactNumber
1686[info] Cats instances for Number
1687[info] - should provide PartialOrder/Eq/Show for Number
1688[info] - should Eq[Number] structural: Fuzzy same triple are equal !!! IGNORED !!!
1689[info] - should Eq[Number] structural: different fuzz not equal !!! IGNORED !!!
1690[info] - should Eq[Number] structural: different factor not equal !!! IGNORED !!!
1691[info] - should Eq[Number]/PartialOrder[Number] respect Gaussian fuzz !!! IGNORED !!!
1692[info] - should Eq[Number] structural: reflexive for Fuzzy !!! IGNORED !!!
1693[info] - should Eq[Number] structural: NaN equals NaN
1694[info] Cats instances for Field
1695[info] - should provide PartialOrder/Eq/Show for Field
1696[info] Cats instances for Algebraic
1697[info] - should provide PartialOrder/Eq/Show for Algebraic !!! IGNORED !!!
1698[info] Cats instances for Expression
1699[info] - should provide PartialOrder/Eq/Show for Expression
1700[info] ErrorCommutativeMonoidLawSpec:
1701[info] - AbsSigma.commutativeMonoid.associative
1702[info] - AbsSigma.commutativeMonoid.collect0
1703[info] - AbsSigma.commutativeMonoid.combine all
1704[info] - AbsSigma.commutativeMonoid.combineAllOption
1705[info] - AbsSigma.commutativeMonoid.commutative
1706[info] - AbsSigma.commutativeMonoid.intercalateCombineAllOption
1707[info] - AbsSigma.commutativeMonoid.intercalateIntercalates
1708[info] - AbsSigma.commutativeMonoid.intercalateRepeat1
1709[info] - AbsSigma.commutativeMonoid.intercalateRepeat2
1710[info] - AbsSigma.commutativeMonoid.is id
1711[info] - AbsSigma.commutativeMonoid.left identity
1712[info] - AbsSigma.commutativeMonoid.repeat0
1713[info] - AbsSigma.commutativeMonoid.repeat1
1714[info] - AbsSigma.commutativeMonoid.repeat2
1715[info] - AbsSigma.commutativeMonoid.reverseCombineAllOption
1716[info] - AbsSigma.commutativeMonoid.reverseRepeat1
1717[info] - AbsSigma.commutativeMonoid.reverseRepeat2
1718[info] - AbsSigma.commutativeMonoid.reverseReverses
1719[info] - AbsSigma.commutativeMonoid.right identity
1720[info] BenchmarkSpec:
1721[info] Benchmark
1722[info] - should do 100rRepetitions !!! IGNORED !!!
1723[info] PrimeSpec:
1724[info] Prime
1725[info] - should bits
1726[info] - should isProbablePrime
1727[info] - should isProbableOddPrime
1728[info] - should fermat
1729[info] - should implement Lucas for 7 and 71
1730[info] - should implement primeFactors
1731[info] - should implement primeFactorMultiplicity
1732[info] - should implement Lucas()
1733[info] - should implement testPrimitiveRoot
1734[info] - should implement primitiveRoot
1735[info] - should multiplicativeInverse
1736[info] - should multiplicativeInverse1
1737[info] - should multiplicativeInverse2
1738[info] - should validated
1739[info] - should next
1740[info] - should create primes from Mersenne numbers
1741[info] - should create (potential) Mersenne numbers
1742[info] - should get first 100 primes
1743[info] - should get first 1000 primes
1744[info] - should get primes < 1000
1745[info] - should test MillerRabin
1746[info] - should totient
1747[info] - should form toString correctly
1748[info] - should get the reciprocal period
1749[info] InfiniteProductSpec:
1750[info] Leibniz
1751[info] - should asLazyList
1752[info] - should apply
1753[info] - should toDouble
1754[info] Euler
1755[info] - should asLazyList
1756[info] - should apply
1757[info] - should toDouble
1758[info] VarianceSpec:
1759[info] sumOfSquares
1760[info] - should work (pair)
1761[info] - should work for first (5) integers
1762[info] - should sum (n) squares according to formula
1763[info] rootSumSquares
1764[info] - should work (pair)
1765[info] - should work for first (5) integers
1766[info] - should sum (n) squares according to formula
1767[info] rootMeanSquare
1768[info] - should work (pair)
1769[info] - should work for first (5) integers
1770[info] - should sum (n) squares according to formula
1771[info] NewtonSpec:
1772[info] Newton
1773[info] - should solve x = cos(x)
1774[info] - should solve x * x = 2
1775[info] Newton Worksheet
1776[info] - should worksheet
1777[info] FuzzySpec:
1778[info] Fuzzy
1779[info] - should same
1780[info] FuzzyNumberSpec:
1781[info] create
1782[info] - should yield 1 with absolute fuzz
1783[info] - should yield 1 with relative fuzz
1784[info] Fuzz.toString
1785[info] - should work for 1/0.5/Box
1786[info] - should work for 1/0.005/Box
1787[info] - should work for 1/0.5/Gaussian
1788[info] - should work for 1/0.005/Gaussian
1789[info] parse
1790[info] - should work for 1.*
1791[info] - should work for 1.00(5)
1792[info] - should work for 1.000(50)
1793[info] - should work for 1.00(05)
1794[info] - should parse gamma
1795[info] - should parse phi
1796[info] - should parse G
1797[info] - should parse alpha
1798[info] - should parse mu
1799[info] plus
1800[info] - should add 1 and 2
1801[info] - should add 1.* and 2
1802[info] - should add 1 and 2.*
1803[info] - should add 1.* and 2.*
1804[info] times
1805[info] - should multiply 1 and 2
1806[info] - should multiply 1.* and 2
1807[info] - should multiply 1 and 2.*
1808[info] - should multiply 1.* and 2.*
1809[info] - should multiply 1.* and 2.* with normalization of fuzz
1810[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Box))
1811[info] -
1812[info] - should work for 1.*
1813[info] negate
1814[info] - should work for 1.*
1815[info] power
1816[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Box))
1817[info] - should work for (fuzzy 3)∧2 (i.e. an constant Int power (Gaussian))
1818[info] - should work for 2**2 (i.e. an constant Int power)
1819[info] - should work for 2**2 (i.e. a fuzzy Number power)
1820[info] compare
1821[info] - should find 1.* equivalent to 1.*
1822[info] - should find 1 smaller than 2
1823[info] sin
1824[info] - should work for 0
1825[info] - should work for pi
1826[info] - should work for 2pi
1827[info] - should work for pi/2
1828[info] - should work for 3pi/2
1829[info] - should work for 3.141592653589793
1830[info] - should work for 3.141592653589793 backwards
1831[info] cos
1832[info] - should work for 0
1833[info] - should work for pi
1834[info] - should work for 2pi
1835[info] - should work for pi/2
1836[info] - should work for 3pi/2
1837[info] - should work for 3.141592653589793
1838[info] - should work for 3.141592653589793 backwards
1839[info] tan
1840[info] - should work for 0
1841[info] - should work for pi
1842[info] - should work for 2pi
1843[info] - should work for pi/2
1844[info] - should work for 3pi/2
1845[info] - should work for 3.141592653589793
1846[info] - should work for 3.141592653589793 backwards
1847[info] exp
1848[info] - should work for non-exact 1
1849[info] compare
1850[info] - should work for 1, 1
1851[info] same
1852[info] - should think 1 and 1 are the same
1853[info] - should think pi and pi are the same
1854[info] isProbablyZero
1855[info] - should think pi and pi are the same (1)
1856[info] - should think pi and pi are the same (2)
1857[info] make(Fuzziness)
1858[info] - should work
1859[info] - should implement asComparedWith
1860[info] foucault
1861[info] - should do part of the calculation
1862[info] - should calculate length of Foucault's pendulum but with relative box fuzziness
1863[info] - should calculate length of Foucault's pendulum
1864[info] - should calculate the acceleration due to gravity based on the London Foucault's pendulum
1865[info] LazyNumberFuzzySpec:
1866[info] fuzz1
1867[info] - should be 1
1868[info] - should be -1 after negate
1869[info] - should be 0 after minus(1)
1870[info] fuzz2
1871[info] - should be 2
1872[info] - should be 4 when multiplied by itself
1873[info] - should be 1 when divided by itself
1874[info] - should be 3 when added to one
1875[info] - should be 6 when added to one and three
1876[info] - should be 3 when added to one by explicit function
1877[info] fuzzy for comprehension
1878[info] - should give 4
1879[info] fuzzy composition
1880[info] - should work *** FAILED ***
1881[info] Exact: 2.718281828459045 was not equal to Exact: 2.7182818284590455 (LazyNumberFuzzySpec.scala:82)
1882[info] - should work with fuzzy 1 *** FAILED ***
1883[info] Bounded: 2.718281828459045, 0.001 was not equal to Bounded: 2.7182818284590455, 0.001 (LazyNumberFuzzySpec.scala:89)
1884[info] - should give 8
1885[info] FactorSpec:
1886[info] Factor
1887[info] - should add pure numbers
1888[info] - should add roots
1889[info] - should multiply PureNumber by Other
1890[info] - should multiply Other by PureNumber
1891[info] - should multiply Other by Ln
1892[info] - should multiply Other by NthRoot
1893[info] - should handle percentages
1894[info] - should raise
1895[info] - should clean
1896Seed length: 3457
1897[info] - should convert
1898800
1899[info] - should isAdditive
1900[info] - should isA
1901[info] - should modulate
1902[info] - should render
1903[info] - should sPiAlt2
1904[info] - should sPiAlt1
1905[info] - should sPiAlt0
1906[info] - should apply
1907[info] - should sPi
1908[info] - should sE and sEi
1909[info] RealAlgebraicInstancesSpec:
1910[info] realTruncatedDivisionCRing (tquot/tmod/tquotMod + order)
1911[info] - should truncate quotient toward zero and compute remainder !!! IGNORED !!!
1912[info] - should expose an order consistent with Real.RealIsOrdering
1913[info] RealSpec:
1914[info] create
1915[info] - should yield Right(1)
1916[info] - should yield Right(1, Radian)
1917[info] toString
1918[info] - should yield 1
1919[info] - should work for Pi
1920[info] - should work for E
1921[info] - should work for E∧2
1922[info] - should work for E∧3
1923[info] - should work for E∧4
1924[info] - should work for E∧10
1925[info] render
1926[info] - should work for square root E
1927[info] toDouble
1928[info] - should yield 1
1929[info] apply
1930[info] - should work for "1"
1931[info] - should work for "𝛑"
1932[info] - should work for 1
1933[info] asReal
1934[info] - should work for real
1935[info] - should work for number
1936[info] plus
1937[info] - should add 1 and 2
1938[info] - should add 1 to pi
1939[info] - should add 1 to e
1940[info] minus
1941[info] - should negate 1
1942[info] subtract
1943[info] - should subtract 1 from 2
1944[info] multiply
1945[info] - should multiply 1 and 2
1946[info] invert
1947[info] - should invert 1
1948[info] division
1949[info] - should divide 1 by 2
1950[info] power
1951[info] - should work for squaring PureNumber
1952[info] - should work for squaring SquareRoot
1953[info] sqrt
1954[info] - should work for easy ints
1955[info] sin
1956[info] - should be zero for pi
1957[info] - should work for 0
1958[info] - should work for Radian/2
1959[info] - should work for Radian/6
1960[info] - should work for Radian/3
1961[info] - should work for Radian/4
1962[info] - should work for One
1963[info] cos
1964[info] - should be zero for pi
1965[info] - should work for 0
1966[info] - should work for Pi/2
1967[info] - should work for Pi/3
1968[info] - should work for Pi/6
1969[info] tan
1970[info] - should be zero for 0
1971[info] - should be zero for pi
1972[info] - should work for Pi/2
1973[info] - should work for Pi/3
1974[info] - should work for Pi/6
1975[info] atan
1976[info] - should be 0Pi for 0/1
1977[info] - should be pi/4 for 1/1
1978[info] - should be 0Pi for 0/-1
1979[info] - should be Pi / 3 for root(3)
1980[info] - should be 7 Pi / 6 for 1/-root(3)
1981[info] - should be 11 Pi / 6 for -1/2
1982[info] - should be 3 pi / 4 for 1/-1
1983[info] - should evaluate atan of 1 over -0
1984[info] - should evaluate atan of -1 over 0
1985[info] exp
1986[info] - should be E for 1
1987[info] - should be 1 for 0
1988[info] - should be e∧2 for 2
1989[info] ln
1990[info] - should be 1 for E
1991[info] - should be 0 for 1
1992[info] - should be 2 for E∧2
1993[info] compare
1994[info] - should work for 1, 1
1995[info] - should work for 1, 2
1996[info] - should work for 2, 1
1997[info] Numeric toInt
1998[info] - should work for 1
1999[info] - should work for BigInt 1
2000[info] - should work for 1.0
2001[info] Numeric toLong
2002[info] - should work for 1
2003[info] - should work for 1.0
2004[info] Numeric toDouble
2005[info] - should work for 1
2006[info] Numeric plus
2007[info] - should work for 1
2008[info] - should work for 1.0
2009[info] Numeric minus
2010[info] - should work for 1
2011[info] - should work for 1.0
2012[info] Numeric fromInt
2013[info] - should work for -1
2014[info] - should work for 0
2015[info] - should work for 1
2016[info] Numeric parseString
2017[info] - should work for -1
2018[info] - should work for 0
2019[info] - should work for 1
2020[info] - should work for 6.67430(15)E-11
2021[info] Real div
2022[info] - should work for 1/2
2023[info] - should work for 2/2
2024[info] - should work for 2/3
2025[info] RealOps
2026[info] - should work for 2 + Real(3)
2027[info] - should work for 2 * Real(3)
2028[info] - should work for 1 :/ 2
2029[info] multiply
2030[info] - should work for pure numbers
2031[info] ComplexAlgebraicInstancesSpec:
2032[info] complexCommutativeRing (zero/one/fromInt/plus/times/negate)
2033[info] - should provide zero/one/fromInt/plus/times/negate
2034[info] RootSpec:
2035[info] Root
2036[info] - should work from first principles
2037[info] - should evaluate Phi correctly
2038[info] - should evaluate Phi∧2 correctly
2039[info] - should evaluate Phi + Psi
2040[info] - should evaluate Phi * Psi
2041[info] - should evaluate Phi + Phi
2042[info] - should evaluate 2 * Phi
2043[info] - should evaluate 2 + Phi
2044[info] - should mind its ps and qs
2045[info] - should materialize
2046[info] - should evaluateAsIs
2047[info] - should maybeFactor
2048[info] - should isExact
2049[info] - should render
2050[info] - should asNumber
2051[info] - should depth
2052[info] - should discriminant
2053[info] - should isAtomic
2054[info] - should evaluate(AnyContext)
2055[info] AggregateSpec:
2056[info] Aggregate
2057[info] - should render
2058[info] - should depth
2059[info] - should evaluate 1
2060[info] - should evaluate 2
2061[info] - should evaluate 3
2062[info] - should simplifyComponents {2 * -1}+{2 + 1}+{-1 * 5}+2
2063[info] - should simplify {2 * -1}+{2 + 1}+{-1 * 5}+2
2064[info] FuzzSpec:
2065[info] Gaussian
2066[info] - should sum with self
2067[info] - should not multiply with self
2068[info] Bounded
2069[info] - should sum with self
2070[info] - should multiply with self
2071[info] - should implement negate
2072[info] - should implement inverse
2073[info] - should implement power(Int)
2074[info] - should implement power(Double)
2075[info] - should implement power(Fuzzy)
2076[info] fuzzy(String)
2077[info] - should parse 1
2078[info] - should parse 6.67408(31)E−11
2079[info] - should parse 3.1415927(01)
2080[info] - should parse 3.1415927
2081[info] RationalParserSpec:
2082[info] simpleNumber
2083[info] - should parse 1
2084[info] - should reject 1
2085[info] rational
2086[info] - should parse 1/2
2087[info] realNumber
2088[info] - should parse 3.1415927
2089[info] - should parse 3.1415927E1
2090[info] number
2091[info] - should parse 1/2
2092[info] - should parse 1
2093[info] - should parse 3.1415927
2094[info] FibonacciSpec:
2095[info] Fibonacci
2096[info] - should psi
2097[info] - should phi
2098[info] - should render phi+1 as a Field
2099[info] - should render phi+1 as an Expression
2100[info] - should fib0
2101[info] - should fib1
2102[info] - should fib2
2103[info] - should psiFuzzy
2104[info] - should fibFuzzy
2105[info] - should fib
21063
210722/7
2108333/106
2109355/113
2110103993/33102
2111104348/33215
2112208341/66317
2113312689/99532
2114833719/265381
21151146408/364913
2116ratio = 104348/33215
2117ratio = 104348/33215
2118[info] ContinuedFractionSpec:
2119[info] ConFrac.take
2120[info] - should create singleton simple ConFrac
2121[info] - should create doubleton simple ConFrac
2122[info] ConFrac.takeWhile
2123[info] - should phi ConFrac.simple precise to 1E-6
2124[info] - should fail to evaluate phi ConFrac precise to 1E-6
2125[info] ConFrac.convergents
2126[info] - should get convergents from simple ConFrac
2127[info] - should get convergents from simple finite expansion for pi
2128[info] - should get convergents for e
2129[info] - should get convergents for root 2
2130[info] ConFrac.coefficients
2131[info] - should work on finite simple ConFrac
2132[info] - should work on very short finite simple ConFrac
2133[info] - should work on infinite simple ConFrac
2134[info] - should work on finite general ConFrac
2135[info] ConFrac.reverseCoefficients
2136[info] - should work on finite simple ConFrac
2137[info] ConFrac.toNominalRational
2138[info] - should implement simple toNominalRational
2139[info] - should implement simple toRationalOption(Rational)
2140[info] - should implement simple finite toRationalOption(Rational)
2141[info] - should implement simple toNominalRational(Double)
2142[info] - should define implement coefficients for FourOverPiLeibniz
2143[info] ConFrac.phi
2144[info] - should toDouble
2145[info] - should implement toDouble(Double)
2146[info] ConFrac.e
2147[info] - should define ConFrac
2148[info] ConFrac.PiSimple
2149[info] - should define ConFrac
2150[info] ConFrac.root2
2151[info] - should define ConFrac
2152[info] - should solve the Strand magazine puzzle
2153[info] ConFrac.root3
2154[info] - should define ConFrac
2155[info] ConFrac.root19
2156[info] - should define ConFrac
2157[info] - should toDouble
2158[info] - should implement toDouble(Double)
2159[info] ConFrac.unapply
2160[info] - should work
2161[info] ContinuedFraction.prefix
2162[info] - should create singleton ContinuedFraction
2163[info] ContinuedFraction.takeWhile
2164[info] - should phi ContinuedFraction precise to 1E-6
2165[info] ContinuedFraction.toNominalRational
2166[info] - should implement toNominalRational
2167[info] - should implement toNominalRational(Double)
2168[info] ContinuedFraction.phi
2169[info] - should toDouble
2170[info] - should implement toDouble(Double)
2171[info] ContinuedFraction.e
2172[info] - should define ContinuedFraction
2173[info] ContinuedFraction.pi
2174[info] - should define ContinuedFraction.PiSimple
2175[info] - should get ContinuedFraction.PiSimple with precision 1 in 10^10
2176[info] - should define ContinuedFraction.PiSomayaji
2177[info] - should define ContinuedFraction.PiA
2178[info] ContinuedFraction.root2
2179[info] - should define ContinuedFraction
2180[info] ContinuedFraction.root3
2181[info] - should define ContinuedFraction
2182[info] ContinuedFraction.root19
2183[info] - should define ContinuedFraction
2184[info] - should toDouble
2185[info] - should implement toDouble(Double)
2186[info] MillParserSpec:
2187[info] MillParser
2188[info] - should parse monadicOperator
2189[info] - should parse dyadicOperator
2190[info] - should parse number
2191[info] - should parse dyadicTerm
2192[info] - should parse monadicTerm (1)
2193[info] - should parse monadicTerm (2)
2194[info] - should parse anadicTerm
2195[info] - should parse term
2196[info] - should parse mill
2197[info] - should parseMill
2198[info] - should parse: 73 24 <> -
2199[info] ShuntingYardParserSpec:
2200[info] ShuntingYardParser
2201[info] - should parseInfix 1
2202[info] - should parseInfix 1 + 2
2203[info] - should parseInfix ( 1 + 2 ) * 3
2204[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
2205[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
2206[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
2207[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
2208[info] - should parse Infix and evaluate: 9
2209[info] - should parse Infix and evaluate: 0.5
2210[info] - should parse Infix and evaluate: sqrt(3)
2211[info] - should parse Infix and evaluate: sin(pi)
2212[info] - should parse Infix and evaluate: sin(pi/2)
2213[info] - should shuntingYard
2214[info] - should shuntingYard w/o spaces
2215[info] - should operator
2216Standard: 33.5
2217Karatsuba: 7.2
221878.50746268656717
2219phi = 1.6180339887498950(47), expected = 1.6180339887498950*
2220psi = -0.6180339887498949(67)
2221𝛗
2222solution = Solution: -0.5 + + √1.25, expected = Solution: -0.5 + + √1.25
2223solution = 0.6180339887498949(37)
2224psi.abs = Some(Some(0.6180339887498949)), expected = Some(Some(0.6180339887498949))
2225Series: 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%, ...
2226actual = Solution: 1 + + √5, expected = 3.236067977499790(42)
2227phi = 𝛗
2228phi add Real(one) = 2.6180339887498950(55)
2229phi = 𝛗
2230phi add Real(one) = 0.6180339887498949(47)
2231phi = 𝛗
2232phi add Real(one) = 3.6180339887498950(55)
2233phi=𝛗; phi.power(1) = 𝛗
2234phi∧3 = 4.23606797749979±0.0000000000017%. expected=Solution: 2 + + √5
2235expectedValue = 4.2360679774997900*
2236phi∧3 = 6.854101966249686±0.0000000000014%. expected=Solution: 3.5 + + √11.25
2237equation = Quadratic Equation: x∧2 - 1x - 1 = 0
2238quadratic (transformed equation) = Quadratic Equation: x∧2 - 3x + 1 = 0
2239equation = Quadratic Equation: x∧2 - 1x - 1 = 0
2240Solution: 1.5 + + √1.25
2241Solution: 1.5 + - √1.25
2242quadratic.value = Solution: 1.5 + + √1.25
22431.4953487812212205
2244Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
2245Warning: Polar r is zero: ComplexPolar(0,𝛑,1)
2246Warning: Polar r is zero: ComplexPolar(0,-𝛑,1)
2247simplified = Solution: -0.5 + + √1.25
2248[info] RationalAlgebraicInstancesLawSpec:
2249[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.associativity
2250[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.can serialize and deserialize
2251[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAll
2252[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAll(Nil) == id
2253[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineAllOption
2254[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 0) == id
2255[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 1) == a
2256[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.combineN(a, 2) == a |+| a
2257[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.commutative
2258[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.consistent remove
2259[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.isEmpty
2260[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.left inverse
2261[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.leftIdentity
2262[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.right inverse
2263[info] - Rational.commutative ring.additive:additive commutative group.base:commutative group.rightIdentity
2264[info] - Rational.commutative ring.additive:additive commutative group.can serialize and deserialize
2265[info] - Rational.commutative ring.additive:additive commutative group.consistent subtract
2266[info] - Rational.commutative ring.additive:additive commutative group.sum(Nil) == zero
2267[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 0) == zero
2268[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 1) == a
2269[info] - Rational.commutative ring.additive:additive commutative group.sumN(a, 2) == a + a
2270[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.associativity
2271[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.can serialize and deserialize
2272[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAll
2273[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAll(Nil) == id
2274[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineAllOption
2275[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 0) == id
2276[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 1) == a
2277[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.combineN(a, 2) == a |+| a
2278[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.commutative
2279[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.isEmpty
2280[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.leftIdentity
2281[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.base:commutative monoid.rightIdentity
2282[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.can serialize and deserialize
2283[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 0) == one
2284[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 1) == a
2285[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.pow(a, 2) == a * a
2286[info] - Rational.commutative ring.multiplicative:multiplicative commutative monoid.product(Nil) == one
2287[info] - Rational.commutative ring.distributive
2288[info] - Rational.commutative ring.fromBigInt
2289[info] - Rational.commutative ring.fromInt
2290[info] GoldbachSpec:
2291[info] Goldbach
2292[info] - should goldbach success
2293[info] - should goldbach fail
2294[info] MillSpec:
2295[info] Mill
2296[info] - should pop
2297[info] - should push
2298[info] - should iterate
2299[info] - should empty
2300[info] - should apply()
2301[info] - should apply(1)
2302[info] - should process empty list of Items
2303[info] - should create a Mill from list of Items: 42, 37, +
2304[info] - should accept list of Items: 42, 37, +
2305[info] - should process list of Items: 42, 37, +
2306[info] - should process list of Items: 42, 37, -
2307[info] - should process list of Items with Swap: 42, 37, Swap, -
2308[info] - should process list of Items with Noop: 42, 37, +, Noop
2309[info] - should process list of Items with Clr: 42, 37, +, c
2310[info] - should process Noop
2311[info] - should process list of Items: 3, 2, ∧
2312[info] - should process list of Items: 7, chs
2313[info] - should process list of Items: 42, 37, +, 2, *
2314[info] - should process list of Items: 2, inv
2315[info] - should process a String: 42 37 + 2 *
2316[info] parse and evaluate
2317[info] - should parse and evaluate: 2 37 + 2 *
2318[info] - should parse and evaluate: 2 3 ∧
2319[info] - should parse and evaluate: 2 3 /
2320[info] - should parse and evaluate: 2 v
2321[info] - should parse and evaluate: 73 24 <> -
2322[info] - should parse and evaluate: 𝛑 cos
2323[info] - should parse and evaluate: 𝛑 sin
2324[info] - should parse and evaluate: 𝜀 ln
2325[info] - should parse and evaluate: 2 exp
2326[info] - should parse and evaluate: 12 34 + 56 + 78 - 90 + 12 -
2327[info] - should parse and evaluate: 3696
2328[info] - should parse and evaluate: 207
2329[info] - should parse and evaluate: 207 with leading space
2330[info] - should parse and evaluate: 207 with trailing space
2331[info] - should parse and evaluate: 9
2332[info] - should parse 3 5 + 7 2 – *
2333[info] - should parse 3 4 2 × 1 5 − 2 3 ∧ ∧ ÷ +
2334[info] - should parse and evaluate: 220xxxx with trailing space
2335[info] - should parse infix
2336[info] BumperatorSpec:
2337[info] Bumperator
2338[info] - should hasNext 0
2339[info] - should hasNext 1
2340[info] - should hasNext 2
2341[info] - should next 1
2342[info] - should toList 1
2343[info] ConstantsSpec:
2344[info] constants
2345[info] - should have root2
2346[info] - should have root2 a
2347[info] - should have root3
2348[info] - should have root5
2349[info] - should have G
2350[info] - should have gamma
2351[info] - should have avagadro
2352[info] - should have boltzmann
2353[info] - should have planck
2354[info] - should have c
2355[info] - should have mu
2356[info] - should have phi
2357[info] - should have alpha
2358[info] toString
2359[info] - should work for G
2360[info] LazyFunctionSpec:
2361[info] Compose
2362[info] - should yield identity result when complementary functions composed
2363[info] - should form Identity when complementary functions provided
2364[info] - should form Composed when non-complementary functions provided (1)
2365[info] - should form Composed when non-complementary functions provided (2)
2366[info] NumberSetSpec:
2367[info] NumberSet
2368[info] - should maybeSuperSet
2369[info] - should isMember (Number)
2370[info] - should isMember (Real)
2371[info] - should belongsToSetExclusively
2372[info] - should not belongsToSetExclusively
2373[info] NumberLike
2374[info] - should memberOf
2375[info] - should memberOf(set)
2376[info] InfiniteSumSpec:
2377[info] harmonic series
2378[info] - should asLazyList
2379[info] - should apply
2380[info] - should toDouble
2381[info] Leibniz
2382[info] - should asLazyList
2383[info] - should apply
2384[info] - should toDouble
2385[info] Euler
2386[info] - should asLazyList
2387[info] - should apply
2388[info] - should toDouble
2389[info] Stefan-Boltzmann
2390[info] - should asLazyList
2391[info] - should apply
2392[info] - should toDouble
2393[info] FuzzinessSpec:
2394[info] generalNumber
2395[info] - should parse 1.
2396[info] - should parse 1.0
2397[info] - should parse 1.00
2398[info] - should parse 1.000 as fuzzy
2399[info] - should parse G as fuzzy
2400[info] maybeNumber
2401[info] - should
2402[info] number
2403[info] - should
2404[info] StringParser
2405[info] - should
2406[info] fuzz
2407[info] - should parse *
2408[info] - should parse ...
2409[info] - should parse (5)
2410[info] - should parse (15)
2411[info] - should fail to parse (315)
2412[info] - should fail to parse ..
2413[info] FuzzOps
2414[info] - should understand ...
2415[info] exponent
2416[info] - should parse E-11
2417[info] numberWithFuzziness
2418[info] - should parse 1.0*
2419[info] - should parse 1.0...
2420[info] - should parse G
2421[info] - should parse alpha
2422[info] Fuzz.toString
2423[info] - should work for 1/0.5/Box
2424[info] - should work for 1/0.005/Box
2425[info] - should work for 1/0.5/Gaussian
2426[info] - should work for 1/0.005/Gaussian
2427[info] - should work for Planck
2428[info] - should work for Avagadro
2429[info] - should work for 3.1415927
2430[info] - should work for 3.1416
2431[info] parse
2432[info] - should work for 2.*
2433[info] createFuzz
2434[info] - should work for 0
2435[info] - should work for 1
2436[info] - should work for 5
2437[info] render
2438[info] - should render Pi
2439[info] - should render Planck
2440[info] - should render Avagadro
2441[info] Box.wiggle
2442[info] - should be likely for 1.251
2443[info] Fuzziness.wiggle
2444[info] - should be likely for 1.251 (box)
2445[info] Box.wiggle
2446[info] - should be likely for 5.0040
2447[info] Gaussian.wiggle
2448[info] - should be likely for 5.0040
2449[info] - should define the following ranges
2450[info] - should be likely.
2451[info] probability
2452[info] - should work for a box
2453[info] - should work for a Gaussian
2454[info] map
2455[info] - should work
2456[info] power
2457[info] - should work for e∧x
2458[info] fuzz
2459[info] - should work
2460[info] RealAlgebraicInstancesLawSpec:
2461[info] NumberParserSpec:
2462[info] percentage
2463[info] - should parse 10%
2464[info] - should parse 10.35%
2465[info] - should parse 10.352%
2466[info] degree
2467[info] - should parse 180°
2468[info] - should parse -180°
2469[info] - should parse 0°
2470[info] numberWithFuzziness
2471[info] - should parse 1.0*
2472[info] - should reject 1.0 *
2473[info] - should parse 1.*
2474[info] - should reject 1.*
2475[info] - should parse 3.1415927*
2476[info] - should parse 3.1415927...
2477[info] - should parse 3.1415927*E1
2478[info] - should reject 3.1415927* E1
2479[info] - should parse 1.00(5)
2480[info] - should reject 1.00 (5)
2481[info] generalNumber
2482[info] - should parse 1.0
2483[info] - should parse 1.*
2484[info] - should work for 3.14
2485[info] - should work for 3.1415927
2486[info] - should parse 3.1415927*
2487[info] - should parse 2.9979245800E8
2488[info] - should parse 3.1415927*E1
2489[info] - should parse 1/2
2490[info] - should work for 1.00(5)
2491[info] fuzz
2492[info] - should parse (17)
2493[info] - should parse *
2494[info] number
2495[info] - should parse 1.*
2496[info] - should work for 3.14
2497[info] - should work for 3.1415927
2498[info] - should parse 3.1415927*
2499[info] - should parse 3.1415927*E1
2500[info] - should parse 3.141592653589793*
2501[info] - should parse 𝛑
2502[info] - should parse 1𝛑
2503[info] - should reject 1 𝛑
2504[info] realNumber
2505[info] - should parse 2.9979245800E8
2506[info] ApproximationSpec:
2507[info] Approximation
2508[info] - should solve Newton's original problem
2509[info] - should solve cosine problem
2510[info] - should solve cosine problem using Halley's method
2511[info] - should solve Newton's original problem using Halley's method
2512[info] - should solve Wikipedia example using Halley's method
2513[info] - should solve the inverse square root problem for 0.15625
2514[info] - should evaluate newtonsPolynomial
2515[info] - should evaluate newtonsDerivative
2516[info] - should evaluate newtonsSecondDerivative
2517[info] - should evaluate newtons method
2518[info] - should converged
2519[info] - should iterate
2520[info] - should delta
2521[info] - should do correction for Newton's polynomial
2522[info] - should do correction for cosine problem
2523[info] CatsKernelLawSpec:
2524[info] - Fuzziness[Double].eq.antisymmetry eq
2525[info] - Fuzziness[Double].eq.reflexivity eq
2526[info] - Fuzziness[Double].eq.symmetry eq
2527[info] - Fuzziness[Double].eq.transitivity eq
2528[info] - Fuzziness[Double].partialOrder.antisymmetry
2529[info] - Fuzziness[Double].partialOrder.antisymmetry eq
2530[info] - Fuzziness[Double].partialOrder.gt
2531[info] - Fuzziness[Double].partialOrder.gteqv
2532[info] - Fuzziness[Double].partialOrder.lt
2533[info] - Fuzziness[Double].partialOrder.partialCompare
2534[info] - Fuzziness[Double].partialOrder.pmax
2535[info] - Fuzziness[Double].partialOrder.pmin
2536[info] - Fuzziness[Double].partialOrder.reflexivity eq
2537[info] - Fuzziness[Double].partialOrder.reflexivity gt
2538[info] - Fuzziness[Double].partialOrder.reflexivity lt
2539[info] - Fuzziness[Double].partialOrder.symmetry eq
2540[info] - Fuzziness[Double].partialOrder.transitivity
2541[info] - Fuzziness[Double].partialOrder.transitivity eq
2542[info] - Rational.order.antisymmetry
2543[info] - Rational.order.antisymmetry eq
2544[info] - Rational.order.compare
2545[info] - Rational.order.gt
2546[info] - Rational.order.gteqv
2547[info] - Rational.order.lt
2548[info] - Rational.order.max
2549[info] - Rational.order.min
2550[info] - Rational.order.partialCompare
2551[info] - Rational.order.pmax
2552[info] - Rational.order.pmin
2553[info] - Rational.order.reflexivity eq
2554[info] - Rational.order.reflexivity gt
2555[info] - Rational.order.reflexivity lt
2556[info] - Rational.order.symmetry eq
2557[info] - Rational.order.totality
2558[info] - Rational.order.transitivity
2559[info] - Rational.order.transitivity eq
2560[info] - ExactNumber.order.antisymmetry
2561[info] - ExactNumber.order.antisymmetry eq
2562[info] - ExactNumber.order.compare
2563[info] - ExactNumber.order.gt
2564[info] - ExactNumber.order.gteqv
2565[info] - ExactNumber.order.lt
2566[info] - ExactNumber.order.max
2567[info] - ExactNumber.order.min
2568[info] - ExactNumber.order.partialCompare
2569[info] - ExactNumber.order.pmax
2570[info] - ExactNumber.order.pmin
2571[info] - ExactNumber.order.reflexivity eq
2572[info] - ExactNumber.order.reflexivity gt
2573[info] - ExactNumber.order.reflexivity lt
2574[info] - ExactNumber.order.symmetry eq
2575[info] - ExactNumber.order.totality
2576[info] - ExactNumber.order.transitivity
2577[info] - ExactNumber.order.transitivity eq
2578[info] ComplexAlgebraicInstancesLawSpec:
2579[info] PowerSeriesSpec:
2580[info] PowerSeries
2581[info] - should apply
2582[info] TaylorSeries
2583[info] - should approximate sine about x = 0
2584[info] QuadraticSpec:
2585[info] Quadratic
2586[info] - should normalize
2587[info] - should branches
2588[info] - should isExact
2589[info] - should value 1
2590[info] - should value 2
2591[info] - should value root 2
2592[info] - should render
2593[info] - should approximation
2594[info] - should signum
2595[info] - should abs
2596[info] - should scale
2597[info] - should negate
2598[info] - should product
2599[info] - should solutionSquared
2600[info] - should invert
2601[info] - should scale phi and psi with negative number
2602[info] - should add phi
2603[info] - should add phi and psi
2604[info] - should add 1
2605[info] - should add -1
2606[info] - should add 2
2607[info] - should multiply
2608[info] - should zero
2609[info] - should one
2610[info] - should power 0
2611[info] - should power 1
2612[info] - should power 2
2613[info] - should power 3
2614[info] - should power 4
2615[info] - should transform
2616[info] - should apply(Solution) to get phi
2617[info] - should apply(ExactNumber,ExactNumber) to get phi
2618[info] RationalAlgebraicInstancesSpec:
2619[info] rationalTruncatedDivisionCRing (tquot/tmod/tquotmod + order)
2620[info] - should truncate quotient toward zero and compute remainder
2621[info] - should expose an order consistent with Rational.RationalIsOrdering
2622[info] ComplexSpec:
2623[info] Complex
2624[info] - should real
2625[info] - should imag
2626[info] - should isInfinite
2627[info] - should asNumber
2628[info] - should add1
2629[info] - should add2
2630[info] - should multiply
2631[info] - should unary_-
2632[info] - should divide
2633[info] - should - Constants
2634[info] - should - Number
2635[info] - should - ComplexPolar
2636[info] - should - ComplexCartesian
2637[info] power
2638[info] - should c1_2∧1
2639[info] - should c1_2∧2
2640[info] - should c1_2∧0
2641[info] - should c1_2∧-1
2642[info] - should c1_2∧1/2
2643[info] - should c2_0∧1/2
2644[info] - should p1_pi_2∧1
2645[info] - should p1_pi_2∧2
2646[info] - should p1_pi_2∧0
2647[info] - should p1_pi_2∧-1
2648[info] - should p1_1∧-1/2
2649[info] - should c2_0∧1/3
2650[info] - should e^i𝛑
2651[info] other
2652[info] - should modulus
2653[info] - should argument
2654[info] - should conjugate (1)
2655[info] - should conjugate (2)
2656[info] - should invert
2657[info] - should numberProduct
2658[info] - should convertToPolar
2659[info] - should convertToPolar 2
2660[info] - should convertToPolar 3
2661[info] - should convertToPolar 4
2662[info] - should check that math.atan really works 1
2663[info] - should check that math.atan really works 2
2664[info] - should check that math.atan really works 3
2665[info] - should check that math.atan really works for many fractions
2666[info] - should convertToCartesian
2667[info] render
2668[info] - should work for various Complex values
2669[info] - should work for negative polar angle
2670[info] - should work for iPi
2671[info] - should work for zero
2672[info] - should work for root 2 in c2_0∧1/2
2673[info] - should render c2_0∧1/3
2674[info] - should render root2s
2675[info] Number.asComplex
2676[info] - should work
2677[info] numberProduct
2678[info] - should work
2679[info] - should work when i is scaled by two (prefix)
2680[info] - should work when i is scaled by two (postfix)
2681[info] i
2682[info] - should render as √-1
2683[info] - should render as √-4
2684[info] - should convertToNumber
2685[info] - should scale(PureNumber)
2686[info] - should normalize i as itself
2687[info] - should normalize 11i
2688[info] C interpolator
2689[info] - should parse
2690[info] ExpressionMatchersSpec:
2691[info] value
2692[info] - should work with value on Literal
2693[info] - should work with value on One
2694[info] - should work with value on Number.one
2695[info] - should work with value on FuzzyNumber
2696[info] - should fail on non-value
2697[info] matchValue
2698[info] - should work with value 1
2699[info] |
2700[info] - should work with | 1 or 2
2701[info] matchSimpler
2702[info] - should matchSimpler 1
2703[info] - should simplifyTrivial 1
2704[info] - should handle Sum
2705[info] - should handle Product
2706[info] - should handle Power
2707[info] - should cancel -1 and - 1
2708[info] - should cancel multiplication and division
2709[info] - should simplify sqrt(7)∧2
2710[info] - should cancel 1 and - -1
2711[info] - should cancel 1 and - -1 b
2712[info] - should cancel 2 * 1/2 (a)
2713[info] - should cancel 2 * 1/2 (b)
2714[info] - should cancel ∧2 and sqrt for 7
2715[info] - should show that lazy evaluation sometimes works even when you don't use it (a)
2716[info] - should cancel multiplication and division 2
2717[info] - should cancel multiplication and division backwards
2718[info] - should cancel 1 and - -1 (a)
2719[info] - should cancel 2 and * 1/2
2720[info] - should cancel 2 * 1/2
2721[info] - should cancel ∧2 and sqrt
2722[info] - should cancel addition and subtraction of 3
2723[info] - should cancel addition and subtraction of e
2724[info] - should work for multi-levels 1
2725[info] - should work for multi-levels 2
2726[info] matchSimpler 2
2727[info] - should simplify (1+2)*(2+1)
2728[info] - should properly simplify 1 * (root3 / root3 * 3)
2729[info] - should simplify e * 2 / 2
2730[info] - should simplify root3 * 2 / 2
2731[info] - should simplify root4 * 2 / 2
2732[info] - should distribute
2733[info] - should distributeProductSum a
2734[info] - should distributeProductSum b
2735[info] - should distributeProductPower on root(3) * root(3)
2736[info] simplifyAggregate
2737[info] - should simplifyAggregate
2738[info] simplify
2739[info] - should cancel addition and subtraction (a)
2740[info] - should use multiply instead of addition
2741[info] - should work for Negate
2742[info] - should work for Negate Negate
2743[info] - should work for Reciprocal
2744[info] - should work for Reciprocal Reciprocal
2745[info] - should work for Negate Zero
2746[info] - should work for Negate MinusOne
2747[info] - should work for Reciprocal Zero
2748[info] - should work for Reciprocal One
2749[info] - should work for Reciprocal Two
2750[info] - should work for Exp Infinity
2751[info] - should work for Exp neg Infinity
2752[info] - should work for Exp Zero
2753[info] - should work for Exp One
2754[info] - should work for Ln Zero
2755[info] - should work for Ln One
2756[info] - should work for Ln e
2757[info] - should work for Sine 0
2758[info] - should work for Sine pi/2
2759[info] - should work for Sine pi
2760[info] - should work for Cosine 0
2761[info] - should work for Cosine pi/2
2762[info] - should work for Cosine pi
2763[info] complementaryTermsEliminatorAggregate
2764[info] - should eliminate * 2 / 2 in Aggregate
2765[info] - should eliminate 2 + -2 in Aggregate
2766[info] - should eliminate √3 and -√3 in Aggregate
2767[info] - should eliminate square root ∧ 2 in Aggregate
2768[info] simplifyAtomic
2769[info] - should leave atomic expression as is
2770[info] - should simplify literal expression one
2771[info] - should simplify literal expression pi
2772[info] factorsMatch
2773[info] - should match expression Sum
2774[info] - should match expression Product
2775[info] - should match expression Power
2776[info] simplify aggregate, etc.
2777[info] - should aggregate 1
2778[info] - should aggregate 2
2779[info] - should simplify aggregate 1
2780[info] - should simplify aggregate 1a
2781[info] - should simplify aggregate 2a
2782[info] - should simplify aggregate 2b
2783[info] - should simplify binary expression 3
2784[info] - should simplify aggregate 3a
2785[info] - should simplify aggregate 4a
2786[info] - should simplify aggregate 4b
2787[info] simplifyAndEvaluate (a)
2788[info] - should show ∧2 and sqrt for illustrative purposes (a)
2789[info] - should evaluate E * 2
2790[info] simplifyTerms
2791[info] - should work for BiFunction 1
2792[info] - should work for BiFunction 2
2793[info] - should work for UniFunction
2794[info] - should work for Aggregate total
2795[info] - should work for Aggregate product 1
2796[info] - should work for Aggregate product 2
2797[info] biFunctionAggregator
2798[info] - should work for 7 + 2 - 3
2799[info] - should work for 7 * 2 * -3
2800[info] biFunctionSimplifier
2801[info] - should work for square of square root
2802[info] - should work for products
2803[info] - should work for sums
2804[info] - should gather powers of 2 and * 1/2
2805[info] matchComplementary
2806[info] - should cancel plus and minus
2807[info] matchDyadicTrivial
2808[info] - should handle Sum
2809[info] - should handle Product
2810[info] - should handle Power
2811[info] - should cancel multiplication and division
2812[info] - should cancel value and reciprocal 1
2813[info] - should cancel value and reciprocal 2
2814[info] matchComplementaryExpressions
2815[info] - should work for plus and minus
2816[info] - should work for reciprocals
2817[info] matchSimplifyDyadicTermsTwoLevels
2818[info] - should match 1
2819[info] - should match 2
2820[info] biFunctionSimplifier
2821[info] - should simplify
2822[info] - should simplify √3 * -1 as -√3
2823[info] - should simplify √3 * 1 as √3
2824[info] - should simplify (√3 + 1)(√3 - 1) as 2 exactly
2825[info] - should evaluate (√3 + 1)(√3 + -1) as 2 exactly
2826[info] - should biFunctionSimplifier on (1 + -3)
2827[info] - should biFunctionSimplifier on (1 + √3)(1 - √3)
2828[info] - should simplify 1 + 2 - 2
2829[info] - should properly simplify 1 + 2 - 2 + 0
2830[info] - should simplify expressions involving square root 3
2831[info] various
2832[info] - should distributeProductSum c
2833[info] - should properly simplify 1 + root3 - root3 + 0
2834[info] - should properly simplify (1 + root3) + (zero - root3)
2835[info] - should properly simplify (1 * root3) * (3 / root3)
2836[info] - should simplify 2 root(3) all squared
2837[info] value with logging
2838[info] - should work with value on Literal
2839[info] - should work with value on One
2840[info] - should work with value on Number.one
2841[info] - should work with value on FuzzyNumber
2842[info] - should fail on non-value
2843[info] biFunctionTransformer (2)
2844[info] - should simplify 1 + 1
2845[info] - should simplify pi + pi
2846[info] - should simplify 1 + 0
2847[info] - should fail to simplify 1 + pi
2848[info] - should simplify 1 + -1
2849[info] - should simplify 1 * 1
2850[info] - should simplify pi * pi
2851[info] - should simplify 1 * 0
2852[info] - should simplify 1 * -1
2853[info] - should simplify 2 ∧ -1
2854[info] - should fail to simplify 2 ∧ 1/2
2855[info] evaluateMonadicDuple
2856[info] - should simplify E
2857[info] - should simplify ln(E)
2858[info] - should simplify ln(1)
2859[info] - should simplify ln(-1)
2860[info] matchSimplifyBiFunction
2861[info] - should simplify multiple similar ops
2862[info] two levels
2863[info] - should get 0 from -√3 + √3
2864[info] - should get 0 from √3 + -√3
2865[info] - should get 1 from 1/√3 * √3
2866[info] - should simplify -1 * √3 as negate(√3)
2867[info] - should simplify √3 * -1 as negate(√3)
2868[info] - should simplify various
2869[info] - should simplify root3 * 2 / 2
2870[info] matchAndCollectTwoDyadicLevels
2871[info] - should work for √3 * √3
2872[info] - should work for √3 + -√3
2873[info] - should work for (π + 1) * (π - 1)
2874[info] NumberLikeSpec:
2875[info] NumberLike
2876[info] - should asJavaNumber
2877[info] - should asNumber
2878[info] - should maybeFactor
2879[info] - should isExact
2880[info] - should memberOf
2881[info] - should render
2882[info] FieldSpec:
2883[info] Field
2884[info] - should isExact
2885[info] - should multiply i by itself correctly
2886[info] - should add
2887[info] - should take the natural log of i
2888[info] - should take the natural log of 2
2889[info] ExpressionSpec:
2890[info] evaluate
2891[info] - should evaluate 1 + -1
2892[info] - should evaluate 1 * -1
2893[info] - should evaluate i * 2
2894[info] parse
2895[info] - should parse 1
2896[info] - should parse and evaluate sqrt(3)
2897[info] - should parse and evaluate half
2898[info] ExpressionMonoFunction
2899[info] - should work for Negate
2900[info] - should work for Reciprocal
2901[info] - should work for Exp
2902[info] - should work for Ln
2903[info] - should work for Sine
2904[info] - should work for Cosine
2905[info] evaluateAsIs for UniFunction
2906[info] - should work for Exp(1)
2907[info] - should work for Reciprocal
2908[info] - should work for Ln(-1)
2909[info] materialize UniFunction
2910[info] - should work for Exp(1)
2911[info] - should work for Reciprocal
2912[info] - should work for Exp(Ln(2))
2913[info] Expression
2914[info] - should simplifyAndEvaluate
2915[info] - should render
2916[info] - should evaluate 3 5 + 7 2 – *
2917[info] ExpressionOps
2918[info] - should evaluate +
2919[info] - should evaluate -
2920[info] - should evaluate *
2921[info] - should evaluate /
2922[info] - should evaluate ∧ 2
2923[info] - should evaluate sqrt 36
2924[info] - should evaluate sin pi/2
2925[info] - should evaluate atan
2926[info] - should evaluate log 2
2927[info] - should evaluate log e
2928[info] - should evaluate log 10
2929[info] - should fail to evaluate log 1 x or log 0 x
2930[info] - should evaluate ln E
2931[info] - should evaluate ln 2E
2932[info] - should evaluate xxx
2933[info] - should evaluate xxx 2
2934[info] toString
2935[info] - should work for (sqrt 7)∧2
2936[info] various operations
2937[info] - should evaluate E * 2
2938[info] isExact
2939[info] - should be true for any constant Number
2940[info] - should be true for any sum of exact Numbers of the same factor (not e)
2941[info] - should be false for any product of exact Numbers and a NatLog factor (except for one)
2942[info] - should be true for product of one exact Numbers and a NatLog factor
2943[info] - should be true for product of zero exact Numbers and a NatLog factor
2944[info] depth
2945[info] - should be 1 for any atomic expression
2946[info] - should be 2 for any UniFunction expression
2947[info] - should be more than 1 for other expression
2948[info] Euler
2949[info] - should prove Euler's identity 1
2950[info] - should prove Euler's identity 2
2951[info] FieldExpression
2952[info] - should Zero be equal to zero
2953[info] - should One be equal to one
2954[info] simplifyConstant
2955[info] - should simplify biFunction expressions
2956[info] simplify
2957[info] - should simplify field expressions
2958[info] - should simplify function expressions
2959[info] - should simplify biFunction expressions
2960[info] - should simplify aggregate expressions
2961[info] - should aggregate 2
2962[info] - should evaluate e * e
2963[info] - should evaluate phi * phi
2964[info] - should evaluate 1 / phi
2965[info] - should evaluate - phi
2966[info] Sum
2967[info] - should add pi to -pi
2968[info] simplifyComposite
2969[info] - should evaluate e * e
2970[info] - should evaluate phi * phi
2971[info] InfiniteSeriesSpec:
2972[info] InfiniteSeries
2973[info] - should terms
2974[info] - should convergenceRate
2975[info] - should nTerms
2976[info] - should evaluateToTolerance 0.001
2977[info] - should evaluateToTolerance 0.00001
2978[info] - should evaluateToTolerance 0.000001
2979Some(9.980029960049940069920089900109880E-7...)
2980[info] + Rational.FromString: OK, passed 100 tests.
2981[info] + Rational.FromIntAndShort: OK, passed 100 tests.
2982[info] + Rational.Double: OK, passed 100 tests.
2983[info] + Rational.Addition: OK, passed 100 tests.
2984[info] LinearSpec:
2985[info] Linear
2986[info] - should add 1
2987[info] - should branches
2988[info] - should isExact
2989[info] - should render
2990[info] - should approximation
2991[info] - should signum
2992[info] - should abs
2993[info] - should scale
2994[info] - should negate
2995[info] - should product
2996[info] - should solutionSquared
2997[info] - should invert
2998[info] - should add 2
2999[info] - should multiply
3000[info] - should power 2
3001[info] - should apply(Solution) to get half
3002[info] ExpressionSpec:
3003[info] Expression
3004[info] - should parseToMillExpression
3005[info] ShuntingYardParser
3006[info] - should parseInfix 1
3007[info] - should parseInfix 1 + 2
3008[info] - should parseInfix ( 1 + 2 ) * 3
3009[info] - should parseInfix ( ( ( 4 + 5 ) * ( 2 + 3 ) + 6 ) / ( 8 + 7 ) ) ∧ 9
3010[info] - should parseInfix ( ( ( ( 4 + ( 4 × ( 2 / ( 1 − 5 ) ) ) ) ∧ 2 ) ∧ 3 )
3011[info] - should parseInfix 3 + 4 × 2 / ( 1 − 5 ) ∧ 2 ∧ 3
3012[info] - should parseInfix ( 1 + ( ( 2 + 3 ) * ( 4 * 5 ) ) )
3013[info] - should parse Infix and evaluate: 9
3014[info] - should parse Infix and evaluate: 0.5
3015[info] - should parse Infix and evaluate: sqrt(3)
3016[info] - should shuntingYard
3017[info] - should shuntingYard w/o spaces
3018[info] - should operator
3019[info] RootSpec:
3020[info] Root
3021[info] - should evaluateAsIs
3022[info] - should solution
3023[info] - should isExact
3024[info] - should maybeFactor
3025[info] - should render
3026[info] - should approximation
3027[info] - should maybeValue
3028[info] - should simplify
3029[info] - should isAtomic
3030[info] - should simplifyAtomic
3031[info] - should evaluate(PureNumber)
3032[info] - should evaluate(NthRoot)
3033[info] Root expressions
3034[info] - should evaluate 1 / √5
3035[info] - should evaluate phi∧2
3036[info] - should evaluate squareRoot(phi)
3037[info] - should evaluate phi + psi
3038[info] - should evaluate 2
3039[info] ExactNumberSpec:
3040[info] ExactNumber
3041[info] - should isProbablyZero
3042[info] - should isSame
3043[info] - should signum
3044[info] - should compare
3045[info] - should isZero
3046[info] - should isExact
3047[info] - should doAdd
3048[info] - should scale
3049[info] - should doPower
3050[info] - should factor
3051[info] - should render
3052[info] - should make
3053[info] - should doMultiply
3054[info] - should simplify
3055[info] - should nominalValue
3056[info] - should apply
3057[info] - should succeed with log
3058[info] - should fail with log
3059[info] NumberSpec:
3060[info] create
3061[info] - should yield Right(1)
3062[info] - should yield Left(Right(bigBigInt))
3063[info] - should yield Right(1, Fuzz)
3064[info] - should yield Right(1, Radian)
3065[info] - should yield ExactNumber(1, Euler)
3066[info] - should yield ExactNumber(1/2, Euler)
3067[info] - should yield Right(1, Radian, Fuzz)
3068[info] nominalValue
3069[info] - should yield Right(1)
3070[info] - should yield Left(Right(bigBigInt))
3071[info] toNominalRational
3072[info] - should yield Some(1)
3073[info] toString
3074[info] - should yield 1
3075[info] - should work for Pi
3076[info] - should work for E
3077[info] - should work for Radian as scalar
3078[info] - should work for E as scalar (rel fuzzy)
3079[info] - should work for 1 scaled as Radian
3080[info] - should work for E∧2
3081[info] - should work for E∧3
3082[info] - should work for E∧4
3083[info] - should work for E∧10
3084[info] - should work for square root E
3085[info] - should work for i
3086[info] - should work for e∧ix
3087[info] normalize
3088[info] - should work for E as scalar (abs fuzzy)
3089[info] - should work for E∧2 as Real
3090[info] - should work for E, SquareRoot
3091[info] - should work for NatLog, SquareRoot
3092[info] - should work for NatLog, SquareRoot approx
3093[info] - should multiply root2 and root2
3094[info] - should multiply sin by sin
3095[info] - should work for easy Rational
3096[info] toDouble
3097[info] - should yield 1
3098[info] isValid
3099[info] - should yield true for 1
3100[info] - should yield false for None
3101[info] parse
3102[info] - should work for 1
3103[info] - should work for 3/2
3104[info] - should work for 3.1415927
3105[info] - should work for BigInt
3106[info] - should work for Radian
3107[info] - should work for pi
3108[info] - should work for e
3109[info] - should fail with x
3110[info] - should fail for ""
3111[info] apply
3112[info] - should fail for ""
3113[info] - should work for "1"
3114[info] - should work for "2147483648"
3115[info] - should work for "3.1415927"
3116[info] - should work for 3.1416
3117[info] - should work for "𝛑"
3118[info] - should work for 1
3119[info] - should work for bigBigInt
3120[info] - should work for Rational(1,2)
3121[info] - should work for math.pi
3122[info] - should work for nothing
3123[info] - should work for BigDecimal(3.1415927)
3124[info] - should work for 3.1415927
3125[info] - should work for 3.1415926535897932384626433
3126[info] - should work for 0.5
3127[info] - should work for 1.23
3128[info] - should work for 1.234
3129[info] - should work for 1.23400
3130[info] - should support exact strings
3131[info] Number.parse
3132[info] - should parse boltzmann
3133[info] - should fail to parse boltzmann with alternative minus
3134[info] - should parse planck
3135[info] - should parse c
3136[info] - should parse avagadro
3137[info] FuzzOps
3138[info] - should get mu
3139[info] - should get G using FuzzStringOps
3140[info] - should get alpha
3141[info] specialize
3142[info] - should work for 1
3143[info] - should work for BigInt 1
3144[info] - should work for BigInt(1+Int.MaxValue)
3145[info] - should work for Rational(1)
3146[info] - should work for Rational.half
3147[info] - should work for 0.5
3148[info] - should work for 1.0
3149[info] - should work for nothing
3150[info] scale
3151[info] - should work for PureNumber, PureNumber
3152[info] - should work for Radian, Radian
3153[info] - should work for PureNumber, Radian
3154[info] - should work for Radian, PureNumber
3155[info] - should work for PureNumber, NatLog
3156[info] - should work for NatLog, PureNumber
3157[info] - should work for 2E, PureNumber
3158[info] - should work for 2E, PureNumber but comparing against NatLog * NatLog
3159[info] - should work for PureNumber, 2E (same as before but with parameters to === reversed
3160[info] - should work for PureNumber, 2E (same as before but using NatLog * NatLog and parameters to === reversed
3161[info] - should work for NatLog, Radian
3162[info] - should work for Radian, NatLog
3163[info] - should work for Log2, PureNumber
3164[info] - should work for Log10, PureNumber
3165[info] - should work for Log2, NatLog
3166[info] - should work for SquareRoot, PureNumber
3167[info] - should work for Root2s
3168[info] - should work for CubeRoot, PureNumber
3169[info] - should work for SquareRoot, CubeRoot
3170[info] - should work for PureNumber, SquareRoot
3171[info] alignFactors
3172[info] - should work for PureNumber, PureNumber
3173[info] - should work for PureNumber, Radian
3174[info] - should work for Radian, PureNumber
3175[info] - should work for Radian, Radian
3176[info] alignTypes
3177[info] - should work for Int,Int
3178[info] - should work for Int Int(Radian)
3179[info] - should work for Int,BigInt
3180[info] - should work for BigInt,Int
3181[info] - should work for Int,Rational
3182[info] - should work for Rational,Int
3183[info] - should work for Int,Double
3184[info] - should work for Double,Int
3185[info] - should work for Int,None
3186[info] - should work for None,Int
3187[info] - should work for BigInt,BigInt
3188[info] - should work for BigInt,Rational
3189[info] - should work for Rational,BigInt
3190[info] - should work for BigInt,Double
3191[info] - should work for Double,BigInt
3192[info] - should work for BigInt,None
3193[info] - should work for None,BigInt
3194[info] - should work for Rational,Rational
3195[info] - should work for Rational,Double
3196[info] - should work for Double,Rational
3197[info] - should work for Rational,None
3198[info] - should work for None,Rational
3199[info] - should work for Double,Double
3200[info] - should work for Double,None
3201[info] - should work for None,Double
3202[info] - should work for None,None
3203[info] plus
3204[info] - should add 1 and 2
3205[info] - should add BigInt 1 and 2
3206[info] - should add Rational 1 and 2
3207[info] - should add Double 1 and 2
3208[info] - should add Double 1 and Radian
3209[info] - should add Radian and 2Pi
3210[info] - should add 1 to pi
3211[info] - should add 1 to e
3212[info] - should add 1 to √2
3213[info] - should add 1 to √3
3214[info] - should add 1 to √5
3215[info] - should add pi to -pi
3216[info] minus
3217[info] - should negate 1
3218[info] - should negate BigInt 1
3219[info] - should negate Rational 1
3220[info] - should negate Double 1
3221[info] subtract
3222[info] - should subtract 1 from 2
3223[info] - should subtract BigInt 1 from 2
3224[info] - should subtract Rational 1 from 2
3225[info] - should subtract Double 1 from 2
3226[info] multiply
3227[info] - should multiply 1 and 2
3228[info] - should multiply BigInt 1 and 2
3229[info] - should multiply Rational 1 and 2
3230[info] - should multiply Double 1 and 2
3231[info] - should multiply 2 and Radian
3232[info] - should multiply Radian and 2
3233[info] - should multiply rational by Int
3234[info] invert
3235[info] - should invert 1
3236[info] - should invert BigInt 1
3237[info] - should invert 2
3238[info] - should invert BigInt 2
3239[info] - should invert Rational 2
3240[info] - should invert Double pi
3241[info] division
3242[info] - should divide 1 by 2
3243[info] - should divide BigInt 1 by 2
3244[info] - should divide Rational 1 by 2
3245[info] - should divide Double 1 by Double Radian
3246[info] **
3247[info] - should work for 2∧2
3248[info] power
3249[info] - should work for squaring PureNumber
3250[info] - should work for squaring SquareRoot
3251[info] - should work for squaring CubeRoot
3252[info] - should work for cubing cube-root2
3253[info] - should work for squaring NatLog
3254[info] - should work for squaring Log2
3255[info] - should power by one half
3256[info] - should sqrt
3257[info] - should power 1/2
3258[info] sqrt
3259[info] - should work for easy ints
3260[info] - should work for BigInt
3261[info] - should work for negative numbers
3262[info] sin
3263[info] - should be zero for pi
3264[info] - should work for 0
3265[info] - should be one for pi/2
3266[info] - should work for Radian/2
3267[info] - should work for Radian/6
3268[info] - should work for Radian/3
3269[info] - should work for Radian/4
3270[info] - should work for One
3271[info] - should work for 1/12
3272[info] cos
3273[info] - should be zero for pi
3274[info] - should work for 0
3275[info] - should work for Pi/2
3276[info] - should work for Pi/3
3277[info] - should work for Pi/6
3278[info] tan
3279[info] - should be zero for 0
3280[info] - should be zero for pi
3281[info] - should work for Pi/2
3282[info] - should work for Pi/3
3283[info] - should work for Pi/6
3284[info] atan
3285[info] - should be 0Pi for 0/1
3286[info] - should be pi/4 for 1/1
3287[info] - should be 0Pi for 0/-1
3288[info] - should be Pi / 3 for root(3)
3289[info] - should be 7 Pi / 6 for 1/-root(3)
3290[info] - should be 11 Pi / 6 for -1/2
3291[info] - should be 3 pi / 4 for 1/-1
3292[info] - should evaluate atan of 1 over -0
3293[info] - should evaluate atan of -1 over 0
3294[info] exp
3295[info] - should be E for 1
3296[info] - should be 1 for 0
3297[info] - should be e∧2 for 2
3298[info] ln
3299[info] - should be 1 for E
3300[info] - should be 0 for 1
3301[info] - should be 2 for E∧2
3302[info] - should be 0.69... for 2
3303[info] log
3304[info] - should be 1 for E
3305[info] - should be 0 for 1
3306[info] - should be 0.69... for 2
3307[info] - should lg 1024
3308[info] - should log exact
3309[info] toInt
3310[info] - should work for 1
3311[info] - should work for BigInt 1
3312[info] - should work for Rational 1
3313[info] - should work for too big
3314[info] - should work for 3.14...
3315[info] - should work for pi
3316[info] compare
3317[info] - should work for 1, 1
3318[info] - should work for 1, 2
3319[info] - should work for 2, 1
3320[info] - should work for BigInt 1, 1
3321[info] - should work for BigInt 1, 2
3322[info] - should work for BigInt 2, 1
3323[info] - should work for Rational 1, 1
3324[info] - should work for Rational 1, 2
3325[info] - should work for Rational 2, 1
3326[info] - should work for Double 1, 1
3327[info] - should work for Double 1, 2
3328[info] - should work for Double 2, 1
3329[info] Numeric toInt
3330[info] - should work for 1
3331[info] - should work for BigInt 1
3332[info] - should work for Rational 1
3333[info] - should work for 1.0
3334[info] Numeric toLong
3335[info] - should work for 1
3336[info] - should work for BigInt 1
3337[info] - should work for Rational 1
3338[info] - should work for 1.0
3339[info] Numeric toDouble
3340[info] - should work for 1
3341[info] - should work for BigInt 1
3342[info] - should work for Rational 1
3343[info] - should work for 1.0
3344[info] Numeric toFloat
3345[info] - should work for 1
3346[info] - should work for BigInt 1
3347[info] - should work for Rational 1
3348[info] - should work for 1.0
3349[info] Numeric plus
3350[info] - should work for 1
3351[info] - should work for BigInt 1
3352[info] - should work for Rational 1
3353[info] - should work for 1.0
3354[info] Numeric minus
3355[info] - should work for 1
3356[info] - should work for BigInt 1
3357[info] - should work for Rational 1
3358[info] - should work for 1.0
3359[info] Numeric fromInt
3360[info] - should work for -1
3361[info] - should work for 0
3362[info] - should work for 1
3363[info] Numeric parseString
3364[info] - should work for -1
3365[info] - should work for 0
3366[info] - should work for 1
3367[info] - should work for 6.67430(15)E-11
3368[info] Numeric div
3369[info] - should work for 1/2
3370[info] - should work for 2/2
3371[info] - should work for 2/3
3372[info] NumberOps
3373[info] - should work for 2 + Number(3)
3374[info] - should work for 2 * Number(3)
3375[info] - should work for 1 :/ 2
3376[info] isImaginary
3377[info] - should be true for i and its multiples
3378[info] - should be false for all ordinary numbers
3379[info] multiply
3380[info] - should work for pure numbers
3381[info] - should work for complex numbers
3382[info] - should work for i
3383[info] - should multiply root2 and 3
3384[info] - should multiply cube-root2 and 3
3385[info] - should multiply 3 and root2
3386[info] - should multiply 3 and cube-root2
3387[info] field operations
3388[info] - should work with asReal
3389[info] TranscendentalSpec:
3390[info] Transcendental
3391[info] - should evaluate pi
3392[info] - should evaluate e
3393[info] - should evaluate l2
3394[info] - should evaluate lg2e
3395[info] - should evaluate gamma
3396[info] - should expression pi
3397[info] - should expression e
3398[info] - should expression l2
3399[info] - should simplify pi
3400[info] - should simplify e
3401[info] - should simplify l2
3402[info] - should function 1
3403[info] - should function 2
3404[info] - should render
3405[info] ErrorCommutativeMonoidSpec:
3406[info] Abstracting advocacy communication into lawful scalar folding
3407[info] - should match decoupled parallel error folding with direct Number addition (all addition) !!! IGNORED !!!
3408[info] - should match decoupled parallel error folding with direct Number multiplication (all multiplication) !!! IGNORED !!!
3409[info] PrimesSpec:
3410[info] Prime
3411[info] - should bits
3412[info] - should isProbablePrime
3413[info] - should isProbableOddPrime
3414[info] - should fermat
3415[info] - should implement Lucas for 7 and 71
3416[info] - should implement primeFactors
3417[info] - should implement primeFactorMultiplicity
3418[info] - should implement Lucas()
3419[info] - should implement testPrimitiveRoot
3420[info] - should implement primitiveRoot
3421[info] - should multiplicativeInverse
3422[info] - should validate
3423[info] - should next
3424[info] - should isCarmichaelNumber2
3425[info] - should isCarmichaelNumber3
3426[info] - should create primes from Mersenne numbers
3427[info] - should create Mersenne numbers
3428[info] - should create Mersenne prime
3429[info] - should get first 100 primes
3430[info] - should get first 1000 primes
3431[info] - should get primes < 1000
3432[info] piApprox
3433[info] - should be correct for specific values
3434[info] - should be correct for 10∧x
3435[info] MillerRabin
3436[info] - should get small primes < 1000
3437[info] - should eSieve for primes < 1000
3438[info] - should eSieve for primes < 10000
3439[info] - should test MillerRabin
3440[info] - should totient
3441[info] ContextSpec:
3442[info] Context
3443[info] - should or
3444[info] - should and
3445[info] - should qualifyingField
3446[info] - should fieldQualifies
3447[info] - should not
3448[info] - should AnyRoot
3449[info] - should AnyLog
3450[info] - should AnyScalar
3451[info] ValueSpec:
3452[info] Value
3453[info] - should signum
3454[info] - should isZero
3455[info] - should isEqual
3456[info] - should maybeDouble
3457[info] - should valueToString 1
3458[info] - should valueToString 2
3459[info] - should valueToString 3
3460[info] - should maybeInt
3461[info] - should maybeNominalRational
3462[info] - should add
3463[info] - should abs
3464[info] - should scaleDouble
3465[info] LazyNumberRationalSpec:
3466[info] rat1
3467[info] - should be 1
3468[info] - should be -1 after negate
3469[info] - should be 0 after minus(1)
3470[info] rat2
3471[info] - should be 2
3472[info] - should be 4 when multiplied by itself
3473[info] - should be 1 when divided by itself
3474[info] - should be 3 when added to one
3475[info] - should be 6 when added to one and three
3476[info] - should be 3 when added to one by explicit function
3477[info] for comprehension
3478[info] - should give 4
3479[info] - should give 8
3480[info] FPSpec:
3481[info] FP
3482[info] - should identityTry
3483[info] - should tryMap
3484[info] - should toTry
3485[info] - should optionMap
3486[info] - should tryF1
3487[info] - should tryF2
3488[info] - should recover
3489[info] doMap function
3490[info] - should doMap: return Success(Z) when given Right(R)
3491[info] - should doMap: call tryMapLeft and return its result when given Left(L)
3492[info] - should resource
3493[info] - should toTryWithThrowable
3494[info] - should readFromResource
3495[info] - should optional
3496[info] - should resourceForClass
3497[info] - should sequence1
3498[info] - should sequence2
3499[info] - should sequence3
3500[info] - should sequence4
3501[info] - should sequence5
3502[info] - should fail1: return a Failure with CoreException when given a String
3503[info] - should fail2: return a Failure with the given Throwable
3504[info] - should getOrThrow
3505[info] - should transpose
3506[info] toTry
3507[info] - should toTry
3508[info] - should toTryWithThrowable
3509[info] - should toTryWithRationalException
3510[info] RationalSpec:
3511[info] new Rational(BigInt,Long)
3512[info] - should work for 0, 1
3513[info] - should yield infinity for 1, 0
3514[info] - should yield NaN for 0, 0
3515[info] - should fail for 2, 2
3516[info] - should succeed for 0, -1
3517[info] - should fail for 1, -1
3518[info] apply(BigInt,Long)
3519[info] - should work for 0, 1
3520[info] - should succeed for 2, 2
3521[info] - should succeed for -1, -1
3522[info] - should work for 355, 113
3523[info] - should work for 355*2, 113*2
3524[info] - should work for -355, -113
3525[info] - should work for -355 (2)
3526[info] apply(Long,Long)
3527[info] - should work for 0, 1
3528[info] apply(Long,Int)
3529[info] - should work for 0, 1
3530[info] apply(Int,Int)
3531[info] - should work for 0, 1
3532[info] - should work for 0, 0
3533[info] - should work for 1, 0
3534[info] - should work for -1, 0
3535[info] - should work for -1, -2
3536[info] - should work for -2624712818L, -1
3537[info] - should fail to convert to BigInt
3538[info] apply(Long)
3539[info] - should work for Rational.bigZero
3540[info] apply(Int)
3541[info] - should work for 0
3542[info] apply(Double)
3543[info] - should convert zero
3544[info] - should convert negative zero
3545[info] - should convert Avagadro's number
3546[info] - should convert a very small number
3547[info] - should be zero for very very small number
3548[info] - should be zero for very very very small number
3549[info] - should convert 3.1416 correctly
3550[info] - should convert 3.1416 the same as "3.1416"
3551[info] - should pick up a float
3552[info] apply(BigDecimal)
3553[info] - should convert 0.5 to Rational
3554[info] - should convert to Rational
3555[info] isWhole
3556[info] - should be true for integers
3557[info] - should be false for reciprocals
3558[info] isDecimal
3559[info] - should be true for 3.14
3560[info] - should be true for 223606797749979/200000000000000
3561[info] toBigInt
3562[info] - should work for Long.MaxValue
3563[info] toLong
3564[info] - should work for Long.MaxValue
3565[info] toBigDecimal
3566[info] - should work for pi
3567[info] equals
3568[info] - should equate 0 and zero
3569[info] - should be whole
3570[info] - should equal 0
3571[info] - should equal infinity when inverted
3572[info] - should equal BigDecimal.ZERO
3573[info] - should equal r when added to r
3574[info] - should equal infinity when r-interpolator has 0 denominator
3575[info] - should equal infinities
3576[info] +
3577[info] - should return 4 for 2+2
3578[info] - should return result for 0+-236274181
3579[info] - should add 0 to large number
3580[info] - should add 0 to large number (2)
3581[info] - should add 1 to large number
3582[info] - should add large number to smaller one
3583[info] *
3584[info] - should return 4 for 2*2
3585[info] - should return result for 0 * -236274181
3586[info] - should multiply 2 by large number
3587[info] - should multiply large number by smaller one
3588[info] - should multiply large number by short
3589[info] division
3590[info] - should work for 6 / 10 / 3
3591[info] -
3592[info] - should work for -1
3593[info] negate
3594[info] - should work for -1
3595[info] implicit conversion
3596[info] - should work for 0
3597[info] 1/2
3598[info] - should be OK
3599[info] - should equal half
3600[info] - should be half of one
3601[info] - should be OK using r-interpolator
3602[info] - should be OK using r-interpolator with variable
3603[info] 1
3604[info] - should be OK
3605[info] - should be one
3606[info] - should be positive
3607[info] - should be whole
3608[info] - should be unity
3609[info] - should equal 1
3610[info] - should not equal infinity when inverted
3611[info] - should equal itself when inverted
3612[info] - should equal BigDecimal.one
3613[info] - should equal r when multiplied by r
3614[info] - should be -1 when negated
3615[info] power
3616[info] - should work for Int power
3617[info] - should work for Rational power (1)
3618[info] - should work for Rational power (2)
3619[info] - should work for Rational power (3)
3620[info] - should work for Rational ∧ (4)
3621[info] - should get the correct precedence for ∧
3622[info] - should work for Rational power (5)
3623[info] - should fail for non-exact powers
3624[info] - should apply
3625[info] power
3626[info] - should power 1
3627[info] - should power 2
3628[info] - should power 3
3629[info] - should power 4
3630[info] - should fail with bad power
3631[info] root
3632[info] - should root 0
3633[info] - should root 1
3634[info] - should root 2
3635[info] - should root -2
3636[info] exponent
3637[info] - should work for 2
3638[info] - should work for Avagadro
3639[info] 10
3640[info] - should be OK
3641[info] - should be ten
3642[info] - should be whole
3643[info] - should not be zero
3644[info] - should equal 10
3645[info] - should equal 5*2
3646[info] - should equal 10*1
3647[info] - should equal BigDecimal(10)
3648[info] - should equal a million (ten raised to 6th power)
3649[info] 2/3
3650[info] - should be OK
3651[info] - should equal -1/3 when added to -1
3652[info] - should be less than 1
3653[info] - should not be whole
3654[info] - should equal 2 when multiplied by 3
3655[info] - should equal 3/2 when inverted
3656[info] - should equal 5/3 when added to 1
3657[info] - should equal 4/9 when multiplied by itself
3658[info] - should equal 4/9 when squared using ∧
3659[info] - should barf when toInt invoked
3660[info] - should barf when Rational.toInt invoked
3661[info] 2/4
3662[info] - should not be OK
3663[info] - should not OK via apply
3664[info] Floating Point Problem
3665[info] - should be OK
3666[info] toString
3667[info] - should be decimal when exact
3668[info] - should be recurring when exact: 2/3
3669[info] - should be decimal when not exact: pi
3670[info] - should work for NaN
3671[info] - should work for Infinity
3672[info] - should work for negative Infinity
3673[info] - should work for gamma
3674[info] - should work for various prime denominators
3675[info] render
3676[info] - should be decimal when exact
3677[info] - should be recurring when exact: 5/3
3678[info] - should be decimal when not exact: pi
3679[info] - should work for NaN
3680[info] - should work for Infinity
3681[info] - should work for negative Infinity
3682[info] - should work for gamma
3683[info] - should work for various prime denominators
3684[info] - should work for various composite denominators
3685[info] findRepeatingSequence
3686[info] - should fail for 4/5
3687[info] - should work when denominator is prime
3688[info] - should work when numerator and denominator are prime 1
3689[info] - should work when numerator and denominator are prime 2
3690[info] - should work when denominator is composite 1
3691[info] - should work when denominator is composite 2
3692[info] - should fail when denominator has too many prime factors
3693[info] renderApproximate
3694[info] - should work with one parameter (1)
3695[info] - should fail with one parameter
3696[info] - should work with two parameters (1)
3697[info] - should fail with two parameters
3698[info] renderAsPercent
3699[info] - should work
3700[info] Rational(String)
3701[info] - should work for 0.1
3702[info] - should work for 1.0e6
3703[info] - should convert Avagadro's number
3704[info] parse(String)
3705[info] - should work for 0.1
3706[info] - should work for 1.
3707[info] - should work for 1.0e6
3708[info] - should work for 15699511928844194920/4294967295
3709[info] - should work for 15699511928844194920
3710[info] - should work for -15699511928844194920/4294967295
3711[info] - should work for -15699511928844194920/-4294967295
3712[info] - should fail for x
3713[info] edu/neu/coe/csye7200/sorting
3714[info] - should work
3715[info] r-interpolator
3716[info] - should work for -1/0
3717[info] - should work for 1/-2147483648
3718[info] - should work for -1/-2147483648
3719[info] toInt
3720[info] - should work for Int.MaxValue
3721[info] - should work for Int.MinValue
3722[info] - should fail for Int.MaxValue+1
3723[info] - should fail for Int.MinValue-1
3724[info] narrow(BigInt)
3725[info] - should work for Int.MaxValue
3726[info] - should not work for Int.MaxValue+1
3727[info] narrow(Rational)
3728[info] - should work for Int.MaxValue
3729[info] - should work for Int.MaxValue+1
3730[info] normalize
3731[info] - should work for 0,0
3732[info] - should work for 1,0
3733[info] - should work for 1,1
3734[info] - should work for 2,2
3735[info] - should work for 3,5
3736[info] compare
3737[info] - should work for 0,0
3738[info] - should work for 0,1
3739[info] - should work for 1,0
3740[info] - should work for 1,1
3741[info] - should work for inf,inf
3742[info] - should work for -inf,inf
3743[info] mediant
3744[info] - should work
3745[info] approximate
3746[info] - should work
3747[info] - should fail
3748[info] approximateAny
3749[info] - should work for specific epsilon
3750[info] convertDouble
3751[info] - should work
3752[info] sqrt
3753[info] - should work correctly
3754[info] rootOfBigInt
3755[info] - should work for sqrt(4)
3756[info] RationalOps
3757[info] - should work correctly for 2 + 3
3758[info] - should work correctly for 2 + Rational(3)
3759[info] - should work correctly for 2 * 3
3760[info] - should work correctly for 2 * Rational(3)
3761[info] - should work correctly for 2:/3
3762[info] - should work correctly (but somewhat counter-intuitively) for 2/3
3763[info] negZero
3764[info] - should add to zero correctly
3765[info] - should add to one correctly
3766[info] - should multiply correctly
3767[info] - should convert to double correctly
3768[info] Rat...
3769[info] - should parse a String
3770[info] - should convert from an Int
3771[info] - should convert to an Int
3772[info] - should convert to a Long
3773[info] - should convert to a Float
3774[info] - should convert infinity to a Double
3775[info] renderExact
3776[info] - should render -1/6
3777[info] - should render 1/2
3778[info] - should render thirds
3779[info] - should render quarters
3780[info] - should render fifths
3781[info] - should render sixths
3782[info] - should render eighths
3783[info] - should render tenths
3784[info] - should render other
3785[info] apply(String)
3786[info] - should handle the vulgar fractions
3787actual = 1.643(1)
3788expected = 1.6449340668482262±0.00000000000030%
3789expected.fuzz = Some(RelativeFuzz(3.068906722219106E-15,Gaussian))
3790wiggle = 0.0038905918864131214
3791difference = -0.001(1)
3792fuzz = AbsoluteFuzz(0.001,Gaussian)
3793[info] SeriesSpec:
3794[info] FiniteSeries
3795[info] - should term
3796[info] - should evaluateToTolerance n
3797[info] - should evaluateToTolerance epsilon
3798[info] InfiniteSeries
3799[info] - should term
3800[info] - should evaluateToTolerance n
3801[info] - should evaluateToTolerance infinity
3802[info] - should evaluateToTolerance epsilon
3803[info] Basel Problem
3804[info] - should term
3805[info] - should evaluateToTolerance n
3806[info] - should evaluateToTolerance N
3807[info] - should evaluateToTolerance epsilon
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/classes ...
3812[info] done compiling
3813[info] compiling 3 Scala sources to /build/repo/top/target/scala-3.8.0/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/test-classes ...
3820[info] done compiling
382116:03:15,132 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
382216:03:15,132 |-INFO in ch.qos.logback.classic.util.ContextInitializer@729520af - No custom configurators were discovered as a service.
382316:03:15,132 |-INFO in ch.qos.logback.classic.util.ContextInitializer@729520af - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
382416:03:15,133 |-INFO in ch.qos.logback.classic.util.ContextInitializer@729520af - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
382516:03:15,133 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
382616:03:15,133 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/core/target/scala-3.8.0/classes/logback.xml]
382716:03:15,133 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4000ddae - Resource [logback.xml] occurs multiple times on the classpath.
382816:03:15,133 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4000ddae - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0/classes/logback.xml]
382916:03:15,133 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4000ddae - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0/classes/logback.xml]
383016:03:15,133 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4000ddae - 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]
383116:03:15,133 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@4000ddae - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml]
383216:03:15,190 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/core/target/scala-3.8.0/classes/logback.xml
383316:03:15,190 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/core/target/scala-3.8.0/classes/logback.xml}
383416:03:15,190 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
383516:03:15,192 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2c7027c1 - value "logs/Number.log" substituted for "${HOME_LOG}"
383616:03:15,194 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
383716:03:15,194 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
383816:03:15,199 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
383916:03:15,230 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
384016:03:15,230 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
384116:03:15,230 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
384216:03:15,231 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
384316:03:15,231 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
384416:03:15,233 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@2c7027c1 - value "logs/Number.log" substituted for "${HOME_LOG}"
384516:03:15,236 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1269889246 - setting totalSizeCap to 20 GB
384616:03:15,238 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1269889246 - Archive files will be limited to [10 MB] each.
384716:03:15,238 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1269889246 - Will use gz compression
384816:03:15,242 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1269889246 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
384916:03:15,243 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@107b295f - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
385016:03:15,243 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@107b295f - Roll-over at midnight.
385116:03:15,244 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@107b295f - Setting initial period to 2026-01-13T15:02:25.754Z
385216:03:15,245 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
385316:03:15,246 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
385416:03:15,246 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
385516:03:15,247 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
385616:03:15,248 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
385716:03:15,248 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
385816:03:15,248 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
385916:03:15,248 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
386016:03:15,248 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
386116:03:15,248 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@56507b53 - End of configuration.
386216:03:15,249 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@7b331077 - Registering current configuration as safe fallback point
386316:03:15,249 |-INFO in ch.qos.logback.classic.util.ContextInitializer@729520af - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 116 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/test-classes ...
3890[info] done compiling
389116:03:19,190 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.23
389216:03:19,190 |-INFO in ch.qos.logback.classic.util.ContextInitializer@73a5371 - No custom configurators were discovered as a service.
389316:03:19,190 |-INFO in ch.qos.logback.classic.util.ContextInitializer@73a5371 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
389416:03:19,191 |-INFO in ch.qos.logback.classic.util.ContextInitializer@73a5371 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
389516:03:19,191 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
389616:03:19,191 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/build/repo/top/target/scala-3.8.0/classes/logback.xml]
389716:03:19,191 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - Resource [logback.xml] occurs multiple times on the classpath.
389816:03:19,192 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - Resource [logback.xml] occurs at [file:/build/repo/core/target/scala-3.8.0/classes/logback.xml]
389916:03:19,192 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - Resource [logback.xml] occurs at [file:/build/repo/expression/target/scala-3.8.0/classes/logback.xml]
390016:03:19,192 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - 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]
390116:03:19,192 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - Resource [logback.xml] occurs at [file:/build/repo/algebra/target/scala-3.8.0/classes/logback.xml]
390216:03:19,192 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@204a9559 - Resource [logback.xml] occurs at [file:/build/repo/top/target/scala-3.8.0/classes/logback.xml]
390316:03:19,240 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - Main configuration file URL: file:/build/repo/top/target/scala-3.8.0/classes/logback.xml
390416:03:19,240 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - FileWatchList= {/build/repo/top/target/scala-3.8.0/classes/logback.xml}
390516:03:19,240 |-INFO in ch.qos.logback.classic.model.processor.ConfigurationModelHandlerFull - URLWatchList= {}
390616:03:19,242 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@8f8ac73 - value "logs/Number.log" substituted for "${HOME_LOG}"
390716:03:19,243 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
390816:03:19,243 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
390916:03:19,248 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
391016:03:19,267 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - NOTE: Writing to the console can be slow. Try to avoid logging to the
391116:03:19,267 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - console in production environments, especially in high volume systems.
391216:03:19,267 |-INFO in ch.qos.logback.core.ConsoleAppender[STDOUT] - See also https://logback.qos.ch/codes.html#slowConsole
391316:03:19,268 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [FILE-ROLLING]
391416:03:19,268 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
391516:03:19,269 |-INFO in ch.qos.logback.core.model.processor.ModelInterpretationContext@8f8ac73 - value "logs/Number.log" substituted for "${HOME_LOG}"
391616:03:19,271 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@913963694 - setting totalSizeCap to 20 GB
391716:03:19,273 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@913963694 - Archive files will be limited to [10 MB] each.
391816:03:19,273 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@913963694 - Will use gz compression
391916:03:19,275 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@913963694 - Will use the pattern logs/archived/app.%d{yyyy-MM-dd}.%i.log for the active file
392016:03:19,276 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@638d86cb - The date pattern is 'yyyy-MM-dd' from file name pattern 'logs/archived/app.%d{yyyy-MM-dd}.%i.log.gz'.
392116:03:19,276 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@638d86cb - Roll-over at midnight.
392216:03:19,277 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFileNamingAndTriggeringPolicy@638d86cb - Setting initial period to 2026-01-13T15:02:25.754Z
392316:03:19,277 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
392416:03:19,278 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Active log file name: logs/Number.log
392516:03:19,279 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - Setting currentFileLength to 0 for logs/Number.log
392616:03:19,279 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE-ROLLING] - File property is set to [logs/Number.log]
392716:03:19,279 |-WARN in ch.qos.logback.core.model.processor.AppenderModelHandler - Appender named [ASYNC] not referenced. Skipping further processing.
392816:03:19,279 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
392916:03:19,280 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
393016:03:19,280 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
393116:03:19,280 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [FILE-ROLLING] to Logger[ROOT]
393216:03:19,280 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@171937be - End of configuration.
393316:03:19,280 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5a4f9a1a - Registering current configuration as safe fallback point
393416:03:19,281 |-INFO in ch.qos.logback.classic.util.ContextInitializer@73a5371 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 90 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": 38383, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
3989 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
3990 "test-compile": {"status": "ok", "tookMs": 18212, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
3991 "test": {"status": "ok", "tookMs": 2346, "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": 194, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
3999 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4000 "test-compile": {"status": "ok", "tookMs": 5911, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4001 "test": {"status": "ok", "tookMs": 945, "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": 58, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4009 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4010 "test-compile": {"status": "ok", "tookMs": 23708, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
4011 "test": {"status": "failed", "tookMs": 6104, "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": 4865, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4019 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4020 "test-compile": {"status": "ok", "tookMs": 329, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4021 "test": {"status": "ok", "tookMs": 375, "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": 169, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4029 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4030 "test-compile": {"status": "ok", "tookMs": 1846, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4031 "test": {"status": "ok", "tookMs": 1141, "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": 407, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4039 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
4040 "test-compile": {"status": "ok", "tookMs": 1853, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
4041 "test": {"status": "ok", "tookMs": 1171, "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: 115 s (0:01:55.0), completed Jan 13, 2026, 4:03:20 PM
4051[0JBuild failed, not retrying.