package water.fvec;
import java.util.Arrays;
import org.junit.*;
import water.*;
import water.util.Utils;
public class TransfVecTest extends TestUtil {
@Test @Ignore
public void testAdaptTo() {
Frame v1 = null, v2 = null;
Vec vv = null;
try {
v1 = parseFrame(Key.make("v1.hex"), find_test_file("smalldata/test/cm/v1.csv"));
v2 = parseFrame(Key.make("v2.hex"), find_test_file("smalldata/test/cm/v4.csv"));
//vv = v1.vecs()[0].adaptTo(v2.vecs()[0], true);
} finally {
if (v1 != null) v1.delete();
if (v2 != null) v2.delete();
if (vv != null) UKV.remove(vv._key);
}
}
/** Verifies that {@link Model#getDomainMapping(String[], String[], boolean)} returns
* correct values. */
@Test public void testModelMappingCall() {
testModelMapping(ar("A", "B", "C"), ar("A", "B", "C"), ar( ari(0,1,2), ari(0,1,2) ));
testModelMapping(ar("A", "B", "C"), ar( "B", "C"), ar( ari(0,1), ari(1,2) ));
testModelMapping(ar("A", "B", "C"), ar( "B" ), ar( ari(0), ari(1) ));
testModelMapping(ar("A", "B", "C"), ar("A", "B", "C", "D"), ar( ari(0,1,2), ari(0,1,2) ));
testModelMapping(ar("A", "B", "C"), ar( "B", "C", "D"), ar( ari(0,1), ari(1,2) ));
testModelMapping(ar("A", "B", "C"), ar( "B", "D"), ar( ari(0), ari(1) ));
}
private void testModelMapping(String[] modelDomain, String[] colDomain, int[][] expectedMapping) {
int[][] mapping = Model.getDomainMapping(modelDomain, colDomain, false);
Assert.assertEquals("getDomainMapping should return int[2][]", 2, mapping.length);
Assert.assertEquals("getDomainMapping shoudl return two arrays of the same length", mapping[0].length, mapping[1].length);
Assert.assertArrayEquals("Values array differs", expectedMapping[0], mapping[0]);
Assert.assertArrayEquals("Indexes array differs", expectedMapping[1], mapping[1]);
// Sanity check if we pass correct indexes
int[] indexes = mapping[0];
for (int i=0; i<indexes.length; i++)
if (indexes[i] < 0 || indexes[i]>=modelDomain.length)
Assert.assertTrue("Returned index mapping at " + i + "does not index correctly model domain " + Arrays.toString(modelDomain), false);
}
@Test public void testMappingComposition() {
assertEqualMapping(
ar( ari(1), ari(0)), // expecting composed mapping
Utils.compose( ar( ari(-1,1), null), // <- 1st mapping
ar( ari( 1,2), ari(0,1))) // <- 2nd mapping
);
assertEqualMapping(
ar( ari(1,2,3,4,5,6), ari(0,1,2,3,4,5)), // expecting composed mapping
Utils.compose( ar( ari(-1,1,2,3,4,5,6), null), // <- 1st mapping
ar( ari(1,2,3,4,5,6), ari(0,1,2,3,4,5))) // <- 2nd mapping
);
}
private void assertEqualMapping(int[][] expectedMapping, int[][] actualMapping) {
Assert.assertEquals("Mapping should be composed of two arrays", 2, actualMapping.length);
Assert.assertEquals("Mapping should be composed of two arrays of equal length", actualMapping[0].length, actualMapping[1].length);
}
}