19dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Copyright 2010 the V8 project authors. All rights reserved.
29dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Redistribution and use in source and binary forms, with or without
39dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// modification, are permitted provided that the following conditions are
49dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// met:
59dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//
69dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//     * Redistributions of source code must retain the above copyright
79dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       notice, this list of conditions and the following disclaimer.
89dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//     * Redistributions in binary form must reproduce the above
99dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       copyright notice, this list of conditions and the following
109dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       disclaimer in the documentation and/or other materials provided
119dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       with the distribution.
129dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//     * Neither the name of Google Inc. nor the names of its
139dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       contributors may be used to endorse or promote products derived
149dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//       from this software without specific prior written permission.
159dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen//
169dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
179dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
189dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
199dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
209dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
219dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
229dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
239dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
249dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
259dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
269dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
279dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
289dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
299dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Flags: --expose-natives_as natives
309dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Test the SameValue internal method.
319dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
329dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsenvar obj1 = {x: 10, y: 11, z: "test"};
339dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsenvar obj2 = {x: 10, y: 11, z: "test"};
349dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
359dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(0, 0));
369dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(+0, +0));
379dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(-0, -0));
389dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(1, 1));
399dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(2, 2));
409dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(-1, -1));
419dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(0.5, 0.5));
429dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(true, true));
439dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(false, false));
449dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(NaN, NaN));
459dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(null, null));
469dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue("foo", "foo"));
479dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(obj1, obj1));
489dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Undefined values.
499dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue());
509dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertTrue(natives.SameValue(undefined, undefined));
519dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
529dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(0,1));
539dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", "bar"));
549dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, obj2));
559dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, false));
569dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
579dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, true));
589dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, "foo"));
599dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, 1));
609dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, undefined));
619dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(obj1, NaN));
629dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
639dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(undefined, true));
649dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(undefined, "foo"));
659dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(undefined, 1));
669dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(undefined, obj1));
679dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(undefined, NaN));
689dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
699dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(NaN, true));
709dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(NaN, "foo"));
719dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(NaN, 1));
729dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(NaN, obj1));
739dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(NaN, undefined));
749dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
759dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", true));
769dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", 1));
779dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", obj1));
789dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", undefined));
799dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("foo", NaN));
809dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
819dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, 1));
829dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, obj1));
839dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, undefined));
849dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, NaN));
859dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(true, "foo"));
869dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
879dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(1, true));
889dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(1, obj1));
899dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(1, undefined));
909dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(1, NaN));
919dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(1, "foo"));
929dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
939dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// Special string cases.
949dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("1", 1));
959dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("true", true));
969dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("false", false));
979dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("undefined", undefined));
989dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue("NaN", NaN));
999dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen
1009dcf7e2f83591d471e88bf7d230651900b8e424bKristian Monsen// -0 and +0 are should be different
1019dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(+0, -0));
1029dcf7e2f83591d471e88bf7d230651900b8e424bKristian MonsenassertFalse(natives.SameValue(-0, +0));
103