/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package codetoanalyze.java.performance; public class Cost_test { // Cost: 5 private static int foo_OK() { int i, j; i = 17; j = 31; return i + j + 3 + 7; } // Cost: 17 private static int bar_OK() { int j = 0; j++; j++; j++; j = foo_OK(); j++; return j; } // Cost: 25 private static int cond_OK(int i) { int x; if (i < 0) { x = bar_OK(); } else { x = 1; } return x; } // Cost: 5 private static void alias_OK() { int i = 0, j; j = i; i = ++i; } // Cost: 7 private static void alias2_OK() { int i = 0, j, z; j = 1; z = 2; j = i; i = z; } // Cost: 1101 private static int loop0_bad() { for (int i = 0; i < 100; i++) { alias2_OK(); } return 0; } // Cost: 1203 private static int loop1_bad() { int k = 100; for (int i = 0; i < k; i++) { alias2_OK(); } return 0; } // Expected: Linear bound private static int FN_loop2(int k) { for (int i = 0; i < k; i++) { alias2_OK(); } return 0; } // Expected: constant private static int loop3(int k) { for (int i = k; i < k + 18; i++) { alias2_OK(); } return 0; } // Cost: 218 // Shows that calling many times non expensive function can // result in an expensive computation private static int main_bad() { int k1, k2, k3, k4; cond_OK(2); k1 = bar_OK() + foo_OK() + cond_OK(15) * 2; k2 = bar_OK() + foo_OK() + cond_OK(17) * 3; k3 = bar_OK() + foo_OK() + cond_OK(11) * 3; k4 = bar_OK() + foo_OK() + cond_OK(19) * 3; return 0; } // Cost: 1 private static void unitCostFunction() {} boolean rand() { if (Math.random() > 0.5) { return true; } else { return false; } } // Cost: Linear to n, not b void ignore_boolean_symbols_linear(boolean b, int n) { for (int i = 0; b && i < n; i++) { b = true; } } // Cost should not include the symbol of b. void ignore_boolean_symbols_constant1(boolean b) { for (; b; ) { if (rand()) { b = true; } } } // Cost should not include the symbol of b. void ignore_boolean_symbols_constant2(boolean b) { for (; b; ) { if (rand()) { b = false; } } } }