/*
* 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.TreeSet;
import static org.junit.Assert.*;
/**
* User: <a href="mailto:padreati@yahoo.com">Aurelian Tutuianu</a>
*/
public class OrdinalTest {
@Test
public void testSmoke() {
Var v = Ordinal.empty(0);
assertEquals(0, v.rowCount());
assertEquals(1, v.levels().length);
assertEquals("?", v.levels()[0]);
v = Ordinal.empty();
assertEquals(0, v.rowCount());
assertEquals(1, v.levels().length);
assertEquals("?", v.levels()[0]);
assertTrue(v.type().isNominal());
assertFalse(v.type().isNumeric());
v = Ordinal.empty(1, "a");
assertEquals(1, v.rowCount());
assertEquals("?", v.label(0));
assertEquals("Ordinal[name:?, rowCount:10]", Ordinal.empty(10).toString());
}
@Test
public void testDictionary() {
Var v = Ordinal.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]);
TreeSet<String> set = new TreeSet<>();
set.add("a");
set.add("v");
set.add("a");
v = Ordinal.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 = Ordinal.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 = Ordinal.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 = Ordinal.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() {
Ordinal a = Ordinal.empty(0, "x", "y");
a.addLabel("x");
a.addLabel("y");
Ordinal b = a.solidCopy();
a.addLabel("z");
assertEquals(2, b.rowCount());
assertEquals(3, a.rowCount());
}
}