
commonTest.it.unibo.tuprolog.solve.stdlib.function.testutils.FunctionUtils.kt Maven / Gradle / Ivy
package it.unibo.tuprolog.solve.stdlib.function.testutils
import it.unibo.tuprolog.core.Integer
import it.unibo.tuprolog.core.Real
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.solve.DummyInstances
import it.unibo.tuprolog.solve.ExecutionContext
import it.unibo.tuprolog.solve.Signature
import it.unibo.tuprolog.solve.exception.error.TypeError
import it.unibo.tuprolog.solve.function.BinaryMathFunction
import it.unibo.tuprolog.solve.function.Compute
import it.unibo.tuprolog.solve.function.FunctionWrapper
import it.unibo.tuprolog.solve.function.UnaryMathFunction
import kotlin.test.assertFailsWith
/**
* Utils singleton to help testing functions
*
* @author Enrico
*/
internal object FunctionUtils {
/** Utility function to create a Compute request for functions */
private fun createComputeRequest(signature: Signature, vararg argument: Term) =
Compute.Request(signature, argument.toList(), DummyInstances.executionContext)
/** Helper function that invokes the function wrapper implementation with provided arguments */
internal fun FunctionWrapper.computeOf(vararg argument: Term): Term =
implementation.compute(createComputeRequest(signature, *argument)).result
/** Utility function to assert that a unaryMathFunction rejects non integer parameters */
internal fun assertRejectsNonIntegerParameters(unaryMathFunction: UnaryMathFunction) {
assertFailsWith { unaryMathFunction.computeOf(Real.of(2.0)) }
}
/** Utility function to assert that a binaryMathFunction rejects non integer parameters */
internal fun assertRejectsNonIntegerParameters(binaryMathFunction: BinaryMathFunction) {
assertFailsWith { binaryMathFunction.computeOf(Integer.of(2), Real.of(2.0)) }
assertFailsWith { binaryMathFunction.computeOf(Real.of(2.0), Integer.of(2)) }
assertFailsWith { binaryMathFunction.computeOf(Real.of(2.0), Real.of(2.0)) }
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy