Skip to content

Commit 04ed892

Browse files
author
Yui T
committed
Add tests for exponentiation
1 parent c9170b8 commit 04ed892

18 files changed

Lines changed: 634 additions & 0 deletions
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
enum E { a, b, c }
2+
3+
var a: any;
4+
var b: number;
5+
var c: E;
6+
7+
var x1: any;
8+
x1 **= a;
9+
x1 **= b;
10+
x1 **= c;
11+
x1 **= null;
12+
x1 **= undefined;
13+
14+
var x2: number;
15+
x2 **= a;
16+
x2 **= b;
17+
x2 **= c;
18+
x2 **= null;
19+
x2 **= undefined;
20+
21+
var x3: E;
22+
x3 **= a;
23+
x3 **= b;
24+
x3 **= c;
25+
x3 **= null;
26+
x3 **= undefined;
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
enum E { a, b }
2+
3+
var a: any;
4+
var b: void;
5+
6+
var x1: boolean;
7+
x1 **= a;
8+
x1 **= b;
9+
x1 **= true;
10+
x1 **= 0;
11+
x1 **= ''
12+
x1 **= E.a;
13+
x1 **= {};
14+
x1 **= null;
15+
x1 **= undefined;
16+
17+
var x2: string;
18+
x2 **= a;
19+
x2 **= b;
20+
x2 **= true;
21+
x2 **= 0;
22+
x2 **= ''
23+
x2 **= E.a;
24+
x2 **= {};
25+
x2 **= null;
26+
x2 **= undefined;
27+
28+
var x3: {};
29+
x3 **= a;
30+
x3 **= b;
31+
x3 **= true;
32+
x3 **= 0;
33+
x3 **= ''
34+
x3 **= E.a;
35+
x3 **= {};
36+
x3 **= null;
37+
x3 **= undefined;
38+
39+
var x4: void;
40+
x4 **= a;
41+
x4 **= b;
42+
x4 **= true;
43+
x4 **= 0;
44+
x4 **= ''
45+
x4 **= E.a;
46+
x4 **= {};
47+
x4 **= null;
48+
x4 **= undefined;
49+
50+
var x5: number;
51+
x5 **= b;
52+
x5 **= true;
53+
x5 **= ''
54+
x5 **= {};
55+
56+
var x6: E;
57+
x6 *= b;
58+
x6 *= true;
59+
x6 *= ''
60+
x6 *= {};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var value;
2+
3+
// identifiers: variable and parameter
4+
var x1: number;
5+
x1 **= value;
6+
7+
function fn1(x2: number) {
8+
x2 **= value;
9+
}
10+
11+
// property accesses
12+
var x3: { a: number };
13+
x3.a **= value;
14+
15+
x3['a'] **= value;
16+
17+
// parentheses, the contained expression is reference
18+
(x1) **= value;
19+
20+
function fn2(x4: number) {
21+
(x4) **= value;
22+
}
23+
24+
(x3.a) **= value;
25+
26+
(x3['a']) **= value;
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// expected error for all the LHS of compound assignments (arithmetic and addition)
2+
var value;
3+
4+
// this
5+
class C {
6+
constructor() {
7+
this **= value;
8+
}
9+
foo() {
10+
this **= value;
11+
}
12+
static sfoo() {
13+
this **= value;
14+
}
15+
}
16+
17+
function foo() {
18+
this **= value;
19+
}
20+
21+
this **= value;
22+
23+
// identifiers: module, class, enum, function
24+
module M { export var a; }
25+
M **= value;
26+
27+
C **= value;
28+
29+
enum E { }
30+
E **= value;
31+
32+
foo **= value;
33+
34+
// literals
35+
null **= value;
36+
true **= value;
37+
false **= value;
38+
0 **= value;
39+
'' **= value;
40+
/d+/ **= value;
41+
42+
// object literals
43+
{ a: 0 } **= value;
44+
45+
// array literals
46+
['', ''] **= value;
47+
48+
// super
49+
class Derived extends C {
50+
constructor() {
51+
super();
52+
super **= value;
53+
}
54+
55+
foo() {
56+
super **= value;
57+
}
58+
59+
static sfoo() {
60+
super **= value;
61+
}
62+
}
63+
64+
// function expression
65+
function bar1() { } **= value;
66+
() => { } **= value;
67+
68+
// function calls
69+
foo() **= value;
70+
71+
// parentheses, the containted expression is value
72+
(this) **= value;
73+
(M) **= value;
74+
(C) **= value;
75+
(E) **= value;
76+
(foo) **= value;
77+
(null) **= value;
78+
(true) **= value;
79+
(0) **= value;
80+
('') **= value;
81+
(/d+/) **= value;
82+
({}) **= value;
83+
([]) **= value;
84+
(function baz1() { }) **= value;
85+
(foo()) **= value;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var comp: number;
2+
3+
comp **= 1;
4+
comp **= comp ** comp;
5+
comp **= comp ** comp ** 2;
6+
comp **= comp ** comp + 2;
7+
comp **= comp ** comp - 2;
8+
comp **= comp ** comp * 2;
9+
comp **= comp ** comp / 2;
10+
comp **= comp ** comp % 2;
11+
comp **= (comp - 2) ** 5;
12+
comp **= (comp + 2) ** 5;
13+
comp **= (comp * 2) ** 5;
14+
comp **= (comp / 2) ** 5;
15+
comp **= (comp % 2) ** 5;
16+
comp **= comp ** (5 + 2);
17+
comp **= comp ** (5 - 2);
18+
comp **= comp ** (5 * 2);
19+
comp **= comp ** (5 / 2);
20+
comp **= comp ** (5 % 2);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// @target: es5
2+
3+
1 ** 2;
4+
1 ** 2 ** 3;
5+
1 ** -2 ** 3;
6+
1 ** -2 ** -3;
7+
-1 ** -2 ** -3;
8+
-(1 ** 2) ** 3;
9+
1 ** -(2 ** 3);
10+
11+
1 ** 2 + 3;
12+
1 ** 2 - 3;
13+
1 ** 2 * 3;
14+
1 ** 2 / 3;
15+
1 ** 2 % 3;
16+
17+
1 ** -2 + 3;
18+
1 ** -2 - 3;
19+
1 ** -2 * 3;
20+
1 ** -2 / 3;
21+
1 ** -2 % 3;
22+
23+
2 + 3 ** 3;
24+
2 - 3 ** 3;
25+
2 * 3 ** 3;
26+
2 / 3 ** 3;
27+
2 % 3 ** 3;
28+
29+
(2 + 3) ** 4;
30+
(2 - 3) ** 4;
31+
(2 * 3) ** 4;
32+
(2 / 3) ** 4;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// @target:es5
2+
3+
var temp = 10;
4+
5+
++temp ** 3;
6+
--temp ** 3;
7+
3 ** ++temp;
8+
3 ** --temp;
9+
10+
--temp + 2 ** 3;
11+
--temp - 2 ** 3;
12+
--temp * 2 ** 3;
13+
--temp / 2 ** 3;
14+
--temp % 2 ** 3;
15+
16+
++temp + 2 ** 3;
17+
++temp - 2 ** 3;
18+
++temp * 2 ** 3;
19+
++temp / 2 ** 3;
20+
++temp % 2 ** 3;
21+
22+
3 ** ++temp + 2;
23+
3 ** ++temp - 2;
24+
3 ** ++temp * 2;
25+
3 ** ++temp / 2;
26+
3 ** ++temp % 2;
27+
28+
3 ** --temp + 2;
29+
3 ** --temp - 2;
30+
3 ** --temp * 2;
31+
3 ** --temp / 2;
32+
3 ** --temp % 2;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
var t1 = 10;
2+
var t2 = 10;
3+
console.log(`${t1 ** t2}`)
4+
console.log(`${t1 ** t2 ** t1}`)
5+
console.log(`${t1 + t2 ** t1}`)
6+
console.log(`${t1 - t2 ** t1}`)
7+
console.log(`${t1 ** t2 + t1}`)
8+
console.log(`${t1 ** t2 - t1}`)
9+
console.log(`${t1 + t2 ** t2 + t1}`)
10+
console.log(`${t1 - t2 ** t2 - t1}`)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var a: any;
2+
var b: number;
3+
4+
// operator **
5+
var r1 = a ** a;
6+
var r2 = a ** b;
7+
var r3 = a ** 0;
8+
var r4 = 0 ** a;
9+
var r5 = 0 ** 0;
10+
var r6 = b ** 0;
11+
var r7 = 0 ** b;
12+
var r8 = b ** b;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// operands of an enum type are treated as having the primitive type Number.
2+
3+
enum E {
4+
a,
5+
b
6+
}
7+
8+
var a: any;
9+
var b: number;
10+
var c: E;
11+
12+
// operator **
13+
var r1 = c ** a;
14+
var r2 = c ** b;
15+
var r3 = c ** c;
16+
var r4 = a ** c;
17+
var r5 = b ** c;
18+
var r6 = E.a ** a;
19+
var r7 = E.a ** b;
20+
var r8 = E.a ** E.b;
21+
var r9 = E.a ** 1;
22+
var r10 = a ** E.b;
23+
var r11 = b ** E.b;
24+
var r12 = 1 ** E.b;

0 commit comments

Comments
 (0)