/******************************************************************************* * Copyright 2012 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; import static org.junit.Assert.*; import org.eclipse.jdt.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.analog.lyric.dimple.model.core.FactorGraph; import com.analog.lyric.dimple.model.variables.FiniteFieldVariable; import com.analog.lyric.dimple.solvers.interfaces.IFactorGraphFactory; import com.analog.lyric.dimple.solvers.sumproduct.SumProductSolverGraph; public class FiniteFieldTest extends DimpleTestBase { static @Nullable IFactorGraphFactory<?> _oldSolver; @Before public void setUp() { } @After public void tearDown() { } @SuppressWarnings("null") @Test public void test_doubleXor() { int primPoly = 19; int k = 4; double [] priors = new double[(int)Math.pow(2,k)]; double sum = 0; for (int i = 0; i < priors.length; i++) { priors[i] = 1.0/100.0; if (i > 0) sum += priors[i]; } priors[0] = 1-sum; FactorGraph fg = new FactorGraph(); FiniteFieldVariable [] ffx = new FiniteFieldVariable [3]; for (int i = 0; i < ffx.length; i++) { ffx[i] = new FiniteFieldVariable(primPoly); ffx[i].setPrior(priors); } fg.addFactor("finiteFieldAdd", ffx); fg.addFactor("finiteFieldAdd", ffx); ((SumProductSolverGraph)fg.getSolver()).setNumIterations(10); fg.solve(); for (int i = 0; i < ffx.length; i++) { double [] beliefs = (double[])ffx[i].getBeliefObject(); for (int j = 0; j < beliefs.length; j++) { double actual = 0; if (j == 0) actual = 1; assertEquals(beliefs[j], actual,1e-10); } } //Variable v = new FiniteFieldVariable(19); } }