Coverage Summary for Class: ContextBranch (it.unibo.tuprolog.argumentation.core.primitives.context)

Class Class, % Method, % Branch, % Line, % Instruction, %
ContextBranch 100% (1/1) 100% (2/2) 100% (4/4) 100% (8/8) 100% (65/65)


 package it.unibo.tuprolog.argumentation.core.primitives.context
 
 import it.unibo.tuprolog.argumentation.core.primitives.PrimitiveWithSignature
 import it.unibo.tuprolog.argumentation.core.runtime.Arg2pUnificator
 import it.unibo.tuprolog.argumentation.core.runtime.context.ContextBranches
 import it.unibo.tuprolog.argumentation.core.runtime.context.branchArgument
 import it.unibo.tuprolog.core.Integer
 import it.unibo.tuprolog.solve.ExecutionContext
 import it.unibo.tuprolog.solve.Signature
 import it.unibo.tuprolog.solve.primitive.Solve
 
 /** context_branch(+From, ?Branch): a new branch of From, made active, only made if its identifier unifies with Branch */
 internal class ContextBranch(
     private val branches: ContextBranches,
 ) : PrimitiveWithSignature {
     override val signature = Signature("context_branch", 2)
 
     override fun solve(request: Solve.Request<ExecutionContext>): Sequence<Solve.Response> {
         val from = request.branchArgument(0)
         val unifier = Arg2pUnificator.mgu(request.arguments[1], Integer.of(branches.nextBranch))
         if (branches.storeOf(from) == null || !unifier.isSuccess) return sequenceOf(request.replyFail())
         branches.branch(from)
         return sequenceOf(request.replyWith(unifier))
     }
 }