package water.rapids;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import water.Key;
import water.Keyed;
import water.TestUtil;
import water.fvec.Frame;
import water.rapids.vals.ValFrame;
public class RBindTest extends TestUtil {
@BeforeClass public static void setup() { stall_till_cloudsize(1); }
@Test public void testBasic() {
Frame fr = null;
String tree = "(rbind 99 a.hex 98)";
try {
fr = checkTree(tree);
Assert.assertEquals(99, fr.vec(0).at(0), Math.ulp(1)); // 1st row 99
Assert.assertEquals(99, fr.vec(3).at(0), Math.ulp(1)); // 1st row 99
Assert.assertEquals(5.1, fr.vec(0).at(1), Math.ulp(1)); // 1st row iris
Assert.assertEquals(0.2, fr.vec(3).at(1), Math.ulp(1)); // 1st row iris
Assert.assertEquals(5.9, fr.vec(0).at(150), Math.ulp(1)); // last row iris
Assert.assertEquals(1.8, fr.vec(3).at(150), Math.ulp(1)); // last row iris
Assert.assertEquals(98, fr.vec(0).at(151), Math.ulp(1)); // last row 98
Assert.assertEquals(98, fr.vec(3).at(151), Math.ulp(1)); // last row 98
} finally {
if( fr != null ) fr.delete();
Keyed.remove(Key.make("a.hex"));
}
}
@Test public void testZeroArgs() {
Frame fr = null;
String tree = "(rbind )";
try {
fr = checkTree(tree);
Assert.assertEquals(0, fr.numRows());
} finally {
if( fr != null ) fr.delete();
Keyed.remove(Key.make("a.hex"));
}
}
@Test public void testScalarsOnly() {
Frame fr = null;
String tree = "(rbind 99 98)";
try {
fr = checkTree(tree);
Assert.assertEquals(2, fr.numRows());
Assert.assertEquals(1, fr.numCols());
Assert.assertEquals(99, fr.vec(0).at(0), Math.ulp(1)); // 1st row 99
Assert.assertEquals(98, fr.vec(0).at(1), Math.ulp(1)); // 2nd row 98
} finally {
if( fr != null ) fr.delete();
Keyed.remove(Key.make("a.hex"));
}
}
@Test public void testMulti() {
Frame fr = null;
String tree = "(rbind 99 a.hex 98 a.hex 97)";
try {
fr = checkTree(tree);
Assert.assertEquals( 99, fr.vec(0).at( 0), Math.ulp(1)); // 1st row 99
Assert.assertEquals( 99, fr.vec(3).at( 0), Math.ulp(1)); // 1st row 99
Assert.assertEquals(5.1, fr.vec(0).at( 1), Math.ulp(1)); // 1st row iris
Assert.assertEquals(0.2, fr.vec(3).at( 1), Math.ulp(1)); // 1st row iris
Assert.assertEquals(5.9, fr.vec(0).at(150), Math.ulp(1)); // last row iris
Assert.assertEquals(1.8, fr.vec(3).at(150), Math.ulp(1)); // last row iris
Assert.assertEquals( 98, fr.vec(0).at(151), Math.ulp(1)); // last row 98
Assert.assertEquals( 98, fr.vec(3).at(151), Math.ulp(1)); // last row 98
Assert.assertEquals(5.1, fr.vec(0).at(152), Math.ulp(1)); // 1st row iris
Assert.assertEquals(0.2, fr.vec(3).at(152), Math.ulp(1)); // 1st row iris
Assert.assertEquals(5.9, fr.vec(0).at(301), Math.ulp(1)); // last row iris
Assert.assertEquals(1.8, fr.vec(3).at(301), Math.ulp(1)); // last row iris
Assert.assertEquals( 97, fr.vec(0).at(302), Math.ulp(1)); // last row 98
Assert.assertEquals( 97, fr.vec(3).at(302), Math.ulp(1)); // last row 98
} finally {
if( fr != null ) fr.delete();
Keyed.remove(Key.make("a.hex"));
}
}
private Frame checkTree(String tree) { return checkTree(tree,false); }
private Frame checkTree(String tree, boolean expectThrow) {
Frame fr = parse_test_file(Key.make("a.hex"),"smalldata/iris/iris_wheader.csv");
fr.remove(4).remove();
try {
Val val = Rapids.exec(tree);
Assert.assertFalse(expectThrow);
System.out.println(val.toString());
if (val instanceof ValFrame)
return val.getFrame();
throw new IllegalArgumentException("exepcted a frame return");
} catch( IllegalArgumentException iae ) {
if( !expectThrow ) throw iae; // If not expecting a throw, then throw which fails the junit
fr.delete(); // If expecting, then cleanup
return null;
}
}
}