public void testThatPerformanceIsSufficient() throws ParseException, IOException {
final Band flags = new Band("flags", ProductData.TYPE_INT8, 1, 1);
final SingleFlagSymbol s1 = new SingleFlagSymbol("flags.WATER", flags, 0x01);
final SingleFlagSymbol s2 = new SingleFlagSymbol("flags.LAND", flags, 0x02);
final SingleFlagSymbol s3 = new SingleFlagSymbol("flags.CLOUD", flags, 0x04);
final int[] dataElems = new int[]{-1};
s1.setData(dataElems);
s2.setData(dataElems);
s3.setData(dataElems);
final DefaultNamespace namespace = new DefaultNamespace();
namespace.registerSymbol(s1);
namespace.registerSymbol(s2);
namespace.registerSymbol(s3);
final String code = "(flags.WATER OR flags.LAND) AND NOT flags.CLOUD";
final Term term = new ParserImpl(namespace, true).parse(code);
final RasterDataEvalEnv evalEnv = new RasterDataEvalEnv(0, 0, 1, 1);
long t1 = System.currentTimeMillis();
for (int i = 0; i < MAX_NUM_TEST_LOOPS; i++) {
}
long t2 = System.currentTimeMillis();
for (int i = 0; i < MAX_NUM_TEST_LOOPS; i++) {
term.evalI(evalEnv);
}
long t3 = System.currentTimeMillis();
long dt = (t3 - t2) - (t2 - t1);
long numOps = Math.round(MAX_NUM_TEST_LOOPS * (1000.0 / dt));
assertTrue(String.format("Low evaluation performance detected (%d ops/s for term \"%s\"): Term implementation change?", numOps, code),
numOps > MIN_NUM_OPS_PER_SECOND);
}