mirror of
https://github.com/openmm/openmm
synced 2026-06-03 06:39:48 +09:00
* Top level Python module is now "openmm" * Updated module names in examples * Updated module names in documentation * Updated module in CI scripts * Added deprecation warning
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
import pickle
|
|
import random
|
|
from openmm.unit import dalton, is_quantity
|
|
from openmm.app import element
|
|
import unittest
|
|
|
|
class TestElement(unittest.TestCase):
|
|
def test_immutable(self):
|
|
def modifyElement():
|
|
# this should not be allowed
|
|
element.sulfur.mass = 100*dalton
|
|
self.assertRaises(AttributeError, modifyElement)
|
|
|
|
def test_pickleable(self):
|
|
newsulfur = pickle.loads(pickle.dumps(element.sulfur))
|
|
# make sure that a new object is not created during the pickle/unpickle
|
|
# cycle
|
|
self.assertEqual(element.sulfur, newsulfur)
|
|
self.assertTrue(element.sulfur is newsulfur)
|
|
|
|
def test_attributes(self):
|
|
self.assertEqual(element.hydrogen.atomic_number, 1)
|
|
self.assertEqual(element.hydrogen.symbol, 'H')
|
|
self.assertEqual(element.hydrogen.name, 'hydrogen')
|
|
self.assertEqual(element.hydrogen.mass, 1.007947 * dalton)
|
|
|
|
def test_getByMass(self):
|
|
""" Tests the getByMass method """
|
|
def exhaustive_search(mass):
|
|
"""
|
|
Searches through all element symbols and finds the one with the
|
|
smallest mass difference
|
|
"""
|
|
min_diff = mass
|
|
closest_element = None
|
|
for elem in sorted(element.Element._elements_by_symbol.values(),
|
|
key=lambda x:x.mass):
|
|
diff = abs(elem.mass._value - mass)
|
|
if diff < min_diff:
|
|
min_diff = diff
|
|
closest_element = elem
|
|
return closest_element
|
|
|
|
# Check 500 random numbers between 0 and 200
|
|
for i in range(500):
|
|
mass = random.random() * 200
|
|
elem = element.Element.getByMass(mass)
|
|
self.assertTrue(elem is exhaustive_search(mass))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|