diff --git a/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmAlgebras.kt b/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmAlgebras.kt new file mode 100644 index 000000000..07f895c40 --- /dev/null +++ b/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmAlgebras.kt @@ -0,0 +1,75 @@ +package scietifik.kmath.ast.asm + +import scientifik.kmath.asm.asmField +import scientifik.kmath.asm.asmRing +import scientifik.kmath.asm.asmSpace +import scientifik.kmath.expressions.invoke +import scientifik.kmath.operations.ByteRing +import scientifik.kmath.operations.RealField +import kotlin.test.Test +import kotlin.test.assertEquals + +class TestAsmAlgebras { + @Test + fun space() { + val res = ByteRing.asmSpace { + binaryOperation( + "+", + + unaryOperation( + "+", + 3.toByte() - (2.toByte() + (multiply( + add(const(1), const(1)), + 2 + ) + 1.toByte()) * 3.toByte() - 1.toByte()) + ), + + number(1) + ) + variable("x") + zero + }("x" to 2.toByte()) + + assertEquals(16, res) + } + + @Test + fun ring() { + val res = ByteRing.asmRing { + binaryOperation( + "+", + + unaryOperation( + "+", + (3.toByte() - (2.toByte() + (multiply( + add(const(1), const(1)), + 2 + ) + 1.toByte()))) * 3.0 - 1.toByte() + ), + + number(1) + ) * const(2) + }() + + assertEquals(24, res) + } + + @Test + fun field() { + val res = RealField.asmField { + divide(binaryOperation( + "+", + + unaryOperation( + "+", + (3.0 - (2.0 + (multiply( + add(const(1.0), const(1.0)), + 2 + ) + 1.0))) * 3 - 1.0 + ), + + number(1) + ) / 2, const(2.0)) * one + }() + + assertEquals(3.0, res) + } +} diff --git a/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmExpressions.kt b/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmExpressions.kt new file mode 100644 index 000000000..2839b8a25 --- /dev/null +++ b/kmath-ast/src/jvmTest/kotlin/scietifik/kmath/ast/asm/TestAsmExpressions.kt @@ -0,0 +1,21 @@ +package scietifik.kmath.ast.asm + +import scientifik.kmath.asm.asmField +import scientifik.kmath.expressions.invoke +import scientifik.kmath.operations.RealField +import kotlin.test.Test +import kotlin.test.assertEquals + +class TestAsmExpressions { + @Test + fun testUnaryOperationInvocation() { + val res = RealField.asmField { unaryOperation("+", variable("x")) }("x" to 2.0) + assertEquals(2.0, res) + } + + @Test + fun testConstProductInvocation() { + val res = RealField.asmField { variable("x") * 2 }("x" to 2.0) + assertEquals(4.0, res) + } +}