/******************************************************************************* * Copyright 2014 Analog Devices, Inc. * * 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 com.analog.lyric.dimple.test.solvers.junctiontree; import static java.util.Objects.*; import static org.junit.Assert.*; import org.junit.Test; import com.analog.lyric.dimple.model.core.FactorGraph; import com.analog.lyric.dimple.model.transform.JunctionTreeTransform; import com.analog.lyric.dimple.model.transform.VariableEliminator.VariableCost; import com.analog.lyric.dimple.options.DimpleOptions; import com.analog.lyric.dimple.solvers.junctiontree.JunctionTreeOptions; import com.analog.lyric.dimple.solvers.junctiontree.JunctionTreeSolver; import com.analog.lyric.dimple.solvers.junctiontree.JunctionTreeSolverGraphBase; import com.analog.lyric.dimple.test.DimpleTestBase; /** * Unit tests for {@link JunctionTreeOptions}. * @since 0.07 * @author Christopher Barber */ public class TestJunctionTreeOptions extends DimpleTestBase { @Test public void test() { // Test default values assertEquals(false, JunctionTreeOptions.useConditioning.defaultValue()); assertTrue(JunctionTreeOptions.variableEliminatorCostFunctions.defaultValue().isEmpty()); assertEquals((Integer)JunctionTreeTransform.DEFAULT_MAX_TRANSFORMATION_ATTEMPTS, JunctionTreeOptions.maxTransformationAttempts.defaultValue()); FactorGraph fg = new FactorGraph(); // Check initial defaults JunctionTreeSolverGraphBase<?> sfg = requireNonNull(fg.setSolverFactory(new JunctionTreeSolver())); assertFalse(sfg.useConditioning()); assertEquals(JunctionTreeTransform.DEFAULT_MAX_TRANSFORMATION_ATTEMPTS, sfg.maxTransformationAttempts()); assertEquals(0, sfg.variableEliminatorCostFunctions().length); assertNull(fg.setSolverFactory(null)); // Set initial options on model. fg.setOption(JunctionTreeOptions.useConditioning, true); fg.setOption(JunctionTreeOptions.maxTransformationAttempts, 3); JunctionTreeOptions.variableEliminatorCostFunctions.set(fg, VariableCost.MIN_FILL); // Test options that are updated on initialize. sfg = requireNonNull(fg.setSolverFactory(new JunctionTreeSolver())); assertFalse(sfg.useConditioning()); assertEquals(JunctionTreeTransform.DEFAULT_MAX_TRANSFORMATION_ATTEMPTS, sfg.maxTransformationAttempts()); assertEquals(0, sfg.variableEliminatorCostFunctions().length); sfg.getTransformer().random().setSeed(42); sfg.initialize(); double r = sfg.getTransformer().random().nextDouble(); assertTrue(sfg.useConditioning()); assertEquals(3, sfg.maxTransformationAttempts()); assertArrayEquals(new Object[] { VariableCost.MIN_FILL.function() }, sfg.variableEliminatorCostFunctions()); // Make sure setting random seed through option produces same result fg.setOption(DimpleOptions.randomSeed, 42L); sfg.initialize(); assertEquals(r, sfg.getTransformer().random().nextDouble(), 0.0); // Test using set methods sfg.useConditioning(false); assertEquals(false, sfg.getLocalOption(JunctionTreeOptions.useConditioning)); sfg.maxTransformationAttempts(12); assertEquals((Integer)12, sfg.getLocalOption(JunctionTreeOptions.maxTransformationAttempts)); sfg.variableEliminatorCostFunctions(VariableCost.MIN_NEIGHBORS); assertArrayEquals( new Object[] { VariableCost.MIN_NEIGHBORS.function() }, requireNonNull(sfg.getOption(JunctionTreeOptions.variableEliminatorCostFunctions)).toArray()); } }