Source code for sciunit.unit_test.model_tests
"""Unit tests for models and capabilities"""
import unittest
[docs]class ModelsTestCase(unittest.TestCase):
"""Unit tests for the sciunit module"""
[docs] def setUp(self):
from sciunit.models.examples import UniformModel
self.M = UniformModel
[docs] def test_get_model_state(self):
from sciunit import Model
m = Model()
state = m.__getstate__()
self.assertEqual(m.__dict__, state)
[docs] def test_get_model_capabilities(self):
from sciunit.capabilities import ProducesNumber
m = self.M(2, 3)
self.assertEqual(m.capabilities, [ProducesNumber])
[docs] def test_get_model_description(self):
m = self.M(2, 3)
m.describe()
m.description = "Lorem Ipsum"
m.describe()
[docs] def test_check_model_capabilities(self):
from sciunit.tests import RangeTest
t = RangeTest([2,3])
m = self.M(2,3)
t.check(m)
[docs] def test_check_missing_capabilities_1(self):
from sciunit.capabilities import Runnable
from sciunit.errors import CapabilityNotImplementedError
m = self.M(2, 3, name='Not actually runnable due to lack of capability provision')
try:
m.run()
except AttributeError as e:
pass
else:
self.fail("Unprovided capability was called and not caught")
[docs] def test_check_missing_capabilities_2(self):
from sciunit.capabilities import Runnable
from sciunit.errors import CapabilityNotImplementedError
class MyModel(self.M, Runnable):
pass
m = MyModel(2, 3, name='Not actually runnable due to lack of capability implementation')
try:
m.run()
except CapabilityNotImplementedError as e:
pass
else:
self.fail("Unimplemented capability was called and not caught")
[docs] def test_check_missing_capabilities_3(self):
from sciunit.capabilities import Runnable
from sciunit.errors import CapabilityNotImplementedError
class MyModel(self.M, Runnable):
def run(self):
print("Actually running!")
m = MyModel(2, 3, name='Now actually runnable')
m.run()
[docs] def test_regular_models(self):
from sciunit.models.examples\
import ConstModel, UniformModel, SharedModel
m = ConstModel(3)
self.assertEqual(m.produce_number(),3)
m = UniformModel(3,4)
self.assertTrue(3 < m.produce_number() < 4)
[docs] def test_irregular_models(self):
from sciunit.models.examples\
import CacheByInstancePersistentUniformModel,\
CacheByValuePersistentUniformModel
a = CacheByInstancePersistentUniformModel(2,3)
a1 = a.produce_number()
a2 = a.produce_number()
self.assertEqual(a1,a2)
b = CacheByInstancePersistentUniformModel(2,3)
b1 = b.produce_number()
self.assertNotEqual(b1,a2)
c = CacheByValuePersistentUniformModel(2,3)
c1 = c.produce_number()
c2 = c.produce_number()
self.assertEqual(c1,c2)
d = CacheByValuePersistentUniformModel(2,3)
d1 = d.produce_number()
self.assertEqual(d1,c2)
[docs]class CapabilitiesTestCase(unittest.TestCase):
"""Unit tests for sciunit Capability classes"""
[docs] def test_capabilities(self):
from sciunit import Model
from sciunit.capabilities import ProducesNumber
from sciunit.models import Model
from sciunit.models.examples import UniqueRandomNumberModel,\
RepeatedRandomNumberModel
class MyModel(Model,ProducesNumber):
def produce_number(self):
return 3.14
m = MyModel()
self.assertEqual(m.produce_number(),3.14)
m = UniqueRandomNumberModel()
self.assertNotEqual(m.produce_number(),m.produce_number())
m = RepeatedRandomNumberModel()
self.assertEqual(m.produce_number(),m.produce_number())