From 568049474e3980751376f8b620dfef711ed65c1f Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 3 Nov 2014 09:20:20 -0800 Subject: [PATCH] =?UTF-8?q?Tests=20to=20check=20equivalency=20of=20union?= =?UTF-8?q?=20types=20A=20union=20type=20encompasses=20an=20unordered=20se?= =?UTF-8?q?t=20of=20unrelated=20types=20(that=20is,=20types=20that=20aren?= =?UTF-8?q?=E2=80=99t=20subtypes=20of=20each=20other).=20The=20following?= =?UTF-8?q?=20rules=20govern=20union=20types:=20=E2=80=A2=09A=20|=20B=20is?= =?UTF-8?q?=20equivalent=20to=20A=20if=20B=20is=20a=20subtype=20of=20A.=20?= =?UTF-8?q?=E2=80=A2=09A=20|=20B=20is=20equivalent=20to=20B=20|=20A.=20?= =?UTF-8?q?=E2=80=A2=09AB=20|=20C=20is=20equivalent=20to=20A=20|=20BC,=20w?= =?UTF-8?q?here=20AB=20is=20A=20|=20B=20and=20BC=20is=20B=20|=20C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reference/unionTypeEquivalence.js | 54 +++++++++++++++++++ .../reference/unionTypeEquivalence.types | 49 +++++++++++++++++ .../types/union/unionTypeEquivalence.ts | 18 +++++++ 3 files changed, 121 insertions(+) create mode 100644 tests/baselines/reference/unionTypeEquivalence.js create mode 100644 tests/baselines/reference/unionTypeEquivalence.types create mode 100644 tests/cases/conformance/types/union/unionTypeEquivalence.ts diff --git a/tests/baselines/reference/unionTypeEquivalence.js b/tests/baselines/reference/unionTypeEquivalence.js new file mode 100644 index 00000000000..3698ecd2f92 --- /dev/null +++ b/tests/baselines/reference/unionTypeEquivalence.js @@ -0,0 +1,54 @@ +//// [unionTypeEquivalence.ts] +// A | B is equivalent to A if B is a subtype of A +class C { } +class D extends C { } +var x: C; +var x : C | D; + +// A | B is equivalent to B | A. +var y: string | number; +var y : number | string; + +// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C. +var z : string | number | boolean; +var z : (string | number) | boolean; +var z : string | (number | boolean); +var AB : string | number; +var BC : number | boolean; +var z1: typeof AB | boolean; +var z1: string | typeof BC; + + +//// [unionTypeEquivalence.js] +var __extends = this.__extends || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + __.prototype = b.prototype; + d.prototype = new __(); +}; +// A | B is equivalent to A if B is a subtype of A +var C = (function () { + function C() { + } + return C; +})(); +var D = (function (_super) { + __extends(D, _super); + function D() { + _super.apply(this, arguments); + } + return D; +})(C); +var x; +var x; +// A | B is equivalent to B | A. +var y; +var y; +// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C. +var z; +var z; +var z; +var AB; +var BC; +var z1; +var z1; diff --git a/tests/baselines/reference/unionTypeEquivalence.types b/tests/baselines/reference/unionTypeEquivalence.types new file mode 100644 index 00000000000..53e95659120 --- /dev/null +++ b/tests/baselines/reference/unionTypeEquivalence.types @@ -0,0 +1,49 @@ +=== tests/cases/conformance/types/union/unionTypeEquivalence.ts === +// A | B is equivalent to A if B is a subtype of A +class C { } +>C : C + +class D extends C { } +>D : D +>C : C + +var x: C; +>x : C +>C : C + +var x : C | D; +>x : C +>C : C +>D : D + +// A | B is equivalent to B | A. +var y: string | number; +>y : string | number + +var y : number | string; +>y : string | number + +// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C. +var z : string | number | boolean; +>z : string | number | boolean + +var z : (string | number) | boolean; +>z : string | number | boolean + +var z : string | (number | boolean); +>z : string | number | boolean + +var AB : string | number; +>AB : string | number + +var BC : number | boolean; +>BC : number | boolean + +var z1: typeof AB | boolean; +>z1 : string | number | boolean +>AB : string | number + +var z1: string | typeof BC; +>z1 : string | number | boolean +>BC : number | boolean + diff --git a/tests/cases/conformance/types/union/unionTypeEquivalence.ts b/tests/cases/conformance/types/union/unionTypeEquivalence.ts new file mode 100644 index 00000000000..0905fde17f8 --- /dev/null +++ b/tests/cases/conformance/types/union/unionTypeEquivalence.ts @@ -0,0 +1,18 @@ +// A | B is equivalent to A if B is a subtype of A +class C { } +class D extends C { } +var x: C; +var x : C | D; + +// A | B is equivalent to B | A. +var y: string | number; +var y : number | string; + +// AB | C is equivalent to A | BC, where AB is A | B and BC is B | C. +var z : string | number | boolean; +var z : (string | number) | boolean; +var z : string | (number | boolean); +var AB : string | number; +var BC : number | boolean; +var z1: typeof AB | boolean; +var z1: string | typeof BC;