blob: 5ea3663111a16d5f36704268555cd93fa4985d61 [file] [log] [blame]
utatane.tea@gmail.com5846c2e2015-04-16 22:46:35 +00001function test(actual, expected) {
2 if (actual !== expected)
3 throw new Error("bad value: " + actual);
4}
5
6(function () {
7 var hello = Symbol("Hello");
8 var proto = Symbol("__proto__");
9
10 for (var sym of [ hello, proto, Symbol.iterator ]) {
11 var key = Symbol.keyFor(sym);
12 test(key, undefined);
13 // twice
14 var key = Symbol.keyFor(sym);
15 test(key, undefined);
16 }
17}());
18
19(function () {
20 var keys = [
21 "Hello",
22 "__proto__",
23 "Symbol.iterator",
24 '',
25 null,
26 undefined,
27 42,
28 20.5,
29 -42,
30 -20.5,
31 true,
32 false,
33 {},
34 function () {},
35 [],
36 ];
37 for (var key of keys) {
38 var sym = Symbol.for(key);
39 test(typeof sym, "symbol");
40 test(sym.toString(), "Symbol(" + String(key) + ")");
41
42 var sym2 = Symbol.for(key);
43 test(sym === sym2, true);
44
45 var key = Symbol.keyFor(sym);
46 test(key, key);
47 var key = Symbol.keyFor(sym2);
48 test(key, key);
49 }
50}());
51
52(function () {
53 var error = null;
54 try {
55 var key = {
56 toString() {
57 throw new Error('toString');
58 }
59 };
60 Symbol.for(key);
61 } catch (e) {
62 error = e;
63 }
64 if (!error)
65 throw new Error('not thrown');
66 if (String(error) !== 'Error: toString')
67 throw new Error('bad error: ' + String(error));
68}());
69
70(function () {
71 var elements = [
72 null,
73 undefined,
74 42,
75 20.5,
76 true,
77 false,
78 'string',
79 {},
80 function () {},
81 [],
82 ];
83 for (var item of elements) {
84 var error = null;
85 try {
86 Symbol.keyFor(item);
87 } catch (e) {
88 error = e;
89 }
90 if (!error)
91 throw new Error('not thrown');
utatane.tea@gmail.com5d80e952016-05-04 01:21:38 +000092 if (String(error) !== 'TypeError: Symbol.keyFor requires that the first argument be a symbol')
utatane.tea@gmail.com5846c2e2015-04-16 22:46:35 +000093 throw new Error('bad error: ' + String(error));
94 }
95}());
96
97(function () {
98 for (var i = 0; i < 10000; ++i)
99 Symbol.for(i);
100 gc();
101}());
102
103(function () {
104 for (var i = 0; i < 100; ++i) {
105 var symbol = Symbol.for(i);
106 test(String(symbol), "Symbol(" + i + ")");
107 test(symbol, Symbol.for(i));
108 gc();
109 }
110 gc();
111}());
112
113(function () {
114 var symbols = [];
115 for (var i = 0; i < 100; ++i) {
116 var symbol = Symbol.for(i);
117 symbols.push(symbol);
118 }
119
120 for (var i = 0; i < 100; ++i)
121 test(Symbol.for(i), symbols[i]);
122
123 for (var i = 0; i < 100; ++i)
124 test(Symbol.keyFor(Symbol(i)), undefined);
125}());