1// Copyright 2014 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: --harmony-object-observe
6// Flags: --allow-natives-syntax
7
8var v = 0;
9
10function push_wrapper(array, value) {
11  array.push(value);
12}
13function pop_wrapper(array) {
14  return array.pop();
15}
16
17// Test that Object.observe() notification events are properly sent from
18// Array.push() and Array.pop() both from optimized and un-optimized code.
19var array = [];
20
21function somethingChanged(changes) {
22  v++;
23}
24
25Object.observe(array, somethingChanged);
26push_wrapper(array, 1);
27%RunMicrotasks();
28assertEquals(1, array.length);
29assertEquals(1, v);
30push_wrapper(array, 1);
31%RunMicrotasks();
32assertEquals(2, array.length);
33assertEquals(2, v);
34%OptimizeFunctionOnNextCall(push_wrapper);
35push_wrapper(array, 1);
36%RunMicrotasks();
37assertEquals(3, array.length);
38assertEquals(3, v);
39push_wrapper(array, 1);
40%RunMicrotasks();
41assertEquals(4, array.length);
42assertEquals(4, v);
43
44pop_wrapper(array);
45%RunMicrotasks();
46assertEquals(3, array.length);
47assertEquals(5, v);
48pop_wrapper(array);
49%RunMicrotasks();
50assertEquals(2, array.length);
51assertEquals(6, v);
52%OptimizeFunctionOnNextCall(pop_wrapper);
53pop_wrapper(array);
54%RunMicrotasks();
55assertEquals(1, array.length);
56assertEquals(7, v);
57pop_wrapper(array);
58%RunMicrotasks();
59assertEquals(0, array.length);
60assertEquals(8, v);
61