Coverage Summary for Class: AppendFast (it.unibo.tuprolog.argumentation.core.primitives.utils)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| AppendFast |
100%
(2/2)
|
50%
(3/6)
|
34.8%
(8/23)
|
63.5%
(47/74)
|
| AppendFast$solve$1 |
100%
(1/1)
|
|
100%
(2/2)
|
100%
(42/42)
|
| Total |
100%
(3/3)
|
50%
(3/6)
|
40%
(10/25)
|
76.7%
(89/116)
|
package it.unibo.tuprolog.argumentation.core.primitives.utils
import it.unibo.tuprolog.core.List
import it.unibo.tuprolog.core.Substitution
import it.unibo.tuprolog.core.Term
import it.unibo.tuprolog.core.Var
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.primitive.Primitive
import it.unibo.tuprolog.solve.primitive.Solve
/**
* appendFast(+List1, +List2, -List): List is List1 followed by List2, in one step
*/
internal object AppendFast : Primitive {
val signature: Signature = Signature("appendFast", 3)
override fun solve(request: Solve.Request<ExecutionContext>): Sequence<Solve.Response> {
val list1: Term = request.arguments[0]
val list2: Term = request.arguments[1]
val res: Term = request.arguments[2]
if (list1 !is List) {
throw TypeError.forGoal(
request.context,
request.signature,
TypeError.Expected.LIST,
list1,
)
}
if (list2 !is List) {
throw TypeError.forGoal(
request.context,
request.signature,
TypeError.Expected.LIST,
list2,
)
}
if (res !is Var) {
throw TypeError.forGoal(
request.context,
request.signature,
TypeError.Expected.VARIABLE,
res,
)
}
return sequence {
yield(
request.replyWith(Substitution.of(res, List.of(list1.toList() + list2.toList()))),
)
}
}
}