package com.github.mustachejavabenchmarks;
import com.github.mustachejava.*;
import junit.framework.TestCase;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.concurrent.Executors;
/**
* Compare compilation with interpreter.
* <p/>
* User: sam
* Date: 5/14/11
* Time: 9:28 PM
*/
public class BenchmarkTest extends TestCase {
private static final int TIME = 2000;
protected File root;
protected void setUp() throws Exception {
super.setUp();
File file = new File("src/test/resources");
root = new File(file, "simple.html").exists() ? file : new File("../src/test/resources");
}
public static boolean skip() {
return System.getenv().containsKey("CI") || System.getProperty("CI") != null;
}
public void testCompiler() {
if (skip()) return;
System.out.println("complex.html compilations per second:");
for (int i = 0; i < 3; i++) {
{
long start = System.currentTimeMillis();
int total = 0;
while (true) {
DefaultMustacheFactory cf = createMustacheFactory();
Mustache m = cf.compile("complex.html");
total++;
if (System.currentTimeMillis() - start > TIME) break;
}
System.out.println("Result: " + total * 1000 / TIME);
}
}
}
public void testComplex() throws MustacheException, IOException {
if (skip()) return;
System.out.println("complex.html evaluations per millisecond:");
for (int i = 0; i < 3; i++) {
{
DefaultMustacheFactory cf = createMustacheFactory();
Mustache m = cf.compile("complex.html");
ComplexObject complexObject = new ComplexObject();
complextest(m, complexObject).toString();
long start = System.currentTimeMillis();
int total = 0;
while (true) {
complextest(m, complexObject);
total++;
if (System.currentTimeMillis() - start > TIME) break;
}
System.out.println("Serial: " + total / TIME);
}
}
}
protected DefaultMustacheFactory createMustacheFactory() {
return new DefaultMustacheFactory();
}
public void testComplexFlapping() throws MustacheException, IOException {
if (skip()) return;
System.out.println("complex.html evaluations with 3 different objects per millisecond:");
for (int i = 0; i < 3; i++) {
{
DefaultMustacheFactory cf = createMustacheFactory();
Mustache m = cf.compile("complex.html");
ComplexObject complexObject = new ComplexObject();
ComplexObject complexObject2 = new ComplexObject() {};
ComplexObject complexObject3 = new ComplexObject() {};
complextest(m, complexObject).toString();
long start = System.currentTimeMillis();
int total = 0;
while (true) {
complextest(m, total % 3 == 0 ? complexObject : total % 3 == 1 ? complexObject2 : complexObject3);
total++;
if (System.currentTimeMillis() - start > TIME) break;
}
System.out.println("Serial: " + total / TIME);
}
}
}
public void testParallelComplex() throws MustacheException, IOException {
if (skip()) return;
System.out.println("complex.html evaluations per millisecond:");
for (int i = 0; i < 3; i++) {
{
DefaultMustacheFactory cf = createMustacheFactory();
cf.setExecutorService(Executors.newCachedThreadPool());
Mustache m = cf.compile("complex.html");
complextest(m, new ParallelComplexObject()).toString();
long start = System.currentTimeMillis();
int total = 0;
while (true) {
complextest(m, new ParallelComplexObject());
total++;
if (System.currentTimeMillis() - start > TIME) break;
}
System.out.println("Parallel: " + total / TIME);
}
}
}
public void testParallelComplexNoExecutor() throws MustacheException, IOException {
if (skip()) return;
System.out.println("complex.html evaluations per millisecond:");
for (int i = 0; i < 3; i++) {
{
MustacheFactory cf = createMustacheFactory();
Mustache m = cf.compile("complex.html");
complextest(m, new ParallelComplexObject()).toString();
long start = System.currentTimeMillis();
int total = 0;
while (true) {
complextest(m, new ParallelComplexObject());
total++;
if (System.currentTimeMillis() - start > TIME) break;
}
System.out.println("Serial with callable: " + total / TIME);
}
}
}
private Writer complextest(Mustache m, Object complexObject) throws MustacheException, IOException {
Writer sw = new NullWriter();
m.execute(sw, complexObject).close();
return sw;
}
public static void main(String[] args) throws Exception {
BenchmarkTest benchmarkTest = new BenchmarkTest();
benchmarkTest.setUp();
benchmarkTest.testComplex();
benchmarkTest.testParallelComplex();
benchmarkTest.testParallelComplexNoExecutor();
System.exit(0);
}
}