1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2019 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker public class StringBuilderAppendBenchmark { 18*795d594fSAndroid Build Coastguard Worker public static String string1 = "s1"; 19*795d594fSAndroid Build Coastguard Worker public static String string2 = "s2"; 20*795d594fSAndroid Build Coastguard Worker public static String longString1 = "This is a long string 1"; 21*795d594fSAndroid Build Coastguard Worker public static String longString2 = "This is a long string 2"; 22*795d594fSAndroid Build Coastguard Worker public static int int1 = 42; 23*795d594fSAndroid Build Coastguard Worker public static double double1 = 42.0; 24*795d594fSAndroid Build Coastguard Worker public static double double2 = 1.0E308; 25*795d594fSAndroid Build Coastguard Worker public static float float1 = 42.0f; 26*795d594fSAndroid Build Coastguard Worker public static float float2 = 1.0E38f; 27*795d594fSAndroid Build Coastguard Worker timeAppendStrings(int count)28*795d594fSAndroid Build Coastguard Worker public void timeAppendStrings(int count) { 29*795d594fSAndroid Build Coastguard Worker String s1 = string1; 30*795d594fSAndroid Build Coastguard Worker String s2 = string2; 31*795d594fSAndroid Build Coastguard Worker int sum = 0; 32*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 33*795d594fSAndroid Build Coastguard Worker String result = s1 + s2; 34*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 35*795d594fSAndroid Build Coastguard Worker } 36*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + s2.length())) { 37*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 38*795d594fSAndroid Build Coastguard Worker } 39*795d594fSAndroid Build Coastguard Worker } 40*795d594fSAndroid Build Coastguard Worker timeAppendLongStrings(int count)41*795d594fSAndroid Build Coastguard Worker public void timeAppendLongStrings(int count) { 42*795d594fSAndroid Build Coastguard Worker String s1 = longString1; 43*795d594fSAndroid Build Coastguard Worker String s2 = longString2; 44*795d594fSAndroid Build Coastguard Worker int sum = 0; 45*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 46*795d594fSAndroid Build Coastguard Worker String result = s1 + s2; 47*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 48*795d594fSAndroid Build Coastguard Worker } 49*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + s2.length())) { 50*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 51*795d594fSAndroid Build Coastguard Worker } 52*795d594fSAndroid Build Coastguard Worker } 53*795d594fSAndroid Build Coastguard Worker timeAppendStringAndInt(int count)54*795d594fSAndroid Build Coastguard Worker public void timeAppendStringAndInt(int count) { 55*795d594fSAndroid Build Coastguard Worker String s1 = string1; 56*795d594fSAndroid Build Coastguard Worker int i1 = int1; 57*795d594fSAndroid Build Coastguard Worker int sum = 0; 58*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 59*795d594fSAndroid Build Coastguard Worker String result = s1 + i1; 60*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 61*795d594fSAndroid Build Coastguard Worker } 62*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + Integer.toString(i1).length())) { 63*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 64*795d594fSAndroid Build Coastguard Worker } 65*795d594fSAndroid Build Coastguard Worker } 66*795d594fSAndroid Build Coastguard Worker timeAppendStringAndDouble(int count)67*795d594fSAndroid Build Coastguard Worker public void timeAppendStringAndDouble(int count) { 68*795d594fSAndroid Build Coastguard Worker String s1 = string1; 69*795d594fSAndroid Build Coastguard Worker double d1 = double1; 70*795d594fSAndroid Build Coastguard Worker int sum = 0; 71*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 72*795d594fSAndroid Build Coastguard Worker String result = s1 + d1; 73*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 74*795d594fSAndroid Build Coastguard Worker } 75*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + Double.toString(d1).length())) { 76*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 77*795d594fSAndroid Build Coastguard Worker } 78*795d594fSAndroid Build Coastguard Worker } 79*795d594fSAndroid Build Coastguard Worker timeAppendStringAndHugeDouble(int count)80*795d594fSAndroid Build Coastguard Worker public void timeAppendStringAndHugeDouble(int count) { 81*795d594fSAndroid Build Coastguard Worker String s1 = string1; 82*795d594fSAndroid Build Coastguard Worker double d2 = double2; 83*795d594fSAndroid Build Coastguard Worker int sum = 0; 84*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 85*795d594fSAndroid Build Coastguard Worker String result = s1 + d2; 86*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 87*795d594fSAndroid Build Coastguard Worker } 88*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + Double.toString(d2).length())) { 89*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 90*795d594fSAndroid Build Coastguard Worker } 91*795d594fSAndroid Build Coastguard Worker } 92*795d594fSAndroid Build Coastguard Worker timeAppendStringAndFloat(int count)93*795d594fSAndroid Build Coastguard Worker public void timeAppendStringAndFloat(int count) { 94*795d594fSAndroid Build Coastguard Worker String s1 = string1; 95*795d594fSAndroid Build Coastguard Worker float f1 = float1; 96*795d594fSAndroid Build Coastguard Worker int sum = 0; 97*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 98*795d594fSAndroid Build Coastguard Worker String result = s1 + f1; 99*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 100*795d594fSAndroid Build Coastguard Worker } 101*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + Float.toString(f1).length())) { 102*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 103*795d594fSAndroid Build Coastguard Worker } 104*795d594fSAndroid Build Coastguard Worker } 105*795d594fSAndroid Build Coastguard Worker timeAppendStringAndHugeFloat(int count)106*795d594fSAndroid Build Coastguard Worker public void timeAppendStringAndHugeFloat(int count) { 107*795d594fSAndroid Build Coastguard Worker String s1 = string1; 108*795d594fSAndroid Build Coastguard Worker float f2 = float2; 109*795d594fSAndroid Build Coastguard Worker int sum = 0; 110*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 111*795d594fSAndroid Build Coastguard Worker String result = s1 + f2; 112*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 113*795d594fSAndroid Build Coastguard Worker } 114*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + Float.toString(f2).length())) { 115*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 116*795d594fSAndroid Build Coastguard Worker } 117*795d594fSAndroid Build Coastguard Worker } 118*795d594fSAndroid Build Coastguard Worker timeAppendStringDoubleStringAndFloat(int count)119*795d594fSAndroid Build Coastguard Worker public void timeAppendStringDoubleStringAndFloat(int count) { 120*795d594fSAndroid Build Coastguard Worker String s1 = string1; 121*795d594fSAndroid Build Coastguard Worker String s2 = string2; 122*795d594fSAndroid Build Coastguard Worker double d1 = double1; 123*795d594fSAndroid Build Coastguard Worker float f1 = float1; 124*795d594fSAndroid Build Coastguard Worker int sum = 0; 125*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < count; ++i) { 126*795d594fSAndroid Build Coastguard Worker String result = s1 + d1 + s2 + f1; 127*795d594fSAndroid Build Coastguard Worker sum += result.length(); // Make sure the append is not optimized away. 128*795d594fSAndroid Build Coastguard Worker } 129*795d594fSAndroid Build Coastguard Worker if (sum != count * (s1.length() + 130*795d594fSAndroid Build Coastguard Worker Double.toString(d1).length() + 131*795d594fSAndroid Build Coastguard Worker s2.length() + 132*795d594fSAndroid Build Coastguard Worker Float.toString(f1).length())) { 133*795d594fSAndroid Build Coastguard Worker throw new AssertionError(); 134*795d594fSAndroid Build Coastguard Worker } 135*795d594fSAndroid Build Coastguard Worker } 136*795d594fSAndroid Build Coastguard Worker } 137