/******************************************************************************* * 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.matlabproxy; import static org.junit.Assert.*; import org.junit.Test; import com.analog.lyric.dimple.matlabproxy.PDiscreteDomain; import com.analog.lyric.dimple.matlabproxy.PDomain; import com.analog.lyric.dimple.matlabproxy.PHelpers; import com.analog.lyric.dimple.matlabproxy.PRealDomain; import com.analog.lyric.dimple.matlabproxy.PRealJointDomain; import com.analog.lyric.dimple.model.domains.DiscreteDomain; import com.analog.lyric.dimple.model.domains.Domain; import com.analog.lyric.dimple.model.domains.RealDomain; import com.analog.lyric.dimple.model.domains.RealJointDomain; import com.analog.lyric.dimple.test.DimpleTestBase; public class TestPDomain extends DimpleTestBase { @Test public void test() { DiscreteDomain abc = DiscreteDomain.create('a','b','c'); PDiscreteDomain pabc = new PDiscreteDomain(abc); assertInvariants(pabc); assertSame(abc, pabc.getModelerObject()); PDomain pabc2 = PHelpers.wrapDomain(abc); assertInvariants(pabc2); assertTrue(pabc2.isDiscrete()); assertSame(abc, pabc2.getModelerObject()); RealDomain r = new RealDomain(1.23, 3.1415); PRealDomain pr = new PRealDomain(r); assertInvariants(pr); assertSame(r, pr.getModelerObject()); RealDomain r2 = RealDomain.unbounded(); assertInvariants(new PRealDomain(r2)); PDomain pr2 = PHelpers.wrapDomain(r2); assertInvariants(pr2); assertTrue(pr2.isReal()); assertSame(r2, pr2.getModelerObject()); RealDomain r3 = new RealDomain(0.0, 1.0); Object pr3 = new PRealDomain(r3); assertInvariants((PDomain)pr3); assertEquals(pr3, new PRealDomain(r3)); assertEquals(pr3, new PRealDomain(new RealDomain(0.0, 1.0))); assertNotEquals(pr3, new PRealDomain(new RealDomain(0.0, 2.0))); assertNotEquals(pr3, pabc2); assertNotEquals(pr3, r3); assertEquals(pr3.hashCode(), new PRealDomain(r3).hashCode()); RealJointDomain rj = RealJointDomain.create(r, r2, r3); PRealJointDomain prj = new PRealJointDomain(rj); assertInvariants(prj); assertSame(rj, prj.getModelerObject()); PDomain prj2 = PHelpers.wrapDomain(rj); assertInvariants(prj2); assertSame(rj, prj2.getModelerObject()); Object[] prs = new Object[] {pr, pr2, pr3}; PRealJointDomain prj3 = new PRealJointDomain(prs); assertInvariants(prj3); assertEquals(prs.length, prj3.getNumVars()); for (int i = 0; i < prs.length; ++i) { RealDomain expected = ((PRealDomain)prs[i]).getModelerObject(); RealDomain actual = prj3.getModelerObject().getRealDomains()[i]; assertEquals(expected, actual); } } static public void assertInvariants(PDomain pdomain) { TestPObject.assertInvariants(pdomain); Domain mdomain = pdomain.getModelerObject(); assertSame(mdomain, pdomain.getDelegate()); assertEquals(pdomain,pdomain); assertNotNull(mdomain); assertEquals(pdomain.isDiscrete(), mdomain.isDiscrete()); assertEquals(pdomain.isJoint(), mdomain.isRealJoint()); assertEquals(pdomain.isReal(), mdomain.isReal()); if (pdomain.isDiscrete()) { assertDiscreteInvariants((PDiscreteDomain)pdomain); } if (pdomain.isJoint()) { assertRealJointInvariants((PRealJointDomain)pdomain); } if (pdomain.isReal()) { assertRealInvariants((PRealDomain)pdomain); } } static private void assertDiscreteInvariants(PDiscreteDomain pdiscrete) { DiscreteDomain mdiscrete = pdiscrete.getModelerObject(); assertArrayEquals(mdiscrete.getElements(), pdiscrete.getElements()); } static private void assertRealInvariants(PRealDomain preal) { RealDomain mreal = preal.getModelerObject(); assertEquals(mreal.getUpperBound(), preal.getUpperBound(), 0.0); assertEquals(mreal.getLowerBound(), preal.getLowerBound(), 0.0); } static private void assertRealJointInvariants(PRealJointDomain pjoint) { RealJointDomain mjoint = pjoint.getModelerObject(); assertEquals(mjoint.getNumVars(), pjoint.getNumVars()); } }