Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: test/mjsunit/strong/implicit-conversions-count.js

Issue 1216463003: [strong] Implement strong mode semantics for the count operation. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cl feedback + eliminate runtime check Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/mjsunit/strong/implicit-conversions-constants.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --strong-mode --allow-natives-syntax
6
7 "use strict";
8
9 function pre_inc(x) {
10 return ++x;
11 }
12
13 function post_inc(x) {
14 return x++;
15 }
16
17 function pre_dec(x) {
18 return --x;
19 }
20
21 function post_dec(x) {
22 return x--;
23 }
24
25 function getTestFuncs() {
26 return [
27 function(x){
28 "use strong";
29 let y = x;
30 assertEquals(++y, pre_inc(x));
31 try {
32 assertEquals(x+1, y)
33 } catch (e) {
34 assertUnreachable();
35 }
36 },
37 function(x){
38 "use strong";
39 let y = x;
40 assertEquals(y++, post_inc(x));
41 try {
42 assertEquals(x+1, y)
43 } catch (e) {
44 assertUnreachable();
45 }
46 },
47 function(x){
48 "use strong";
49 let y = x;
50 assertEquals(--y, pre_dec(x));
51 try {
52 assertEquals(x-1, y)
53 } catch (e) {
54 assertUnreachable();
55 }
56 },
57 function(x){
58 "use strong";
59 let y = x;
60 assertEquals(y--, post_dec(x));
61 try {
62 assertEquals(x-1, y)
63 } catch (e) {
64 assertUnreachable();
65 }
66 },
67 function(x){
68 "use strong";
69 let obj = { foo: x };
70 let y = ++obj.foo;
71 assertEquals(y, pre_inc(x));
72 try {
73 assertEquals(x+1, obj.foo)
74 } catch (e) {
75 assertUnreachable();
76 }
77 },
78 function(x){
79 "use strong";
80 let obj = { foo: x };
81 let y = obj.foo++;
82 assertEquals(y, post_inc(x));
83 try {
84 assertEquals(x+1, obj.foo)
85 } catch (e) {
86 assertUnreachable();
87 }
88 },
89 function(x){
90 "use strong";
91 let obj = { foo: x };
92 let y = --obj.foo;
93 assertEquals(y, pre_dec(x));
94 try {
95 assertEquals(x-1, obj.foo)
96 } catch (e) {
97 assertUnreachable();
98 }
99 },
100 function(x){
101 "use strong";
102 let obj = { foo: x };
103 let y = obj.foo--;
104 assertEquals(y, post_dec(x));
105 try {
106 assertEquals(x-1, obj.foo)
107 } catch (e) {
108 assertUnreachable();
109 }
110 },
111 ];
112 }
113
114 let nonNumberValues = [
115 {},
116 (function(){}),
117 [],
118 (class Foo {}),
119 "",
120 "foo",
121 "NaN",
122 Object(""),
123 false,
124 null,
125 undefined
126 ];
127
128 // Check prior input of None works
129 for (let func of getTestFuncs()) {
130 for (let value of nonNumberValues) {
131 assertThrows(function(){func(value)}, TypeError);
132 assertThrows(function(){func(value)}, TypeError);
133 assertThrows(function(){func(value)}, TypeError);
134 %OptimizeFunctionOnNextCall(func);
135 assertThrows(function(){func(value)}, TypeError);
136 %DeoptimizeFunction(func);
137 }
138 }
139
140 // Check prior input of Smi works
141 for (let func of getTestFuncs()) {
142 func(1);
143 func(1);
144 func(1);
145 for (let value of nonNumberValues) {
146 assertThrows(function(){func(value)}, TypeError);
147 assertThrows(function(){func(value)}, TypeError);
148 assertThrows(function(){func(value)}, TypeError);
149 %OptimizeFunctionOnNextCall(func);
150 assertThrows(function(){func(value)}, TypeError);
151 %DeoptimizeFunction(func);
152 }
153 }
154
155 // Check prior input of Number works
156 for (let func of getTestFuncs()) {
157 func(9999999999999);
158 func(9999999999999);
159 func(9999999999999);
160 for (let value of nonNumberValues) {
161 assertThrows(function(){func(value)}, TypeError);
162 assertThrows(function(){func(value)}, TypeError);
163 assertThrows(function(){func(value)}, TypeError);
164 %OptimizeFunctionOnNextCall(func);
165 assertThrows(function(){func(value)}, TypeError);
166 %DeoptimizeFunction(func);
167 }
168 }
OLDNEW
« no previous file with comments | « test/mjsunit/strong/implicit-conversions-constants.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698