package water.rapids.ast.prims.assign; import org.junit.BeforeClass; import org.junit.Test; import water.DKV; import water.Key; import water.Scope; import water.TestUtil; import water.fvec.Frame; import water.rapids.Env; import water.rapids.Rapids; import water.rapids.Session; import water.util.ArrayUtils; import static org.junit.Assert.*; /** */ public class AstTmpAssignTest extends TestUtil { @BeforeClass public static void setup() { stall_till_cloudsize(1); } @Test public void testDollarIds() { Frame f = null, v, w; try { Session sess = new Session(); String expid1 = "id1~" + sess.id(); f = ArrayUtils.frame(Key.<Frame>make(), ar("a", "b"), ard(1, -1), ard(2, 0), ard(3, 1)); v = Rapids.exec("(, " + f._key + ")->$id1", sess).getFrame(); w = DKV.get(expid1).get(); assertArrayEquals(f._names, v._names); assertEquals(expid1, v._key.toString()); assertEquals(expid1, new Env(sess).expand("$id1")); assertNotEquals(f._key, v._key); assertEquals(w, v); String expid2 = "foo~" + sess.id(); Rapids.exec("(rename '$id1' '$foo')", sess); DKV.get(expid2).get(); assertEquals(DKV.get(expid1), null); Rapids.exec("(rm $foo)", sess); assertEquals(DKV.get(expid2), null); } finally { if (f != null) f.delete(); } } @Test public void assignSameId() { Scope.enter(); try { Session session = new Session(); String newid = new Env(session).expand("$frame1"); Frame f = ArrayUtils.frame(Key.<Frame>make(), ar("a", "b"), ard(1, -1), ard(2, 0), ard(3, 1)); Frame v = Rapids.exec("(tmp= $frame1 (, " + f._key + ")->$frame1)", session).getFrame(); Frame w = DKV.get(newid).get(); Scope.track(f, v); assertEquals(newid, v._key.toString()); assertArrayEquals(f.names(), v.names()); assertNotEquals(f._key, v._key); assertEquals(w, v); newid = new Env(session).expand("$f"); v = Rapids.exec("(, (, $frame1)->$f)->$f", session).getFrame(); Scope.track(v); assertEquals(newid, v._key.toString()); newid = new Env(session).expand("$g"); v = Rapids.exec("(colnames= (, $f)->$g [0 1] ['egg', 'ham'])->$g", session).getFrame(); Scope.track(v); assertEquals(newid, v._key.toString()); assertArrayEquals(new String[]{"egg", "ham"}, v.names()); } finally { Scope.exit(); } } }