package com.colloquial.arithcode;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeSet;
/** Package local helper class to compute statistics for a set
* of compression experiments. Stores original and coded
* bytes, average and cumulative compression and speeds.
* Pretty printing is through report.
*
* @author <a href="http://www.colloquial.com/carp/">Bob Carpenter</a>
* @see TestStatistics
* @version 1.1
* @since 1.1
*/
class TestSet {
/** Records an outcome for a compression for a given test name,
* specifying original and coded bytes, along with encode and decode times.
* @param name Name of test.
* @param originalBytes Number of bytes in input.
* @param codedBytes Number of bytes after compression.
* @param encodeTime Number of milliseconds required to encode.
* @param decodeTime Number of milliseconds required to decode.
*/
void record(String name, int originalBytes, int codedBytes, long encodeTime, long decodeTime) {
if (!_tests.containsKey(name)) _tests.put(name,new TestStatistics(name));
((TestStatistics) _tests.get(name)).record(originalBytes,codedBytes,encodeTime,decodeTime);
}
// specified by Object
public String toString() {
TreeSet results = new TreeSet();
Iterator it = _tests.keySet().iterator();
while (it.hasNext()) results.add(_tests.get(it.next()));
StringBuffer sb = new StringBuffer();
sb.append("\n");
sb.append("\n");
sb.append(" TOTAL AVERAGE");
sb.append("\n");
sb.append("NAME b/B Encode Decode b/B Encode Decode");
sb.append("\n-----------------------------------------------------------");
Iterator resultsIterator = results.iterator(); // sort
while (resultsIterator.hasNext()) {
sb.append("\n");
sb.append(((TestStatistics) resultsIterator.next()).lineReport());
}
return sb.toString();
}
/** Storage for all of the tests.
*/
private HashMap _tests = new HashMap();
/** Clears the test set by removing all results.
*/
void clear() { _tests.clear(); }
}