Fix MSTField and MSTRing invalid unary operation, update according ASM tests
This commit is contained in:
parent
2df97ca4c3
commit
0ee1d31571
@ -34,43 +34,40 @@ object MSTSpace : Space<MST>, NumericAlgebra<MST> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
object MSTRing : Ring<MST>, NumericAlgebra<MST> {
|
object MSTRing : Ring<MST>, NumericAlgebra<MST> {
|
||||||
override fun number(value: Number): MST = MST.Numeric(value)
|
|
||||||
override fun symbol(value: String): MST = MST.Symbolic(value)
|
|
||||||
|
|
||||||
override val zero: MST = MSTSpace.number(0.0)
|
override val zero: MST = MSTSpace.number(0.0)
|
||||||
override val one: MST = number(1.0)
|
override val one: MST = number(1.0)
|
||||||
override fun add(a: MST, b: MST): MST =
|
|
||||||
MSTAlgebra.binaryOperation(SpaceOperations.PLUS_OPERATION, a, b)
|
override fun number(value: Number): MST = MST.Numeric(value)
|
||||||
|
override fun symbol(value: String): MST = MST.Symbolic(value)
|
||||||
|
override fun add(a: MST, b: MST): MST = binaryOperation(SpaceOperations.PLUS_OPERATION, a, b)
|
||||||
|
|
||||||
override fun multiply(a: MST, k: Number): MST =
|
override fun multiply(a: MST, k: Number): MST =
|
||||||
MSTAlgebra.binaryOperation(RingOperations.TIMES_OPERATION, a, MSTSpace.number(k))
|
binaryOperation(RingOperations.TIMES_OPERATION, a, MSTSpace.number(k))
|
||||||
|
|
||||||
override fun multiply(a: MST, b: MST): MST =
|
override fun multiply(a: MST, b: MST): MST = binaryOperation(RingOperations.TIMES_OPERATION, a, b)
|
||||||
binaryOperation(RingOperations.TIMES_OPERATION, a, b)
|
|
||||||
|
|
||||||
override fun binaryOperation(operation: String, left: MST, right: MST): MST =
|
override fun binaryOperation(operation: String, left: MST, right: MST): MST =
|
||||||
MSTAlgebra.binaryOperation(operation, left, right)
|
MSTAlgebra.binaryOperation(operation, left, right)
|
||||||
|
|
||||||
|
override fun unaryOperation(operation: String, arg: MST): MST = MSTAlgebra.unaryOperation(operation, arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
object MSTField : Field<MST> {
|
object MSTField : Field<MST> {
|
||||||
override fun symbol(value: String): MST = MST.Symbolic(value)
|
|
||||||
override fun number(value: Number): MST = MST.Numeric(value)
|
|
||||||
|
|
||||||
override val zero: MST = MSTSpace.number(0.0)
|
override val zero: MST = MSTSpace.number(0.0)
|
||||||
override val one: MST = number(1.0)
|
override val one: MST = number(1.0)
|
||||||
override fun add(a: MST, b: MST): MST =
|
|
||||||
MSTAlgebra.binaryOperation(SpaceOperations.PLUS_OPERATION, a, b)
|
|
||||||
|
|
||||||
|
override fun symbol(value: String): MST = MST.Symbolic(value)
|
||||||
|
override fun number(value: Number): MST = MST.Numeric(value)
|
||||||
|
override fun add(a: MST, b: MST): MST = binaryOperation(SpaceOperations.PLUS_OPERATION, a, b)
|
||||||
|
|
||||||
override fun multiply(a: MST, k: Number): MST =
|
override fun multiply(a: MST, k: Number): MST =
|
||||||
MSTAlgebra.binaryOperation(RingOperations.TIMES_OPERATION, a, MSTSpace.number(k))
|
binaryOperation(RingOperations.TIMES_OPERATION, a, MSTSpace.number(k))
|
||||||
|
|
||||||
override fun multiply(a: MST, b: MST): MST =
|
override fun multiply(a: MST, b: MST): MST = binaryOperation(RingOperations.TIMES_OPERATION, a, b)
|
||||||
binaryOperation(RingOperations.TIMES_OPERATION, a, b)
|
override fun divide(a: MST, b: MST): MST = binaryOperation(FieldOperations.DIV_OPERATION, a, b)
|
||||||
|
|
||||||
override fun divide(a: MST, b: MST): MST =
|
|
||||||
binaryOperation(FieldOperations.DIV_OPERATION, a, b)
|
|
||||||
|
|
||||||
override fun binaryOperation(operation: String, left: MST, right: MST): MST =
|
override fun binaryOperation(operation: String, left: MST, right: MST): MST =
|
||||||
MSTAlgebra.binaryOperation(operation, left, right)
|
MSTAlgebra.binaryOperation(operation, left, right)
|
||||||
|
|
||||||
|
override fun unaryOperation(operation: String, arg: MST): MST = MSTAlgebra.unaryOperation(operation, arg)
|
||||||
}
|
}
|
||||||
|
@ -7,39 +7,40 @@ import scientifik.kmath.operations.RealField
|
|||||||
import kotlin.test.Test
|
import kotlin.test.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
internal class TestSpecialization {
|
internal class TestAsmSpecialization {
|
||||||
@Test
|
@Test
|
||||||
fun testUnaryPlus() {
|
fun testUnaryPlus() {
|
||||||
val expr = RealField.mstInField { unaryOperation("+", symbol("x")) }.compile()
|
val expr = RealField.mstInField { unaryOperation("+", symbol("x")) }.compile()
|
||||||
val res = expr("x" to 2.0)
|
assertEquals(2.0, expr("x" to 2.0))
|
||||||
assertEquals(2.0, res)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testUnaryMinus() {
|
fun testUnaryMinus() {
|
||||||
val expr = RealField.mstInField { unaryOperation("-", symbol("x")) }.compile()
|
val expr = RealField.mstInField { unaryOperation("-", symbol("x")) }.compile()
|
||||||
val res = expr("x" to 2.0)
|
assertEquals(-2.0, expr("x" to 2.0))
|
||||||
assertEquals(-2.0, res)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testAdd() {
|
fun testAdd() {
|
||||||
val expr = RealField.mstInField { binaryOperation("+", symbol("x"), symbol("x")) }.compile()
|
val expr = RealField.mstInField { binaryOperation("+", symbol("x"), symbol("x")) }.compile()
|
||||||
val res = expr("x" to 2.0)
|
assertEquals(4.0, expr("x" to 2.0))
|
||||||
assertEquals(4.0, res)
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testSine() {
|
||||||
|
val expr = RealField.mstInField { unaryOperation("sin", symbol("x")) }.compile()
|
||||||
|
assertEquals(0.0, expr("x" to 0.0))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMinus() {
|
fun testMinus() {
|
||||||
val expr = RealField.mstInField { binaryOperation("-", symbol("x"), symbol("x")) }.compile()
|
val expr = RealField.mstInField { binaryOperation("-", symbol("x"), symbol("x")) }.compile()
|
||||||
val res = expr("x" to 2.0)
|
assertEquals(0.0, expr("x" to 2.0))
|
||||||
assertEquals(0.0, res)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testDivide() {
|
fun testDivide() {
|
||||||
val expr = RealField.mstInField { binaryOperation("/", symbol("x"), symbol("x")) }.compile()
|
val expr = RealField.mstInField { binaryOperation("/", symbol("x"), symbol("x")) }.compile()
|
||||||
val res = expr("x" to 2.0)
|
assertEquals(1.0, expr("x" to 2.0))
|
||||||
assertEquals(1.0, res)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user