/* * Apache License * Version 2.0, January 2004 * http://www.apache.org/licenses/ * * Copyright 2013 Aurelian Tutuianu * Copyright 2014 Aurelian Tutuianu * Copyright 2015 Aurelian Tutuianu * Copyright 2016 Aurelian Tutuianu * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package rapaio.data; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * User: <a href="mailto:padreati@yahoo.com">Aurelian Tutuianu</a> */ public class SolidFrameTest { @Test public void testEmptySolidFrame() { Frame df = SolidFrame.byVars(); assertEquals(0, df.rowCount()); assertEquals(0, df.varCount()); } @Test public void testColIndexes() { Frame df = SolidFrame.byVars( Numeric.empty().withName("x"), Numeric.empty().withName("y"), Numeric.empty().withName("z")); assertEquals(3, df.varCount()); assertEquals("x", df.varNames()[0]); assertEquals("z", df.varNames()[2]); assertEquals(0, df.varIndex("x")); assertEquals(2, df.varIndex("z")); try { df.varIndex("q"); assertTrue("should raise an exception", false); } catch (IllegalArgumentException ignored) { } try { df.var(10); assertTrue("should raise an exception", false); } catch (IllegalArgumentException ignored) { } try { df.var(-1); assertTrue("should raise an exception", false); } catch (IllegalArgumentException ignored) { } assertEquals("x", df.varNames()[0]); assertEquals("y", df.varNames()[1]); assertEquals("z", df.varNames()[2]); } @Test public void testConvenientMethods() { List<Var> vars = new ArrayList<>(); vars.add(Numeric.copy(1., 2., 3., 4.).withName("x")); vars.add(Numeric.copy(3., 5., 9., 12.).withName("y")); vars.add(Nominal.empty(4, "ana", "are", "mere").withName("name")); vars.add(Index.seq(1, 4).withName("index")); Frame df = SolidFrame.byVars(vars); assertEquals(1., df.value(0, 0), 1e-10); df.setValue(0, 0, 3.); assertEquals(3., df.value(0, 0), 1e-10); double t = 0; for (int i = 0; i < df.rowCount(); i++) { t += df.value(i, 1) - 3.; } assertEquals(17., t, 1e-10); assertTrue(df.var("name").missing(0)); assertTrue(df.var("name").missing(3)); df.setLabel(0, 2, "ana"); df.setLabel(1, 2, "are"); df.setLabel(2, 2, "mere"); assertEquals("ana", df.label(0, 2)); assertEquals("are", df.label(1, 2)); assertEquals("mere", df.label(2, 2)); df.setIndex(1, 2, 3); assertEquals("mere", df.label(1, 2)); assertEquals(1, df.index(0, 3)); assertEquals(2, df.index(1, 3)); assertEquals(3, df.index(2, 3)); assertEquals(4, df.index(3, 3)); df.setIndex(0, 3, 5); assertEquals(5, df.index(0, 3)); } @Test public void testBuilders() { Var x = Numeric.wrap(1, 2, 3, 4).withName("x"); Var y = Nominal.copy("a", "c", "b", "a").withName("y"); Frame df1 = SolidFrame.byVars(x, y); assertEquals(2, df1.varCount()); assertEquals(4, df1.rowCount()); try { SolidFrame.byVars(x, y.mapRows(Mapping.range(0, 4))); assertTrue("should raise an exception", false); } catch (IllegalArgumentException ignored) { } Frame df2 = SolidFrame.byVars(x).bindVars(y); assertEquals(2, df2.varCount()); assertEquals(4, df2.rowCount()); for (int i = 0; i < df1.rowCount(); i++) { assertEquals(df1.value(i, "x"), df2.value(i, "x"), 1e-12); assertEquals(df1.label(i, "y"), df2.label(i, "y")); } df2 = SolidFrame.byVars(x).bindVars(SolidFrame.byVars(y)); assertEquals(2, df2.varCount()); assertEquals(4, df2.rowCount()); for (int i = 0; i < df1.rowCount(); i++) { assertEquals(df1.value(i, "x"), df2.value(i, "x"), 1e-12); assertEquals(df1.label(i, "y"), df2.label(i, "y")); } df2 = df1.mapVars("x").bindVars(df1.mapVars("y")); assertEquals(2, df2.varCount()); assertEquals(4, df2.rowCount()); for (int i = 0; i < df1.rowCount(); i++) { assertEquals(df1.value(i, "x"), df2.value(i, "x"), 1e-12); assertEquals(df1.label(i, "y"), df2.label(i, "y")); } df2 = SolidFrame.byVars(y).bindVars( SolidFrame.byVars(Numeric.wrap(1, 2).withName("x")) .bindRows(SolidFrame.byVars(Numeric.wrap(3, 4).withName("x"))) ); assertEquals(2, df2.varCount()); assertEquals(4, df2.rowCount()); for (int i = 0; i < df1.rowCount(); i++) { assertEquals(df1.value(i, "x"), df2.value(i, "x"), 1e-12); assertEquals(df1.label(i, "y"), df2.label(i, "y")); } try { SolidFrame.byVars( Numeric.wrap(1, 2).withName("x"), BoundVar.from(Numeric.wrap(3, 4).withName("y")) ); assertTrue("should raise an exception", false); } catch (IllegalArgumentException ignored) { } } @Test public void testMatrixBuilders() { Frame df = SolidFrame.matrix(10, "a", "b", "c"); assertEquals(10, df.rowCount()); assertEquals(3, df.varCount()); for (int i = 0; i < df.varCount(); i++) { for (int j = 0; j < df.rowCount(); j++) { assertEquals(0, df.value(j, i), 1e-12); } } } }