=== tests/cases/conformance/expressions/binaryOperators/arithmeticOperator/arithmeticOperatorWithEnumUnion.ts === // operands of an enum type are treated as having the primitive type Number. enum E { >E : E a, >a : E b >b : E } enum F { >F : F c, >c : F d >d : F } var a: any; >a : any var b: number; >b : number var c: E | F; >c : E | F >E : E >F : F // operator * var ra1 = c * a; >ra1 : number >c * a : number >c : E | F >a : any var ra2 = c * b; >ra2 : number >c * b : number >c : E | F >b : number var ra3 = c * c; >ra3 : number >c * c : number >c : E | F >c : E | F var ra4 = a * c; >ra4 : number >a * c : number >a : any >c : E | F var ra5 = b * c; >ra5 : number >b * c : number >b : number >c : E | F var ra6 = E.a * a; >ra6 : number >E.a * a : number >E.a : E >E : typeof E >a : E >a : any var ra7 = E.a * b; >ra7 : number >E.a * b : number >E.a : E >E : typeof E >a : E >b : number var ra8 = E.a * E.b; >ra8 : number >E.a * E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var ra9 = E.a * 1; >ra9 : number >E.a * 1 : number >E.a : E >E : typeof E >a : E >1 : number var ra10 = a * E.b; >ra10 : number >a * E.b : number >a : any >E.b : E >E : typeof E >b : E var ra11 = b * E.b; >ra11 : number >b * E.b : number >b : number >E.b : E >E : typeof E >b : E var ra12 = 1 * E.b; >ra12 : number >1 * E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator / var rb1 = c / a; >rb1 : number >c / a : number >c : E | F >a : any var rb2 = c / b; >rb2 : number >c / b : number >c : E | F >b : number var rb3 = c / c; >rb3 : number >c / c : number >c : E | F >c : E | F var rb4 = a / c; >rb4 : number >a / c : number >a : any >c : E | F var rb5 = b / c; >rb5 : number >b / c : number >b : number >c : E | F var rb6 = E.a / a; >rb6 : number >E.a / a : number >E.a : E >E : typeof E >a : E >a : any var rb7 = E.a / b; >rb7 : number >E.a / b : number >E.a : E >E : typeof E >a : E >b : number var rb8 = E.a / E.b; >rb8 : number >E.a / E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rb9 = E.a / 1; >rb9 : number >E.a / 1 : number >E.a : E >E : typeof E >a : E >1 : number var rb10 = a / E.b; >rb10 : number >a / E.b : number >a : any >E.b : E >E : typeof E >b : E var rb11 = b / E.b; >rb11 : number >b / E.b : number >b : number >E.b : E >E : typeof E >b : E var rb12 = 1 / E.b; >rb12 : number >1 / E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator % var rc1 = c % a; >rc1 : number >c % a : number >c : E | F >a : any var rc2 = c % b; >rc2 : number >c % b : number >c : E | F >b : number var rc3 = c % c; >rc3 : number >c % c : number >c : E | F >c : E | F var rc4 = a % c; >rc4 : number >a % c : number >a : any >c : E | F var rc5 = b % c; >rc5 : number >b % c : number >b : number >c : E | F var rc6 = E.a % a; >rc6 : number >E.a % a : number >E.a : E >E : typeof E >a : E >a : any var rc7 = E.a % b; >rc7 : number >E.a % b : number >E.a : E >E : typeof E >a : E >b : number var rc8 = E.a % E.b; >rc8 : number >E.a % E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rc9 = E.a % 1; >rc9 : number >E.a % 1 : number >E.a : E >E : typeof E >a : E >1 : number var rc10 = a % E.b; >rc10 : number >a % E.b : number >a : any >E.b : E >E : typeof E >b : E var rc11 = b % E.b; >rc11 : number >b % E.b : number >b : number >E.b : E >E : typeof E >b : E var rc12 = 1 % E.b; >rc12 : number >1 % E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator - var rd1 = c - a; >rd1 : number >c - a : number >c : E | F >a : any var rd2 = c - b; >rd2 : number >c - b : number >c : E | F >b : number var rd3 = c - c; >rd3 : number >c - c : number >c : E | F >c : E | F var rd4 = a - c; >rd4 : number >a - c : number >a : any >c : E | F var rd5 = b - c; >rd5 : number >b - c : number >b : number >c : E | F var rd6 = E.a - a; >rd6 : number >E.a - a : number >E.a : E >E : typeof E >a : E >a : any var rd7 = E.a - b; >rd7 : number >E.a - b : number >E.a : E >E : typeof E >a : E >b : number var rd8 = E.a - E.b; >rd8 : number >E.a - E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rd9 = E.a - 1; >rd9 : number >E.a - 1 : number >E.a : E >E : typeof E >a : E >1 : number var rd10 = a - E.b; >rd10 : number >a - E.b : number >a : any >E.b : E >E : typeof E >b : E var rd11 = b - E.b; >rd11 : number >b - E.b : number >b : number >E.b : E >E : typeof E >b : E var rd12 = 1 - E.b; >rd12 : number >1 - E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator << var re1 = c << a; >re1 : number >c << a : number >c : E | F >a : any var re2 = c << b; >re2 : number >c << b : number >c : E | F >b : number var re3 = c << c; >re3 : number >c << c : number >c : E | F >c : E | F var re4 = a << c; >re4 : number >a << c : number >a : any >c : E | F var re5 = b << c; >re5 : number >b << c : number >b : number >c : E | F var re6 = E.a << a; >re6 : number >E.a << a : number >E.a : E >E : typeof E >a : E >a : any var re7 = E.a << b; >re7 : number >E.a << b : number >E.a : E >E : typeof E >a : E >b : number var re8 = E.a << E.b; >re8 : number >E.a << E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var re9 = E.a << 1; >re9 : number >E.a << 1 : number >E.a : E >E : typeof E >a : E >1 : number var re10 = a << E.b; >re10 : number >a << E.b : number >a : any >E.b : E >E : typeof E >b : E var re11 = b << E.b; >re11 : number >b << E.b : number >b : number >E.b : E >E : typeof E >b : E var re12 = 1 << E.b; >re12 : number >1 << E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator >> var rf1 = c >> a; >rf1 : number >c >> a : number >c : E | F >a : any var rf2 = c >> b; >rf2 : number >c >> b : number >c : E | F >b : number var rf3 = c >> c; >rf3 : number >c >> c : number >c : E | F >c : E | F var rf4 = a >> c; >rf4 : number >a >> c : number >a : any >c : E | F var rf5 = b >> c; >rf5 : number >b >> c : number >b : number >c : E | F var rf6 = E.a >> a; >rf6 : number >E.a >> a : number >E.a : E >E : typeof E >a : E >a : any var rf7 = E.a >> b; >rf7 : number >E.a >> b : number >E.a : E >E : typeof E >a : E >b : number var rf8 = E.a >> E.b; >rf8 : number >E.a >> E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rf9 = E.a >> 1; >rf9 : number >E.a >> 1 : number >E.a : E >E : typeof E >a : E >1 : number var rf10 = a >> E.b; >rf10 : number >a >> E.b : number >a : any >E.b : E >E : typeof E >b : E var rf11 = b >> E.b; >rf11 : number >b >> E.b : number >b : number >E.b : E >E : typeof E >b : E var rf12 = 1 >> E.b; >rf12 : number >1 >> E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator >>> var rg1 = c >>> a; >rg1 : number >c >>> a : number >c : E | F >a : any var rg2 = c >>> b; >rg2 : number >c >>> b : number >c : E | F >b : number var rg3 = c >>> c; >rg3 : number >c >>> c : number >c : E | F >c : E | F var rg4 = a >>> c; >rg4 : number >a >>> c : number >a : any >c : E | F var rg5 = b >>> c; >rg5 : number >b >>> c : number >b : number >c : E | F var rg6 = E.a >>> a; >rg6 : number >E.a >>> a : number >E.a : E >E : typeof E >a : E >a : any var rg7 = E.a >>> b; >rg7 : number >E.a >>> b : number >E.a : E >E : typeof E >a : E >b : number var rg8 = E.a >>> E.b; >rg8 : number >E.a >>> E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rg9 = E.a >>> 1; >rg9 : number >E.a >>> 1 : number >E.a : E >E : typeof E >a : E >1 : number var rg10 = a >>> E.b; >rg10 : number >a >>> E.b : number >a : any >E.b : E >E : typeof E >b : E var rg11 = b >>> E.b; >rg11 : number >b >>> E.b : number >b : number >E.b : E >E : typeof E >b : E var rg12 = 1 >>> E.b; >rg12 : number >1 >>> E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator & var rh1 = c & a; >rh1 : number >c & a : number >c : E | F >a : any var rh2 = c & b; >rh2 : number >c & b : number >c : E | F >b : number var rh3 = c & c; >rh3 : number >c & c : number >c : E | F >c : E | F var rh4 = a & c; >rh4 : number >a & c : number >a : any >c : E | F var rh5 = b & c; >rh5 : number >b & c : number >b : number >c : E | F var rh6 = E.a & a; >rh6 : number >E.a & a : number >E.a : E >E : typeof E >a : E >a : any var rh7 = E.a & b; >rh7 : number >E.a & b : number >E.a : E >E : typeof E >a : E >b : number var rh8 = E.a & E.b; >rh8 : number >E.a & E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rh9 = E.a & 1; >rh9 : number >E.a & 1 : number >E.a : E >E : typeof E >a : E >1 : number var rh10 = a & E.b; >rh10 : number >a & E.b : number >a : any >E.b : E >E : typeof E >b : E var rh11 = b & E.b; >rh11 : number >b & E.b : number >b : number >E.b : E >E : typeof E >b : E var rh12 = 1 & E.b; >rh12 : number >1 & E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator ^ var ri1 = c ^ a; >ri1 : number >c ^ a : number >c : E | F >a : any var ri2 = c ^ b; >ri2 : number >c ^ b : number >c : E | F >b : number var ri3 = c ^ c; >ri3 : number >c ^ c : number >c : E | F >c : E | F var ri4 = a ^ c; >ri4 : number >a ^ c : number >a : any >c : E | F var ri5 = b ^ c; >ri5 : number >b ^ c : number >b : number >c : E | F var ri6 = E.a ^ a; >ri6 : number >E.a ^ a : number >E.a : E >E : typeof E >a : E >a : any var ri7 = E.a ^ b; >ri7 : number >E.a ^ b : number >E.a : E >E : typeof E >a : E >b : number var ri8 = E.a ^ E.b; >ri8 : number >E.a ^ E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var ri9 = E.a ^ 1; >ri9 : number >E.a ^ 1 : number >E.a : E >E : typeof E >a : E >1 : number var ri10 = a ^ E.b; >ri10 : number >a ^ E.b : number >a : any >E.b : E >E : typeof E >b : E var ri11 = b ^ E.b; >ri11 : number >b ^ E.b : number >b : number >E.b : E >E : typeof E >b : E var ri12 = 1 ^ E.b; >ri12 : number >1 ^ E.b : number >1 : number >E.b : E >E : typeof E >b : E // operator | var rj1 = c | a; >rj1 : number >c | a : number >c : E | F >a : any var rj2 = c | b; >rj2 : number >c | b : number >c : E | F >b : number var rj3 = c | c; >rj3 : number >c | c : number >c : E | F >c : E | F var rj4 = a | c; >rj4 : number >a | c : number >a : any >c : E | F var rj5 = b | c; >rj5 : number >b | c : number >b : number >c : E | F var rj6 = E.a | a; >rj6 : number >E.a | a : number >E.a : E >E : typeof E >a : E >a : any var rj7 = E.a | b; >rj7 : number >E.a | b : number >E.a : E >E : typeof E >a : E >b : number var rj8 = E.a | E.b; >rj8 : number >E.a | E.b : number >E.a : E >E : typeof E >a : E >E.b : E >E : typeof E >b : E var rj9 = E.a | 1; >rj9 : number >E.a | 1 : number >E.a : E >E : typeof E >a : E >1 : number var rj10 = a | E.b; >rj10 : number >a | E.b : number >a : any >E.b : E >E : typeof E >b : E var rj11 = b | E.b; >rj11 : number >b | E.b : number >b : number >E.b : E >E : typeof E >b : E var rj12 = 1 | E.b; >rj12 : number >1 | E.b : number >1 : number >E.b : E >E : typeof E >b : E