package test.prefuse.data.column;
import junit.framework.TestCase;
import prefuse.data.Table;
import prefuse.data.expression.ArithmeticExpression;
import prefuse.data.expression.ColumnExpression;
import prefuse.data.expression.Expression;
import prefuse.data.expression.NumericLiteral;
import prefuse.data.io.DelimitedTextTableWriter;
import prefuse.data.util.TableIterator;
import test.prefuse.TestConfig;
import test.prefuse.data.TableTest;
import test.prefuse.data.TableTestData;
public class ExpressionColumnTest extends TestCase implements TableTestData {
Table t;
protected void setUp() throws Exception {
super.setUp();
t = TableTest.getTestCaseTable();
}
protected void tearDown() throws Exception {
super.tearDown();
t = null;
}
public void testDerivedColumn() {
String AVG = "average";
Expression fc = new ColumnExpression(HEADERS[3]);
Expression dc = new ColumnExpression(HEADERS[4]);
Expression l2 = new NumericLiteral(2);
Expression add = new ArithmeticExpression(
ArithmeticExpression.ADD, fc, dc);
Expression avg = new ArithmeticExpression(
ArithmeticExpression.DIV, add, l2);
t.addColumn(AVG, avg);
TableIterator it = t.iterator();
while ( it.hasNext() ) {
it.nextInt();
float f = it.getFloat(HEADERS[3]);
double d = it.getDouble(HEADERS[4]);
double av = (f+d)/2;
assertTrue(av == it.getDouble(AVG));
}
int r = t.addRow();
assertTrue(t.getDouble(r, AVG) == 0.0);
t.setFloat(r, HEADERS[3], 2.0f);
assertTrue(t.getDouble(r, AVG) == 1.0);
t.setDouble(r, HEADERS[4], 3.0f);
assertTrue(t.getDouble(r, AVG) == 2.5);
if ( TestConfig.verbose() ) {
try {
new DelimitedTextTableWriter().writeTable(t, System.out);
} catch ( Exception e ) { e.printStackTrace(); }
}
t.removeColumn(AVG);
t.setDouble(0, HEADERS[4], 0);
System.gc();
t.setDouble(0, HEADERS[4], 0);
if ( TestConfig.verbose() ) {
try {
new DelimitedTextTableWriter().writeTable(t, System.out);
} catch ( Exception e ) { e.printStackTrace(); }
}
}
}