package org.jooby.assets; import static org.junit.Assert.assertEquals; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.typesafe.config.ConfigFactory; public class UglifyMultiThreadTest { /** The logging system. */ private final Logger log = LoggerFactory.getLogger(getClass()); @Test public void uglify() throws Exception { long s = System.currentTimeMillis(); char start = 'a'; char stop = 'z'; int size = stop - start; ExecutorService executor = Executors.newFixedThreadPool(size + 1); CountDownLatch latch = new CountDownLatch(size); for (char i = 0; i <= size; i++) { executor.execute(run(latch, "var " + (char) (i + start) + "=1;")); } latch.await(); long e = System.currentTimeMillis(); log.info(" {} took {}ms each", size, ((e - s) / size)); } private Runnable run(final CountDownLatch latch, final String statement) { return () -> { try { assertEquals(statement, new Uglify().process("/x.js", statement, ConfigFactory.empty())); } catch (Exception ex) { throw new IllegalStateException(ex); } finally { latch.countDown(); } }; } }