/* * 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 static org.junit.Assert.*; /** * User: <a href="mailto:padreati@yahoo.com">Aurelian Tutuianu</a> */ public class NominalTest { @Test public void testSmoke() { Var v = Nominal.empty(0); assertEquals(0, v.rowCount()); assertEquals(1, v.levels().length); assertEquals("?", v.levels()[0]); v = Nominal.empty(); assertEquals(0, v.rowCount()); assertEquals(1, v.levels().length); assertEquals("?", v.levels()[0]); assertTrue(v.type().isNominal()); assertFalse(v.type().isNumeric()); v = Nominal.empty(1, "a"); assertEquals(1, v.rowCount()); assertEquals("?", v.label(0)); assertEquals("Nominal[name:?, rowCount:10]", Nominal.empty(10).toString()); } @Test public void testDictionary() { Var v = Nominal.empty(0, "a", "a", "v", "a"); assertEquals(3, v.levels().length); assertEquals("?", v.levels()[0]); assertEquals("a", v.levels()[1]); assertEquals("v", v.levels()[2]); ArrayList<String> set = new ArrayList<>(); set.add("a"); set.add("v"); set.add("a"); v = Nominal.empty(0, set); assertEquals(3, v.levels().length); assertEquals("?", v.levels()[0]); assertEquals("a", v.levels()[1]); assertEquals("v", v.levels()[2]); } @Test public void testSetterGetter() { Var v = Nominal.empty(4, "a", "b", "c"); for (int i = 0; i < 4; i++) { assertTrue(v.missing(i)); assertEquals(0, v.index(i)); } // w/ index v.setIndex(0, 1); v.setIndex(1, 2); v.setIndex(2, 3); v.setIndex(3, 0); assertEquals("a", v.label(0)); assertEquals("b", v.label(1)); assertEquals("c", v.label(2)); assertEquals("?", v.label(3)); v.setLabel(0, "c"); v.setLabel(1, "b"); v.setLabel(2, "a"); v.setLabel(3, "?"); assertEquals(3, v.index(0)); assertEquals(2, v.index(1)); assertEquals(1, v.index(2)); assertEquals(0, v.index(3)); // w/ value v.setValue(0, 1); v.setValue(1, 2); v.setValue(2, 3); v.setValue(3, 0); assertEquals("a", v.label(0)); assertEquals("b", v.label(1)); assertEquals("c", v.label(2)); assertEquals("?", v.label(3)); v.setLabel(0, "c"); v.setLabel(1, "b"); v.setLabel(2, "a"); v.setLabel(3, "?"); assertEquals(3, v.value(0), 1e-10); assertEquals(2, v.value(1), 1e-10); assertEquals(1, v.value(2), 1e-10); assertEquals(0, v.value(3), 1e-10); } @Test public void testLabel() { Var v = Nominal.empty(1, "a", "b", "c"); boolean exceptional = false; try { v.setLabel(0, "j"); } catch (Throwable ex) { exceptional = true; } assertTrue(!exceptional); exceptional = false; try { v.setLabel(-1, "a"); } catch (Throwable ex) { exceptional = true; } assertTrue(exceptional); exceptional = false; try { v.setLabel(4, "a"); } catch (Throwable ex) { exceptional = true; } assertTrue(exceptional); } @Test public void testMissing() { Var v = Nominal.empty(1, "a", "b"); assertTrue(v.missing(0)); v.setLabel(0, "a"); assertFalse(v.missing(0)); v.setMissing(0); assertTrue(v.missing(0)); v.setLabel(0, "?"); assertTrue(v.missing(0)); } @Test public void testCopy() { Nominal a = Nominal.empty(0, "x", "y"); a.addLabel("x"); a.addLabel("y"); Nominal b = a.solidCopy(); a.addLabel("z"); assertEquals(2, b.rowCount()); assertEquals(3, a.rowCount()); } @Test public void testFactorBaseAddRemove() { Nominal var = Nominal.empty(0, "x", "y"); var.addMissing(); assertEquals(1, var.rowCount()); var.addIndex(1); assertEquals(2, var.rowCount()); assertEquals("x", var.label(1)); var.addValue(2.4); assertEquals(3, var.rowCount()); assertEquals("y", var.label(2)); var = Nominal.empty(); var.addLabel("x"); var.addLabel("y"); var.remove(0); assertEquals(1, var.rowCount()); assertEquals("y", var.label(0)); var.clear(); assertEquals(0, var.rowCount()); } @Test public void testFactorBaseBinaryStamp() { try { Nominal.empty(1, "x").binary(0); assertTrue(false); } catch (Throwable ignored) { } try { Nominal.empty().addBinary(true); assertTrue(false); } catch (Throwable ignored) { } try { Nominal.empty(1, "x").setBinary(0, true); assertTrue(false); } catch (Throwable ignored) { } try { Nominal.empty(1, "x").stamp(0); assertTrue(false); } catch (Throwable ignored) { } try { Nominal.empty().addStamp(1); assertTrue(false); } catch (Throwable ignored) { } try { Nominal.empty(1, "x").setStamp(0, 1); assertTrue(false); } catch (Throwable ignored) { } } @Test public void testJoinTermsDictionary() { Nominal x = Nominal.empty(0, "a", "b", "c"); x.addLabel("a"); x.addLabel("b"); x.addLabel("a"); x.addLabel("c"); x.addLabel("a"); x.addLabel("c"); x.addLabel("a"); x.setLevels("x", "y", "x"); assertEquals(3, x.levels().length); assertEquals("x", x.label(0)); assertEquals("y", x.label(1)); assertEquals("x", x.label(2)); assertEquals("x", x.label(3)); } @Test public void testAddTermsDictionary() { Nominal x = Nominal.empty(0, "a", "b", "c"); x.addLabel("a"); x.addLabel("b"); x.addLabel("a"); x.addLabel("c"); x.addLabel("a"); x.addLabel("c"); x.addLabel("a"); x.setLevels("x", "y", "z", "p"); assertEquals(5, x.levels().length); assertEquals("x", x.label(0)); assertEquals("y", x.label(1)); assertEquals("x", x.label(2)); assertEquals("z", x.label(3)); try { Nominal y = Nominal.empty(0, "a", "b"); y.setLevels("x"); assertTrue(false); } catch (Throwable ignored) { } } }