text: //// [arithmeticOperatorWithUndefinedValueAndValidOperands.ts]
  // If one operand is the undefined or undefined value, it is treated as having the type of the
  // other operand.
  
  enum E {
      a,
      b
  }
  
  var a: any;
  var b: number;
  
  // operator *
  var ra1 = undefined * a;
  var ra2 = undefined * b;
  var ra3 = undefined * 1;
  var ra4 = undefined * E.a;
  var ra5 = a * undefined;
  var ra6 = b * undefined;
  var ra7 = 0 * undefined;
  var ra8 = E.b * undefined;
  
  // operator /
  var rb1 = undefined / a;
  var rb2 = undefined / b;
  var rb3 = undefined / 1;
  var rb4 = undefined / E.a;
  var rb5 = a / undefined;
  var rb6 = b / undefined;
  var rb7 = 0 / undefined;
  var rb8 = E.b / undefined;
  
  // operator %
  var rc1 = undefined % a;
  var rc2 = undefined % b;
  var rc3 = undefined % 1;
  var rc4 = undefined % E.a;
  var rc5 = a % undefined;
  var rc6 = b % undefined;
  var rc7 = 0 % undefined;
  var rc8 = E.b % undefined;
  
  // operator -
  var rd1 = undefined - a;
  var rd2 = undefined - b;
  var rd3 = undefined - 1;
  var rd4 = undefined - E.a;
  var rd5 = a - undefined;
  var rd6 = b - undefined;
  var rd7 = 0 - undefined;
  var rd8 = E.b - undefined;
  
  // operator <<
  var re1 = undefined << a;
  var re2 = undefined << b;
  var re3 = undefined << 1;
  var re4 = undefined << E.a;
  var re5 = a << undefined;
  var re6 = b << undefined;
  var re7 = 0 << undefined;
  var re8 = E.b << undefined;
  
  // operator >>
  var rf1 = undefined >> a;
  var rf2 = undefined >> b;
  var rf3 = undefined >> 1;
  var rf4 = undefined >> E.a;
  var rf5 = a >> undefined;
  var rf6 = b >> undefined;
  var rf7 = 0 >> undefined;
  var rf8 = E.b >> undefined;
  
  // operator >>>
  var rg1 = undefined >>> a;
  var rg2 = undefined >>> b;
  var rg3 = undefined >>> 1;
  var rg4 = undefined >>> E.a;
  var rg5 = a >>> undefined;
  var rg6 = b >>> undefined;
  var rg7 = 0 >>> undefined;
  var rg8 = E.b >>> undefined;
  
  // operator &
  var rh1 = undefined & a;
  var rh2 = undefined & b;
  var rh3 = undefined & 1;
  var rh4 = undefined & E.a;
  var rh5 = a & undefined;
  var rh6 = b & undefined;
  var rh7 = 0 & undefined;
  var rh8 = E.b & undefined;
  
  // operator ^
  var ri1 = undefined ^ a;
  var ri2 = undefined ^ b;
  var ri3 = undefined ^ 1;
  var ri4 = undefined ^ E.a;
  var ri5 = a ^ undefined;
  var ri6 = b ^ undefined;
  var ri7 = 0 ^ undefined;
  var ri8 = E.b ^ undefined;
  
  // operator |
  var rj1 = undefined | a;
  var rj2 = undefined | b;
  var rj3 = undefined | 1;
  var rj4 = undefined | E.a;
  var rj5 = a | undefined;
  var rj6 = b | undefined;
  var rj7 = 0 | undefined;
  var rj8 = E.b | undefined;
  
  //// [arithmeticOperatorWithUndefinedValueAndValidOperands.js]
  // If one operand is the undefined or undefined value, it is treated as having the type of the
  // other operand.
  var E;
  (function (E) {
      E[E["a"] = 0] = "a";
      E[E["b"] = 1] = "b";
  })(E || (E = {}));
  
  var a;
  var b;
  
  // operator *
  var ra1 = undefined * a;
  var ra2 = undefined * b;
  var ra3 = undefined * 1;
  var ra4 = undefined * 0 /* a */;
  var ra5 = a * undefined;
  var ra6 = b * undefined;
  var ra7 = 0 * undefined;
  var ra8 = 1 /* b */ * undefined;
  
  // operator /
  var rb1 = undefined / a;
  var rb2 = undefined / b;
  var rb3 = undefined / 1;
  var rb4 = undefined / 0 /* a */;
  var rb5 = a / undefined;
  var rb6 = b / undefined;
  var rb7 = 0 / undefined;
  var rb8 = 1 /* b */ / undefined;
  
  // operator %
  var rc1 = undefined % a;
  var rc2 = undefined % b;
  var rc3 = undefined % 1;
  var rc4 = undefined % 0 /* a */;
  var rc5 = a % undefined;
  var rc6 = b % undefined;
  var rc7 = 0 % undefined;
  var rc8 = 1 /* b */ % undefined;
  
  // operator -
  var rd1 = undefined - a;
  var rd2 = undefined - b;
  var rd3 = undefined - 1;
  var rd4 = undefined - 0 /* a */;
  var rd5 = a - undefined;
  var rd6 = b - undefined;
  var rd7 = 0 - undefined;
  var rd8 = 1 /* b */ - undefined;
  
  // operator <<
  var re1 = undefined << a;
  var re2 = undefined << b;
  var re3 = undefined << 1;
  var re4 = undefined << 0 /* a */;
  var re5 = a << undefined;
  var re6 = b << undefined;
  var re7 = 0 << undefined;
  var re8 = 1 /* b */ << undefined;
  
  // operator >>
  var rf1 = undefined >> a;
  var rf2 = undefined >> b;
  var rf3 = undefined >> 1;
  var rf4 = undefined >> 0 /* a */;
  var rf5 = a >> undefined;
  var rf6 = b >> undefined;
  var rf7 = 0 >> undefined;
  var rf8 = 1 /* b */ >> undefined;
  
  // operator >>>
  var rg1 = undefined >>> a;
  var rg2 = undefined >>> b;
  var rg3 = undefined >>> 1;
  var rg4 = undefined >>> 0 /* a */;
  var rg5 = a >>> undefined;
  var rg6 = b >>> undefined;
  var rg7 = 0 >>> undefined;
  var rg8 = 1 /* b */ >>> undefined;
  
  // operator &
  var rh1 = undefined & a;
  var rh2 = undefined & b;
  var rh3 = undefined & 1;
  var rh4 = undefined & 0 /* a */;
  var rh5 = a & undefined;
  var rh6 = b & undefined;
  var rh7 = 0 & undefined;
  var rh8 = 1 /* b */ & undefined;
  
  // operator ^
  var ri1 = undefined ^ a;
  var ri2 = undefined ^ b;
  var ri3 = undefined ^ 1;
  var ri4 = undefined ^ 0 /* a */;
  var ri5 = a ^ undefined;
  var ri6 = b ^ undefined;
  var ri7 = 0 ^ undefined;
  var ri8 = 1 /* b */ ^ undefined;
  
  // operator |
  var rj1 = undefined | a;
  var rj2 = undefined | b;
  var rj3 = undefined | 1;
  var rj4 = undefined | 0 /* a */;
  var rj5 = a | undefined;
  var rj6 = b | undefined;
  var rj7 = 0 | undefined;
  var rj8 = 1 /* b */ | undefined;
  