Coverage Summary for Class: CacheCheck (it.unibo.tuprolog.argumentation.core.primitives.cache)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| CacheCheck |
100%
(4/4)
|
|
100%
(6/6)
|
100%
(64/64)
|
| CacheCheck$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/1)
|
| Total |
80%
(4/5)
|
|
85.7%
(6/7)
|
98.5%
(64/65)
|
package it.unibo.tuprolog.argumentation.core.primitives.cache
import it.unibo.tuprolog.argumentation.core.engine.DelegatedCall
import it.unibo.tuprolog.argumentation.core.engine.Delegation
import it.unibo.tuprolog.argumentation.core.primitives.PrimitiveWithSignature
import it.unibo.tuprolog.argumentation.core.runtime.context.ClauseStore
import it.unibo.tuprolog.argumentation.core.runtime.context.StoreClauses
import it.unibo.tuprolog.argumentation.core.runtime.context.StoreLookup
import it.unibo.tuprolog.core.Struct
import it.unibo.tuprolog.solve.ExecutionContext
import it.unibo.tuprolog.solve.Signature
import it.unibo.tuprolog.solve.primitive.Solve
/**
* cache_check(Goal): the solutions of Goal in the cache (see [ClauseStore.solve]); the arg2p engine resolves Goal with
* the clauses of the cache itself (see [StoreClauses])
*/
internal class CacheCheck(
private val store: ClauseStore,
) : PrimitiveWithSignature,
DelegatedCall {
override val signature = Signature("cache_check", 1)
override fun delegate(request: Solve.Request<ExecutionContext>): Delegation? =
StoreClauses.delegation(store, LOOKUP, request.arguments[0], request.context.libraries)
override fun solve(request: Solve.Request<ExecutionContext>): Sequence<Solve.Response> =
store.solve(request.arguments[0].castToStruct()).map { request.replyWith(it) }
private companion object {
// The lookup of a goal in the cache: cache_check(Goal)
val LOOKUP = StoreLookup { Struct.of("cache_check", it) }
}
}