package water.rapids.ast.prims.mungers;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import water.Scope;
import water.TestUtil;
import water.fvec.TestFrameBuilder;
import water.fvec.Frame;
import water.fvec.Vec;
import water.rapids.Rapids;
import water.rapids.Val;
import water.rapids.vals.ValFrame;
import water.util.ArrayUtils;
import water.rapids.Session;
public class AstPivotTest extends TestUtil {
@BeforeClass
static public void setup() { stall_till_cloudsize(1); }
@Test public void TestPivot() {
Scope.enter();
try {
Session sess = new Session();
Frame fr = Scope.track(new TestFrameBuilder()
.withName("$fr", sess)
.withColNames("index", "col", "value")
.withVecTypes(Vec.T_NUM,Vec.T_CAT,Vec.T_NUM)
.withDataForCol(0, ar(1, 2, 3, 4, 2, 4))
.withDataForCol(1, ar("a", "a", "a", "a", "b", "b"))
.withDataForCol(2, ard(10.1, 10.2, 10.3, 10.4, 20.1, 22.2))
.build());
Val val = Rapids.exec("(pivot $fr 'index' 'col' 'value')", sess);
Assert.assertTrue(val instanceof ValFrame);
Frame res = Scope.track(val.getFrame());
// check the first column. should be all unique indexes in order
assertVecEquals(res.vec(0),dvec(1.0,2.0,3.0,4.0), 0.0);
// next column is "a" values in correct order
assertVecEquals(res.vec(1),dvec(10.1,10.2,10.3,10.4), 0.0);
// last column is "b" values
assertVecEquals(res.vec(2),dvec(Double.NaN, 20.1, Double.NaN,22.2), 0.0);
} finally {
Scope.exit();
}
}
}