/* * File: RandomSubspaceTest.java * Authors: Justin Basilico * Project: Cognitive Foundry * * Copyright 2011 Cognitive Foundry. All rights reserved. */ package gov.sandia.cognition.learning.data.feature; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.learning.function.vector.SubVectorEvaluator; import gov.sandia.cognition.math.matrix.VectorFactory; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.Random; import java.util.Set; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class RandomSubspace. * * @author Justin Basilico * @since 3.3.3 */ public class RandomSubspaceTest { /** Random number generator. */ protected Random random = new Random(4777); /** * Creates a new test. */ public RandomSubspaceTest() { super(); } /** * Test of constructors method, of class RandomSubspace. */ @Test public void testConstructors() { int size = RandomSubspace.DEFAULT_SIZE; VectorFactory<?> vectorFactory = VectorFactory.getDefault(); RandomSubspace instance = new RandomSubspace(); assertEquals(size, instance.getSize()); assertNotNull(instance.getRandom()); assertSame(vectorFactory, instance.getVectorFactory()); size = this.random.nextInt(1000) + 1; instance = new RandomSubspace(size); assertNotNull(instance.getRandom()); assertSame(vectorFactory, instance.getVectorFactory()); assertNotNull(instance.getRandom()); Random random = new Random(); instance = new RandomSubspace(size, random); assertNotNull(instance.getRandom()); assertSame(vectorFactory, instance.getVectorFactory()); assertNotNull(instance.getRandom()); vectorFactory = VectorFactory.getSparseDefault(); instance = new RandomSubspace(size, random, vectorFactory); assertNotNull(instance.getRandom()); assertSame(vectorFactory, instance.getVectorFactory()); assertNotNull(instance.getRandom()); } /** * Test of learn method, of class RandomSubspace. */ @Test public void testLearn() { int size = 3; RandomSubspace instance = new RandomSubspace(size, random); assertNull(instance.learn(null)); assertNull(instance.learn(new LinkedList<Vector>())); int dimensionality = 7; Collection<Vector> data = new ArrayList<Vector>(); data.add(VectorFactory.getDefault().createVector(dimensionality)); data.add(VectorFactory.getDefault().createVector(dimensionality)); SubVectorEvaluator result = instance.learn(data); assertEquals(dimensionality, result.getInputDimensionality()); assertEquals(size, result.getOutputDimensionality()); Set<Integer> indexSet = new LinkedHashSet<Integer>(); for (int index : result.getSubIndices()) { assertTrue(index >= 0); assertTrue(index < dimensionality); indexSet.add(index); } assertEquals(size, indexSet.size()); size = dimensionality * 2; instance.setSize(size); result = instance.learn(data); size = dimensionality; assertEquals(dimensionality, result.getInputDimensionality()); assertEquals(size, result.getOutputDimensionality()); indexSet = new LinkedHashSet<Integer>(); for (int index : result.getSubIndices()) { assertTrue(index >= 0); assertTrue(index < dimensionality); indexSet.add(index); } assertEquals(size, indexSet.size()); } /** * Test of getSize method, of class RandomSubspace. */ @Test public void testGetSize() { this.testSetSize(); } /** * Test of setSize method, of class RandomSubspace. */ @Test public void testSetSize() { int size = RandomSubspace.DEFAULT_SIZE; RandomSubspace instance = new RandomSubspace(); assertEquals(size, instance.getSize()); int[] goodValues = {1, 2, 5, 1000, 4, random.nextInt(100) + 1}; for (int goodValue : goodValues) { size = goodValue; instance.setSize(size); } int[] badValues = {0, -1, -2, -45, -random.nextInt(100)}; for (int badValue : badValues) { boolean exceptionThrown = false; try { instance.setSize(badValue); } catch (IllegalArgumentException e) { exceptionThrown = true; } finally { assertTrue(exceptionThrown); } assertEquals(size, instance.getSize()); } } /** * Test of getVectorFactory method, of class RandomSubspace. */ @Test public void testGetVectorFactory() { this.testSetVectorFactory(); } /** * Test of setVectorFactory method, of class RandomSubspace. */ @Test public void testSetVectorFactory() { VectorFactory<?> vectorFactory = VectorFactory.getDefault(); RandomSubspace instance = new RandomSubspace(); assertSame(vectorFactory, instance.getVectorFactory()); vectorFactory = VectorFactory.getSparseDefault(); instance.setVectorFactory(vectorFactory); assertSame(vectorFactory, instance.getVectorFactory()); vectorFactory = VectorFactory.getDenseDefault(); instance.setVectorFactory(vectorFactory); assertSame(vectorFactory, instance.getVectorFactory()); } }