19a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 29a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// Redistribution and use in source and binary forms, with or without 39a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// modification, are permitted provided that the following conditions are 49a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// met: 59a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// 69a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// * Redistributions of source code must retain the above copyright 79a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// notice, this list of conditions and the following disclaimer. 89a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// * Redistributions in binary form must reproduce the above 99a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// copyright notice, this list of conditions and the following 109a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// disclaimer in the documentation and/or other materials provided 119a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// with the distribution. 129a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// * Neither the name of Google Inc. nor the names of its 139a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// contributors may be used to endorse or promote products derived 149a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// from this software without specific prior written permission. 159a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// 169a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 289a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org// Flags: --allow-natives-syntax 299a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 309a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction test_helper_for_ics(func, b1, b2, b3, b4) { 319a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b1, func(.5, .5)); 329a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b2, func(.5, undefined)); 339a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b3, func(undefined, .5)); 349a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b4, func(undefined, undefined)); 359a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 369a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 379a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction test_helper_for_crankshaft(func, b1, b2, b3, b4) { 389a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b1, func(.5, .5)); 399a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org %OptimizeFunctionOnNextCall(func); 409a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b1, func(.5, .5)); 419a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b2, func(.5, undefined)); 429a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b3, func(undefined, .5)); 439a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org assertEquals(b4, func(undefined, undefined)); 449a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 459a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 469a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction less_1(a, b) { 479a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a < b; 489a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 499a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 509a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(less_1, false, false, false, false); 519a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 529a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction less_2(a, b) { 539a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a < b; 549a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 559a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 569a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(less_1, false, false, false, false); 579a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 589a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction greater_1(a, b) { 599a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a > b; 609a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 619a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 629a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(greater_1, false, false, false, false); 639a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 649a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction greater_2(a, b) { 659a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a > b; 669a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 679a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 689a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(greater_1, false, false, false, false); 699a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 709a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction less_equal_1(a, b) { 719a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a <= b; 729a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 739a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 749a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(less_equal_1, true, false, false, false); 759a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 769a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction less_equal_2(a, b) { 779a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a <= b; 789a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 799a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 809a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(less_equal_1, true, false, false, false); 819a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 829a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction greater_equal_1(a, b) { 839a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a >= b; 849a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 859a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 869a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(greater_equal_1, true, false, false, false); 879a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 889a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction greater_equal_2(a, b) { 899a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a >= b; 909a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 919a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 929a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(greater_equal_1, true, false, false, false); 939a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 949a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction equal_1(a, b) { 959a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a == b; 969a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 979a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 989a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(equal_1, true, false, false, true); 999a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1009a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction equal_2(a, b) { 1019a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a == b; 1029a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 1039a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1049a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(equal_2, true, false, false, true); 1059a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1069a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction strict_equal_1(a, b) { 1079a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a === b; 1089a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 1099a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1109a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(strict_equal_1, true, false, false, true); 1119a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1129a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction strict_equal_2(a, b) { 1139a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a === b; 1149a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 1159a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1169a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(strict_equal_2, true, false, false, true); 1179a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1189a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction not_equal_1(a, b) { 1199a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a != b; 1209a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 1219a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1229a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_ics(not_equal_1, false, true, true, false); 1239a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1249a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgfunction not_equal_2(a, b) { 1259a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org return a != b; 1269a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org} 1279a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.org 1289a21ec41a2007f01ba18cf5fa48f7987e40e5109ulan@chromium.orgtest_helper_for_crankshaft(not_equal_2, false, true, true, false); 129