001package org.jivesoftware.smack.full; 002 003import java.util.function.Supplier; 004 005import org.jivesoftware.smack.util.XmlStringBuilder; 006 007public class XmlStringBuilderTest { 008 static int COUNT_OUTER = 500; 009 static int COUNT_INNER = 50; 010 011 public static void main(String[] args) throws Exception { 012 test1(); 013 test2(); 014 test3(); 015 } 016 017 public static void test1() throws Exception { 018 System.err.println("Test 1"); 019 XmlStringBuilder parent = new XmlStringBuilder(); 020 XmlStringBuilder child = new XmlStringBuilder(); 021 XmlStringBuilder child2 = new XmlStringBuilder(); 022 023 for (int i = 1; i < COUNT_OUTER; i++) { 024 XmlStringBuilder cs = new XmlStringBuilder(); 025 for (int j = 0; j < COUNT_INNER; j++) { 026 cs.append("abc"); 027 } 028 child2.append((CharSequence) cs); 029 } 030 031 child.append((CharSequence) child2); 032 parent.append((CharSequence) child); 033 034 time("test1: parent", () -> "len=" + parent.toString().length()); 035 time("test1: child", () -> "len=" + child.toString().length()); 036 time("test1: child2", () -> "len=" + child2.toString().length()); 037 } 038 039 public static void test2() throws Exception { 040 System.err.println("Test 2: evaluate children first"); 041 XmlStringBuilder parent = new XmlStringBuilder(); 042 XmlStringBuilder child = new XmlStringBuilder(); 043 XmlStringBuilder child2 = new XmlStringBuilder(); 044 045 for (int i = 1; i < COUNT_OUTER; i++) { 046 XmlStringBuilder cs = new XmlStringBuilder(); 047 for (int j = 0; j < COUNT_INNER; j++) { 048 cs.append("abc"); 049 } 050 child2.append((CharSequence) cs); 051 } 052 053 child.append((CharSequence) child2); 054 parent.append((CharSequence) child); 055 056 time("test2: child2", () -> "len=" + child2.toString().length()); 057 time("test2: child", () -> "len=" + child.toString().length()); 058 time("test2: parent", () -> "len=" + parent.toString().length()); 059 } 060 061 public static void test3() throws Exception { 062 System.err.println("Test 3: use append(XmlStringBuilder)"); 063 XmlStringBuilder parent = new XmlStringBuilder(); 064 XmlStringBuilder child = new XmlStringBuilder(); 065 XmlStringBuilder child2 = new XmlStringBuilder(); 066 067 for (int i = 1; i < COUNT_OUTER; i++) { 068 XmlStringBuilder cs = new XmlStringBuilder(); 069 for (int j = 0; j < COUNT_INNER; j++) { 070 cs.append("abc"); 071 } 072 child2.append(cs); 073 } 074 075 child.append(child2); 076 parent.append(child); 077 078 time("test3: parent", () -> "len=" + parent.toString().length()); 079 time("test3: child", () -> "len=" + child.toString().length()); 080 time("test3: child2", () -> "len=" + child2.toString().length()); 081 } 082 083 static void time(String name, Supplier<String> block) { 084 long start = System.currentTimeMillis(); 085 String result = block.get(); 086 long end = System.currentTimeMillis(); 087 088 System.err.println(name + " took " + (end - start) + "ms: " + result); 089 } 090}