Testgen (Faultlist)
begin
Set primary objectives ( );/*find all the primary
 objectives to be justified*/
 Set all other lines to X
 if (there is conflict between two or more objectives on the fan-out branches of
 the same stem) then
   begin
     Drop the aggressor objectives;
     If (all aggressors objectives dropped)
      begin
       then test not possible;
       Exit
      End
   end
Imply ( ) /*with respect to the victim and remaining aggressors and other inputs*/
Propagate ( ) /*Propagate the victim along the chosen target path*/
if (there is conflict between the objectives) then
   begin
    Drop the aggressor objectives;
    If (all aggressor objectives dropped) then
     begin
      test not possible
      Exit( )
     end
   end
Multiple back trace ( )
Unassigned primary inputs are assigned
Imply ()/*with respect to primary inputs*/
Propagate ( );/*Propagate the delay in the victim along the target path*/
if (delay effect at PO)
      test is found;
else
   begin
      no test possible
      Exit( )
   end
end
Multiple back trace ( )
begin
 repeat
begin
 remove one entry from the current objective;
 if (objective follows a fan-out point) then
   begin
    if (there is a contradiction with a previously assigned value)
      begin
       move the objective to a secondary stack
      else
      move the objective to a primary stack
      end
    else
      begin
       Continue tracing
       Select an input of gate with value x
       add to the current objective
       return multiple backtrace
      end
   end
end
until current objectives null
 if (primary stack objective null) then
  begin
   remove the highest level objective
   assign most requested value;
   add to the current objective
   return multiple back trace ( )
  end
 if (secondary stack objective null)
  begin
   remove the highest level objective
   repeat
    begin
     assign value to the fan-out point
     Imply ( )
     if (success)
      begin
       add to the current objective
       return multiple back trace ( )
      end
     else
      assign next value
    end
   until all values assigned
  if (assignment not possible)
    begin
     Drop the aggressor objectives;
      If (all aggressor objectives dropped) then
       begin
        test not possible
        Exit( )
       end
    end
  end
 end
Algorithm 1: Pseudocode for the test generation algorithm.