diff --git a/tests/baselines/reference/enumMemberReduction.js b/tests/baselines/reference/enumMemberReduction.js new file mode 100644 index 0000000000000..9687432d1fe1b --- /dev/null +++ b/tests/baselines/reference/enumMemberReduction.js @@ -0,0 +1,90 @@ +//// [enumMemberReduction.ts] +enum MyEnum { + A, + B, + C, +} + +enum MyStringEnum { + A = "a", + B = "b", + C = "c", +} + +enum MyStringEnumWithEmpty { + A = "", + B = "b", + C = "c", +} + +export function fn(optionalEnum: MyEnum | undefined) { + return optionalEnum ?? MyEnum.A; +} + +export function fn2(optionalEnum: MyEnum | undefined) { + return optionalEnum || MyEnum.B; +} + +export function fn3(optionalEnum?: MyEnum) { + return optionalEnum ?? MyEnum.A; +} + +export function fn4(optionalEnum?: MyEnum) { + return optionalEnum || MyEnum.B; +} + +export function fn5(optionalEnum?: MyStringEnum) { + return optionalEnum || MyStringEnum.B; +} + +export function fn6(optionalEnum?: MyStringEnumWithEmpty) { + return optionalEnum || MyStringEnumWithEmpty.B; +} + + +//// [enumMemberReduction.js] +"use strict"; +exports.__esModule = true; +exports.fn6 = exports.fn5 = exports.fn4 = exports.fn3 = exports.fn2 = exports.fn = void 0; +var MyEnum; +(function (MyEnum) { + MyEnum[MyEnum["A"] = 0] = "A"; + MyEnum[MyEnum["B"] = 1] = "B"; + MyEnum[MyEnum["C"] = 2] = "C"; +})(MyEnum || (MyEnum = {})); +var MyStringEnum; +(function (MyStringEnum) { + MyStringEnum["A"] = "a"; + MyStringEnum["B"] = "b"; + MyStringEnum["C"] = "c"; +})(MyStringEnum || (MyStringEnum = {})); +var MyStringEnumWithEmpty; +(function (MyStringEnumWithEmpty) { + MyStringEnumWithEmpty["A"] = ""; + MyStringEnumWithEmpty["B"] = "b"; + MyStringEnumWithEmpty["C"] = "c"; +})(MyStringEnumWithEmpty || (MyStringEnumWithEmpty = {})); +function fn(optionalEnum) { + return optionalEnum !== null && optionalEnum !== void 0 ? optionalEnum : MyEnum.A; +} +exports.fn = fn; +function fn2(optionalEnum) { + return optionalEnum || MyEnum.B; +} +exports.fn2 = fn2; +function fn3(optionalEnum) { + return optionalEnum !== null && optionalEnum !== void 0 ? optionalEnum : MyEnum.A; +} +exports.fn3 = fn3; +function fn4(optionalEnum) { + return optionalEnum || MyEnum.B; +} +exports.fn4 = fn4; +function fn5(optionalEnum) { + return optionalEnum || MyStringEnum.B; +} +exports.fn5 = fn5; +function fn6(optionalEnum) { + return optionalEnum || MyStringEnumWithEmpty.B; +} +exports.fn6 = fn6; diff --git a/tests/baselines/reference/enumMemberReduction.symbols b/tests/baselines/reference/enumMemberReduction.symbols new file mode 100644 index 0000000000000..7a0939287ae46 --- /dev/null +++ b/tests/baselines/reference/enumMemberReduction.symbols @@ -0,0 +1,112 @@ +=== tests/cases/compiler/enumMemberReduction.ts === +enum MyEnum { +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) + + A, +>A : Symbol(MyEnum.A, Decl(enumMemberReduction.ts, 0, 13)) + + B, +>B : Symbol(MyEnum.B, Decl(enumMemberReduction.ts, 1, 4)) + + C, +>C : Symbol(MyEnum.C, Decl(enumMemberReduction.ts, 2, 4)) +} + +enum MyStringEnum { +>MyStringEnum : Symbol(MyStringEnum, Decl(enumMemberReduction.ts, 4, 1)) + + A = "a", +>A : Symbol(MyStringEnum.A, Decl(enumMemberReduction.ts, 6, 19)) + + B = "b", +>B : Symbol(MyStringEnum.B, Decl(enumMemberReduction.ts, 7, 10)) + + C = "c", +>C : Symbol(MyStringEnum.C, Decl(enumMemberReduction.ts, 8, 10)) +} + +enum MyStringEnumWithEmpty { +>MyStringEnumWithEmpty : Symbol(MyStringEnumWithEmpty, Decl(enumMemberReduction.ts, 10, 1)) + + A = "", +>A : Symbol(MyStringEnumWithEmpty.A, Decl(enumMemberReduction.ts, 12, 28)) + + B = "b", +>B : Symbol(MyStringEnumWithEmpty.B, Decl(enumMemberReduction.ts, 13, 9)) + + C = "c", +>C : Symbol(MyStringEnumWithEmpty.C, Decl(enumMemberReduction.ts, 14, 10)) +} + +export function fn(optionalEnum: MyEnum | undefined) { +>fn : Symbol(fn, Decl(enumMemberReduction.ts, 16, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 18, 19)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) + + return optionalEnum ?? MyEnum.A; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 18, 19)) +>MyEnum.A : Symbol(MyEnum.A, Decl(enumMemberReduction.ts, 0, 13)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) +>A : Symbol(MyEnum.A, Decl(enumMemberReduction.ts, 0, 13)) +} + +export function fn2(optionalEnum: MyEnum | undefined) { +>fn2 : Symbol(fn2, Decl(enumMemberReduction.ts, 20, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 22, 20)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) + + return optionalEnum || MyEnum.B; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 22, 20)) +>MyEnum.B : Symbol(MyEnum.B, Decl(enumMemberReduction.ts, 1, 4)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) +>B : Symbol(MyEnum.B, Decl(enumMemberReduction.ts, 1, 4)) +} + +export function fn3(optionalEnum?: MyEnum) { +>fn3 : Symbol(fn3, Decl(enumMemberReduction.ts, 24, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 26, 20)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) + + return optionalEnum ?? MyEnum.A; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 26, 20)) +>MyEnum.A : Symbol(MyEnum.A, Decl(enumMemberReduction.ts, 0, 13)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) +>A : Symbol(MyEnum.A, Decl(enumMemberReduction.ts, 0, 13)) +} + +export function fn4(optionalEnum?: MyEnum) { +>fn4 : Symbol(fn4, Decl(enumMemberReduction.ts, 28, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 30, 20)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) + + return optionalEnum || MyEnum.B; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 30, 20)) +>MyEnum.B : Symbol(MyEnum.B, Decl(enumMemberReduction.ts, 1, 4)) +>MyEnum : Symbol(MyEnum, Decl(enumMemberReduction.ts, 0, 0)) +>B : Symbol(MyEnum.B, Decl(enumMemberReduction.ts, 1, 4)) +} + +export function fn5(optionalEnum?: MyStringEnum) { +>fn5 : Symbol(fn5, Decl(enumMemberReduction.ts, 32, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 34, 20)) +>MyStringEnum : Symbol(MyStringEnum, Decl(enumMemberReduction.ts, 4, 1)) + + return optionalEnum || MyStringEnum.B; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 34, 20)) +>MyStringEnum.B : Symbol(MyStringEnum.B, Decl(enumMemberReduction.ts, 7, 10)) +>MyStringEnum : Symbol(MyStringEnum, Decl(enumMemberReduction.ts, 4, 1)) +>B : Symbol(MyStringEnum.B, Decl(enumMemberReduction.ts, 7, 10)) +} + +export function fn6(optionalEnum?: MyStringEnumWithEmpty) { +>fn6 : Symbol(fn6, Decl(enumMemberReduction.ts, 36, 1)) +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 38, 20)) +>MyStringEnumWithEmpty : Symbol(MyStringEnumWithEmpty, Decl(enumMemberReduction.ts, 10, 1)) + + return optionalEnum || MyStringEnumWithEmpty.B; +>optionalEnum : Symbol(optionalEnum, Decl(enumMemberReduction.ts, 38, 20)) +>MyStringEnumWithEmpty.B : Symbol(MyStringEnumWithEmpty.B, Decl(enumMemberReduction.ts, 13, 9)) +>MyStringEnumWithEmpty : Symbol(MyStringEnumWithEmpty, Decl(enumMemberReduction.ts, 10, 1)) +>B : Symbol(MyStringEnumWithEmpty.B, Decl(enumMemberReduction.ts, 13, 9)) +} + diff --git a/tests/baselines/reference/enumMemberReduction.types b/tests/baselines/reference/enumMemberReduction.types new file mode 100644 index 0000000000000..6eb1530601e18 --- /dev/null +++ b/tests/baselines/reference/enumMemberReduction.types @@ -0,0 +1,118 @@ +=== tests/cases/compiler/enumMemberReduction.ts === +enum MyEnum { +>MyEnum : MyEnum + + A, +>A : MyEnum.A + + B, +>B : MyEnum.B + + C, +>C : MyEnum.C +} + +enum MyStringEnum { +>MyStringEnum : MyStringEnum + + A = "a", +>A : MyStringEnum.A +>"a" : "a" + + B = "b", +>B : MyStringEnum.B +>"b" : "b" + + C = "c", +>C : MyStringEnum.C +>"c" : "c" +} + +enum MyStringEnumWithEmpty { +>MyStringEnumWithEmpty : MyStringEnumWithEmpty + + A = "", +>A : MyStringEnumWithEmpty.A +>"" : "" + + B = "b", +>B : MyStringEnumWithEmpty.B +>"b" : "b" + + C = "c", +>C : MyStringEnumWithEmpty.C +>"c" : "c" +} + +export function fn(optionalEnum: MyEnum | undefined) { +>fn : (optionalEnum: MyEnum | undefined) => MyEnum +>optionalEnum : MyEnum + + return optionalEnum ?? MyEnum.A; +>optionalEnum ?? MyEnum.A : MyEnum +>optionalEnum : MyEnum +>MyEnum.A : MyEnum.A +>MyEnum : typeof MyEnum +>A : MyEnum.A +} + +export function fn2(optionalEnum: MyEnum | undefined) { +>fn2 : (optionalEnum: MyEnum | undefined) => MyEnum.B | MyEnum.C +>optionalEnum : MyEnum + + return optionalEnum || MyEnum.B; +>optionalEnum || MyEnum.B : MyEnum.B | MyEnum.C +>optionalEnum : MyEnum +>MyEnum.B : MyEnum.B +>MyEnum : typeof MyEnum +>B : MyEnum.B +} + +export function fn3(optionalEnum?: MyEnum) { +>fn3 : (optionalEnum?: MyEnum) => MyEnum +>optionalEnum : MyEnum + + return optionalEnum ?? MyEnum.A; +>optionalEnum ?? MyEnum.A : MyEnum +>optionalEnum : MyEnum +>MyEnum.A : MyEnum.A +>MyEnum : typeof MyEnum +>A : MyEnum.A +} + +export function fn4(optionalEnum?: MyEnum) { +>fn4 : (optionalEnum?: MyEnum) => MyEnum.B | MyEnum.C +>optionalEnum : MyEnum + + return optionalEnum || MyEnum.B; +>optionalEnum || MyEnum.B : MyEnum.B | MyEnum.C +>optionalEnum : MyEnum +>MyEnum.B : MyEnum.B +>MyEnum : typeof MyEnum +>B : MyEnum.B +} + +export function fn5(optionalEnum?: MyStringEnum) { +>fn5 : (optionalEnum?: MyStringEnum) => MyStringEnum +>optionalEnum : MyStringEnum + + return optionalEnum || MyStringEnum.B; +>optionalEnum || MyStringEnum.B : MyStringEnum +>optionalEnum : MyStringEnum +>MyStringEnum.B : MyStringEnum.B +>MyStringEnum : typeof MyStringEnum +>B : MyStringEnum.B +} + +export function fn6(optionalEnum?: MyStringEnumWithEmpty) { +>fn6 : (optionalEnum?: MyStringEnumWithEmpty) => MyStringEnumWithEmpty.B | MyStringEnumWithEmpty.C +>optionalEnum : MyStringEnumWithEmpty + + return optionalEnum || MyStringEnumWithEmpty.B; +>optionalEnum || MyStringEnumWithEmpty.B : MyStringEnumWithEmpty.B | MyStringEnumWithEmpty.C +>optionalEnum : MyStringEnumWithEmpty +>MyStringEnumWithEmpty.B : MyStringEnumWithEmpty.B +>MyStringEnumWithEmpty : typeof MyStringEnumWithEmpty +>B : MyStringEnumWithEmpty.B +} + diff --git a/tests/cases/compiler/enumMemberReduction.ts b/tests/cases/compiler/enumMemberReduction.ts new file mode 100644 index 0000000000000..adcb42cf628e8 --- /dev/null +++ b/tests/cases/compiler/enumMemberReduction.ts @@ -0,0 +1,41 @@ +enum MyEnum { + A, + B, + C, +} + +enum MyStringEnum { + A = "a", + B = "b", + C = "c", +} + +enum MyStringEnumWithEmpty { + A = "", + B = "b", + C = "c", +} + +export function fn(optionalEnum: MyEnum | undefined) { + return optionalEnum ?? MyEnum.A; +} + +export function fn2(optionalEnum: MyEnum | undefined) { + return optionalEnum || MyEnum.B; +} + +export function fn3(optionalEnum?: MyEnum) { + return optionalEnum ?? MyEnum.A; +} + +export function fn4(optionalEnum?: MyEnum) { + return optionalEnum || MyEnum.B; +} + +export function fn5(optionalEnum?: MyStringEnum) { + return optionalEnum || MyStringEnum.B; +} + +export function fn6(optionalEnum?: MyStringEnumWithEmpty) { + return optionalEnum || MyStringEnumWithEmpty.B; +}