initial commit

This commit is contained in:
2019-10-28 19:02:45 +00:00
commit 5a644ac6b5
33 changed files with 1769 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
package net.woggioni.jwo.benchmark;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NaiveTemplateRenderer {
public static String renderTemplateNaive(String template, Map<String, Object> valuesMap){
StringBuffer formatter = new StringBuffer(template);
Object absent = new Object();
Matcher matcher = Pattern.compile("\\$\\{(\\w+)}").matcher(template);
while (matcher.find()) {
String key = matcher.group(1);
String formatKey = String.format("${%s}", key);
int index = formatter.indexOf(formatKey);
// If the key is present:
// - If the value is not null, then replace the variable for the value
// - If the value is null, replace the variable for empty string
// If the key is not present, leave the variable untouched.
if (index != -1) {
Object value = valuesMap.getOrDefault(key, absent);
if(value != absent) {
String valueStr = value != null ? value.toString() : "";
formatter.replace(index, index + formatKey.length(), valueStr);
}
}
}
return formatter.toString();
}
}

View File

@@ -0,0 +1 @@
This is a ${adjective} test made by ${author} on ${date}. It's really ${adjective}!

View File

@@ -0,0 +1,47 @@
package net.woggioni.jwo.benchmark
import java.io.{InputStream, InputStreamReader, Reader}
import net.woggioni.jwo.io.CircularInputStream
import net.woggioni.jwo.{Chronometer, JWO}
import scala.collection.JavaConverters._
object Main {
def withBenchmarkReader(fn : Reader => Unit) = {
val reader = new InputStreamReader(classOf[JWO].getResourceAsStream("/render_template_test.txt"))
val is : InputStream = new CircularInputStream(JWO.readAll(reader).getBytes, 10000)
try {
fn(new InputStreamReader(is))
} finally {
if (reader != null) reader.close()
}
}
def renderTemplateBenchmark() {
val valuesMap = Map[String, Object]("author" -> "John Doe",
"date" -> "2020-03-25 16:22",
"adjective" -> "simple")
withBenchmarkReader(
reader => {
val chronometer = new Chronometer
val result = JWO.renderTemplate(reader, valuesMap.asJava)
printf("Elapsed time: %.3f\n", chronometer.elapsed(Chronometer.UnitOfMeasure.SECONDS))
}
)
withBenchmarkReader(
reader => {
val chronometer = new Chronometer
val result = NaiveTemplateRenderer.renderTemplateNaive(JWO.readAll(reader), valuesMap.asJava)
printf("Elapsed time: %.3f\n", chronometer.elapsed(Chronometer.UnitOfMeasure.SECONDS))
}
)
}
def main(argv : Array[String]) = {
renderTemplateBenchmark()
}
}