Program: 74707
Project: 74707
Buggy source:
/** 
 * Output the fixpoint value of the sum of the input bits.  If there is no inputs, then produce null.
 * @exception IllegalActionException If there is no director.
 */
public void fire() throws IllegalActionException {
  super.fire();
  FixToken result=null;
  Precision precision=new Precision(0,1,0);
  if (A.isKnown() && B.isKnown()) {
    result=new FixToken(0,precision);
    FixToken inputA=new FixToken();
    FixToken inputB=new FixToken();
    if (A.hasToken(0)) {
      inputA=(FixToken)A.get(0);
    }
    if (B.hasToken(0)) {
      inputB=(FixToken)B.get(0);
    }
    if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB)) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (!inputA.equals(inputB)) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.isLessThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB) || inputA.isLessThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.isGreaterThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB) || inputA.isGreaterThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
    sendOutput(output,0,result);
  }
 else {
    output.resend(0);
  }
}

Fixed version (ground truth):
/** 
 * Output the fixpoint value of the sum of the input bits.  If there is no inputs, then produce null.
 * @exception IllegalActionException If there is no director.
 */
public void fire() throws IllegalActionException {
  super.fire();
  FixToken result=null;
  Precision precision=new Precision(0,1,0);
  if (A.isKnown() && B.isKnown()) {
    result=new FixToken(0,precision);
    FixToken inputA=new FixToken();
    FixToken inputB=new FixToken();
    if (A.hasToken(0)) {
      inputA=(FixToken)A.get(0);
    }
    if (B.hasToken(0)) {
      inputB=(FixToken)B.get(0);
    }
    if (inputA.fixValue().getPrecision().getNumberOfBits() != inputB.fixValue().getPrecision().getNumberOfBits()) {
      throw new IllegalActionException(this,"String_Node_Str");
    }
    if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB)) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (!inputA.equals(inputB)) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.isLessThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB) || inputA.isLessThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.isGreaterThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
 else     if (operation.getExpression().equals("String_Node_Str")) {
      if (inputA.equals(inputB) || inputA.isGreaterThan(inputB).booleanValue()) {
        result=new FixToken(1,precision);
      }
    }
    sendOutput(output,0,result);
  }
 else {
    output.resend(0);
  }
}