// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file. // Flags: --allow-natives-syntax (()=> { function f(a) { return a.charAt(1) == ""; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) < ""; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) <= ""; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) > ""; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) >= ""; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) == a.charAt(2); } %PrepareFunctionForOptimization(f); assertEquals(false, f("aab")); assertEquals(true, f("aaa")); assertEquals(false, f("acb")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aab")); assertEquals(true, f("aaa")); assertEquals(false, f("acb")); })(); (()=> { function f(a) { return a.charAt(1) < a.charAt(2); } %PrepareFunctionForOptimization(f); assertEquals(true, f("aab")); assertEquals(false, f("aaa")); assertEquals(false, f("acb")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aab")); assertEquals(false, f("aaa")); assertEquals(false, f("acb")); })(); (()=> { function f(a) { return a.charAt(1) <= a.charAt(2); } %PrepareFunctionForOptimization(f); assertEquals(true, f("aab")); assertEquals(true, f("aaa")); assertEquals(false, f("acb")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aab")); assertEquals(true, f("aaa")); assertEquals(false, f("acb")); })(); (()=> { function f(a) { return a.charAt(1) > a.charAt(2); } %PrepareFunctionForOptimization(f); assertEquals(false, f("aab")); assertEquals(false, f("aaa")); assertEquals(true, f("acb")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aab")); assertEquals(false, f("aaa")); assertEquals(true, f("acb")); })(); (()=> { function f(a) { return a.charAt(1) >= a.charAt(2); } %PrepareFunctionForOptimization(f); assertEquals(false, f("aab")); assertEquals(true, f("aaa")); assertEquals(true, f("acb")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aab")); assertEquals(true, f("aaa")); assertEquals(true, f("acb")); })(); (()=> { function f(a) { return a.charAt(1) == "b"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) == "bb"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); })(); (()=> { function f(a) { return a.charAt(1) < "b"; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); assertEquals(false, f("bbb")); assertEquals(false, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); assertEquals(false, f("bbb")); assertEquals(false, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) < "bb"; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) <= "b"; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) <= "bb"; } %PrepareFunctionForOptimization(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(true, f("aaa")); assertEquals(true, f("bbb")); assertEquals(false, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) > "b"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) > "bb"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) >= "b"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); assertEquals(true, f("bbb")); assertEquals(true, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); assertEquals(true, f("bbb")); assertEquals(true, f("ccc")); })(); (()=> { function f(a) { return a.charAt(1) >= "bb"; } %PrepareFunctionForOptimization(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); %OptimizeFunctionOnNextCall(f); assertEquals(false, f("aaa")); assertEquals(false, f("bbb")); assertEquals(true, f("ccc")); })();