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