All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonTest.it.unibo.tuprolog.solve.function.testutils.FunctionWrapperUtils.kt Maven / Gradle / Ivy

package it.unibo.tuprolog.solve.function.testutils

import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.core.Truth
import it.unibo.tuprolog.solve.DummyInstances
import it.unibo.tuprolog.solve.ExecutionContext
import it.unibo.tuprolog.solve.Signature
import it.unibo.tuprolog.solve.extractSignature
import it.unibo.tuprolog.solve.function.Compute
import it.unibo.tuprolog.solve.function.FunctionWrapper
import it.unibo.tuprolog.solve.function.LogicFunction
import it.unibo.tuprolog.solve.primitive.testutils.WrapperUtils
import kotlin.test.assertTrue

/**
 * Test class for [FunctionWrapper]
 *
 * @author Enrico
 */
internal object FunctionWrapperUtils {

    /** A default function result to be used in tests */
    internal val defaultFunctionResult = Compute.Response(Truth.TRUE)

    /** A test function */
    internal val function: LogicFunction = LogicFunction { defaultFunctionResult }

    /** A function to create a Compute.Request with provided [signature] and [argList] */
    internal fun createFunctionRequest(signature: Signature, argList: List) =
        Compute.Request(signature, argList, DummyInstances.executionContext)

    /** Utility function to create a function wrapper */
    internal fun createFunctionWrapper(
        signature: Signature,
        uncheckedImplementation: LogicFunction
    ): FunctionWrapper =
        object : FunctionWrapper(signature) {
            override fun uncheckedImplementation(request: Compute.Request): Compute.Response =
                uncheckedImplementation.compute(request)
        }

    /** All under test requests */
    private val allRequests by lazy {
        (WrapperUtils.allMatchingRawStruct + WrapperUtils.allNotMatchingStruct).flatten()
            .map { createFunctionRequest(it.extractSignature(), it.args) }
    }

    /** All ground requests */
    internal val allGroundRequests by lazy {
        allRequests.filter { it.query.isGround }
            .also { assertTrue("Test data empty") { it.isNotEmpty() } }
    }

    /** All non-ground requests */
    internal val nonAllGroundRequests by lazy {
        allRequests.filterNot { it.query.isGround }
            .also { assertTrue("Test data empty") { it.isNotEmpty() } }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy