* @param o the object to measure
* @param maxMemoryUsage the maximum desired memory usage for the Callable,
* in bytes
*/
private static void assertMaxMemoryUsage(String description, Object o, int maxMemoryUsage) throws Exception {
CountingVisitor v = new CountingVisitor();
ScannerUtils.scan(null, v, Collections.singleton(o), false);
long memoryUsage = v.getTotalSize();
String message = description + " consume " + memoryUsage + " bytes of memory on average, " + (memoryUsage - maxMemoryUsage) + " bytes more than the specified limit of " + maxMemoryUsage + " bytes";
assertTrue(message, memoryUsage <= maxMemoryUsage);
System.out.println(description + " consume " + memoryUsage + "/" + maxMemoryUsage + " bytes of memory");
}