19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved.
29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Redistribution and use in source and binary forms, with or without
39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// modification, are permitted provided that the following conditions are
49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// met:
59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//
69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//     * Redistributions of source code must retain the above copyright
79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       notice, this list of conditions and the following disclaimer.
89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//     * Redistributions in binary form must reproduce the above
99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       copyright notice, this list of conditions and the following
109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       disclaimer in the documentation and/or other materials provided
119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       with the distribution.
129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//     * Neither the name of Google Inc. nor the names of its
139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       contributors may be used to endorse or promote products derived
149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//       from this software without specific prior written permission.
159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com//
169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Ensure that operations on small integers handle -0.
299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
309a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar zero = 0;
319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar one = 1;
329a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar minus_one = -1;
339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar two = 2;
349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar four = 4;
359a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar minus_two = -2;
369a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comvar minus_four = -4;
379a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// variable op variable
399a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
409d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-zero), "one / -0 I");
419a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
429d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (zero * minus_one), "one / -1");
439d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_one * zero), "one / -0 II");
449d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (zero * zero), "one / 0 I");
459d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(1, one / (minus_one * minus_one), "one / 1");
469a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
479d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (zero / minus_one), "one / -0 III");
489d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (zero / one), "one / 0 II");
499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
509d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_four % two), "foo1");
519d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_four % minus_two), "foo2");
529d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (four % two), "foo3");
539d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (four % minus_two), "foo4");
549a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
559a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// literal op variable
569a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
579d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (0 * minus_one), "bar1");
589d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-1 * zero), "bar2");
599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (0 * zero), "bar3");
609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(1, one / (-1 * minus_one), "bar4");
619a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
629d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (0 / minus_one), "baz1");
639d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (0 / one), "baz2");
649a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
659d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-4 % two), "baz3");
669d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-4 % minus_two), "baz4");
679d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (4 % two), "baz5");
689d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (4 % minus_two), "baz6");
699a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
709a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// variable op literal
719a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
729d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (zero * -1), "fizz1");
739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_one * 0), "fizz2");
749d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (zero * 0), "fizz3");
759d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(1, one / (minus_one * -1), "fizz4");
769a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
779d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (zero / -1), "buzz1");
789d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (zero / 1), "buzz2");
799a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
809d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_four % 2), "buzz3");
819d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (minus_four % -2), "buzz4");
829d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (four % 2), "buzz5");
839d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (four % -2), "buzz6");
849a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
859a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// literal op literal
869a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
879d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-0), "fisk1");
889a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
899d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (0 * -1), "fisk2");
909d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-1 * 0), "fisk3");
919d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (0 * 0), "fisk4");
929d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(1, one / (-1 * -1), "fisk5");
939a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
949d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (0 / -1), "hest1");
959d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (0 / 1), "hest2");
969a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com
979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-4 % 2), "fiskhest1");
989d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(-Infinity, one / (-4 % -2), "fiskhest2");
999d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (4 % 2), "fiskhest3");
1009d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comassertEquals(Infinity, one / (4 % -2), "fiskhest4");
10142841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org
10242841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org
10342841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org// This tests against a singleton -0.0 object being overwritten.gc
10442841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.orgx = 0;
10542841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.orgz = 3044;
10642841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org
10742841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.orgfunction foo(x) {
10842841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org  var y = -x + z;
10942841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org  return -x;
11042841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org}
11142841968c3c92e3b07bcd67e79eb6ba3f83032c1vegorov@chromium.org
1127979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgassertEquals(-0, foo(x));
1137979bbb1df2eaff193e85d44c8da1ffa1525b7fcfschneider@chromium.orgassertEquals(-0, foo(x));
114