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()))),
             )
         }
     }
 }