fixed some issues with Decimals
This commit is contained in:
1 parent
e55d9c835a
commit
c7c333b71a
11 files changed
+385
-73
No files matched your search
@@ -146,4 +146,84 @@ class BigDecimalModuleTest {
|
||||
assertEquals("0.2", s0.toString())
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDecimalMathHelpersUseExactImplementationsWhenAvailable() = runTest {
|
||||
val scope = Script.newScope()
|
||||
scope.eval(
|
||||
"""
|
||||
import lyng.decimal
|
||||
|
||||
val absValue = abs("-2.5".d) as BigDecimal
|
||||
val floorPos = floor("2.9".d) as BigDecimal
|
||||
val floorNeg = floor("-2.1".d) as BigDecimal
|
||||
val ceilPos = ceil("2.1".d) as BigDecimal
|
||||
val ceilNeg = ceil("-2.1".d) as BigDecimal
|
||||
val roundPos = round("2.5".d) as BigDecimal
|
||||
val roundNeg = round("-2.5".d) as BigDecimal
|
||||
val powInt = pow("1.5".d, 2) as BigDecimal
|
||||
|
||||
assertEquals("2.5", absValue.toStringExpanded())
|
||||
assertEquals("2", floorPos.toStringExpanded())
|
||||
assertEquals("-3", floorNeg.toStringExpanded())
|
||||
assertEquals("3", ceilPos.toStringExpanded())
|
||||
assertEquals("-2", ceilNeg.toStringExpanded())
|
||||
assertEquals("3", roundPos.toStringExpanded())
|
||||
assertEquals("-2", roundNeg.toStringExpanded())
|
||||
assertEquals("2.25", powInt.toStringExpanded())
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testDecimalMathHelpersFallbackThroughRealTemporarily() = runTest {
|
||||
val scope = Script.newScope()
|
||||
scope.eval(
|
||||
"""
|
||||
import lyng.decimal
|
||||
|
||||
val sinDecimal = sin("0.5".d) as BigDecimal
|
||||
val expDecimal = exp("1.25".d) as BigDecimal
|
||||
val sqrtDecimal = sqrt("2".d) as BigDecimal
|
||||
val lnDecimal = ln("2".d) as BigDecimal
|
||||
val log10Decimal = log10("2".d) as BigDecimal
|
||||
val log2Decimal = log2("2".d) as BigDecimal
|
||||
val powDecimal = pow("2".d, "0.5".d) as BigDecimal
|
||||
|
||||
assertEquals((sin(0.5) as Real).d.toStringExpanded(), sinDecimal.toStringExpanded())
|
||||
assertEquals((exp(1.25) as Real).d.toStringExpanded(), expDecimal.toStringExpanded())
|
||||
assertEquals((sqrt(2.0) as Real).d.toStringExpanded(), sqrtDecimal.toStringExpanded())
|
||||
assertEquals((ln(2.0) as Real).d.toStringExpanded(), lnDecimal.toStringExpanded())
|
||||
assertEquals((log10(2.0) as Real).d.toStringExpanded(), log10Decimal.toStringExpanded())
|
||||
assertEquals((log2(2.0) as Real).d.toStringExpanded(), log2Decimal.toStringExpanded())
|
||||
assertEquals((pow(2.0, 0.5) as Real).d.toStringExpanded(), powDecimal.toStringExpanded())
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun decimalMustBeObj() = runTest {
|
||||
eval("""
|
||||
import lyng.decimal
|
||||
|
||||
val decimal = 42.d
|
||||
val context = DecimalContext(12)
|
||||
|
||||
assert(decimal is BigDecimal)
|
||||
assertEquals(BigDecimal, decimal::class)
|
||||
|
||||
assert(context is DecimalContext)
|
||||
assertEquals(DecimalContext, context::class)
|
||||
""".trimIndent())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFromRealLife1() = runTest {
|
||||
eval("""
|
||||
import lyng.decimal
|
||||
var X = 42.d
|
||||
X += 11
|
||||
assertEquals(53.d, X)
|
||||
""")
|
||||
}
|
||||
}
|
||||
@@ -152,4 +152,20 @@ class MatrixModuleTest {
|
||||
""".trimIndent()
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun matrixAndVectorMustBeObjs() = runTest {
|
||||
eval("""
|
||||
import lyng.matrix
|
||||
|
||||
val matrixValue = matrix([[1, 2], [3, 4]])
|
||||
val vectorValue = vector([1, 2, 3])
|
||||
|
||||
assert(matrixValue is Matrix)
|
||||
assertEquals(Matrix, matrixValue::class)
|
||||
|
||||
assert(vectorValue is Vector)
|
||||
assertEquals(Vector, vectorValue::class)
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2026 Sergey S. Chernov real.sergeych@gmail.com
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package net.sergeych.lyng
|
||||
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlin.test.Test
|
||||
|
||||
class RandomModuleTest {
|
||||
@Test
|
||||
fun seededRandomMustBeObj() = runTest {
|
||||
eval("""
|
||||
val rng = Random.seeded(12345)
|
||||
|
||||
assert(rng is SeededRandom)
|
||||
assertEquals(SeededRandom, rng::class)
|
||||
""".trimIndent())
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user