Binary operators

/// binaryops.td
 
#ifndef BINARYOPS
#define BINARYOPS
 
include "setup.td"
  
def BinaryOps {
  // !add(a, b, ...) // any number of operands
  int add_v = !add(10, 50, -59);  // 1
  assert !eq(add_v, 1), errorStr;
   
  // Binary arithmetic operators of the form
  // !op(a, b)
  int sub_v = !sub(100, 99); // 1
  assert !eq(sub_v, 1), errorStr;
  
  int mul_v = !mul(2, 3, 4); // 24
  assert !eq(mul_v, 24), errorStr;
  
  int div_v = !div(100, 100);  
  assert !eq(div_v, 1), errorStr;
   
  // Binary logical operators of the form
  // !op(a, b)
  bit eq_v = !eq(10, 10); // true, converted to 1
  assert eq_v, errorStr;
  
  bit ne_v = !ne(10, 11); // 1
  assert ne_v, errorStr;
  
  bit gt_v = !gt(11, 10); // 1
  assert gt_v, errorStr;
  
  bit ge_v = !ge(11, 10); // 1
  assert ge_v, errorStr;
  
  bit lt_v = !lt(10, 11); // 1
  assert lt_v, errorStr;
  
  bit le_v = !le(10, 11); // 1
  assert le_v, errorStr;
     
  // Logical operators of the form
  // !op(a, b, ...)
  bit and_v = !and(true, true, true); // 1
  assert and_v, errorStr;
  
  bit or_v = !or(false, false, false, true); // 1
  assert or_v, errorStr;
  
  bit xor_v = !xor(true, false, false, false, false); // 1
  assert xor_v, errorStr;
}
 
#endif // BINARYOPS