class TestRefinablePar(unittest.TestCase): def setUp(self): self.rpt = RefParType("test") self.testpar = RefinablePar("test", 3.0, 0, 10, self.rpt) return def testToFromPython(self): """See if refinable parameters can be created from within python and within c++.""" c = makeCrystal(*makeScatterer()) # Get a parameter created from c++ par = c.GetPar("a") self.assertAlmostEqual(3.52, par.GetValue()) # pass a parameter and pass it into c++ c.AddPar(self.testpar) # get it back testpar2 = c.GetPar("test") self.assertAlmostEqual(self.testpar.GetValue(), testpar2.GetValue()) testpar2.SetValue(2.17) self.assertAlmostEqual(2.17, testpar2.GetValue(), places=6) self.assertAlmostEqual(self.testpar.GetValue(), testpar2.GetValue()) return def testGetType(self): """See if we can get the proper RefParType from a RefinablePar.""" rpt2 = self.testpar.GetType() self.assertEqual(rpt2, self.rpt) return
def setUp(self): """Make a RefinableObj and add some RefinablePars.""" self.r = RefinableObj() self.r.SetName("test1") # Add some parameters self.rpt = RefParType("test") p1 = RefinablePar("p1", 3, 0, 10, self.rpt) p2 = RefinablePar("p2", -3, -10, 0, self.rpt) self.r.AddPar(p1) self.r.AddPar(p2) return
def testAddPar(self): """See if we crash if we add a parameter and delete the molecule.""" c = makeC60() m = self.c.GetScatterer("c60") rpt = RefParType("test") par = RefinablePar("testpar", 3, 0, 10, rpt) m.AddPar(par) self.assertAlmostEqual(3, par.GetValue()) del m self.assertAlmostEqual(3, par.GetValue()) del c self.assertAlmostEqual(3, par.GetValue()) return
def testAddParRefinableObj(self): """Test adding another object.""" r2 = RefinableObj() r2.SetName("test2") # Add some parameters p3 = RefinablePar("p3", 3, 0, 10, self.rpt) p4 = RefinablePar("p4", -3, -10, 0, self.rpt) r2.AddPar(p3) r2.AddPar(p4) self.r.AddPar(r2) self.assertEqual(4, self.r.GetNbPar()) return
def testAddParTwice(self): """Try to add the same parameter twice. We could stop this in the bindings, but since RefinableObj doesn't delete its parameters in the destructor, it shouldn't lead to trouble. """ p3 = RefinablePar("p3", 3, 0, 10, self.rpt) self.r.AddPar(p3) self.r.AddPar(p3) return
def parTest(): rpt = RefParType("default") testpar = RefinablePar("test", 3.0, 0, 10, rpt) print(testpar.__class__, testpar) sp, atom = makeScatterer() c = makeCrystal(sp, atom) par = c.GetPar(0) print(par.__class__, par) c.AddPar(testpar); testpar2 = c.GetPar("test") print(testpar2.__class__, testpar2) del sp, atom, c testpar2.SetValue(2.17) print(testpar.__class__, testpar) return
def setUp(self): self.rpt = RefParType("test") self.testpar = RefinablePar("test", 3.0, 0, 10, self.rpt) return