Source code for cis_interface.metaschema.properties.tests.test_ScalarMetaschemaProperties
import numpy as np
from cis_interface import units
from cis_interface.tests import assert_raises, assert_equal
from cis_interface.metaschema.properties import ScalarMetaschemaProperties
from cis_interface.metaschema.properties.tests import (
test_MetaschemaProperty as parent)
from cis_interface.metaschema.datatypes import MetaschemaTypeError
[docs]def test_data2dtype_errors():
r"""Check that error is raised for list, dict, & tuple objects."""
assert_raises(MetaschemaTypeError, ScalarMetaschemaProperties.data2dtype, [])
[docs]def test_definition2dtype_errors():
r"""Check that error raised if type not specified."""
assert_raises(KeyError, ScalarMetaschemaProperties.definition2dtype, {})
assert_raises(RuntimeError, ScalarMetaschemaProperties.definition2dtype,
{'type': 'float'})
assert_equal(ScalarMetaschemaProperties.definition2dtype({'type': 'bytes'}),
np.dtype((ScalarMetaschemaProperties._valid_types['bytes'])))
[docs]class TestSubtypeMetaschemaProperty(parent.TestMetaschemaProperty):
r"""Test class for SubtypeMetaschemaProperty class."""
_mod = 'ScalarMetaschemaProperties'
_cls = 'SubtypeMetaschemaProperty'
def __init__(self, *args, **kwargs):
super(TestSubtypeMetaschemaProperty, self).__init__(*args, **kwargs)
self._valid = [(int(1), 'int'), (float(1), 'float')]
self._invalid = [(int(1), 'float'), (float(1), 'int')]
self._valid_compare = [('int', 'int')]
self._invalid_compare = [('float', 'int')]
self._valid_normalize_schema = [
({'subtype': 'float'}, {'subtype': 'float'}),
({'units': 'g'}, {'units': 'g', 'subtype': 'float'}),
({'units': ''}, {'units': ''})]
[docs] def test_invalid_encode(self):
r"""Test invalid encode for object dtype."""
assert_raises(MetaschemaTypeError, self.import_cls.encode, object)
[docs]class TestPrecisionMetaschemaProperty(parent.TestMetaschemaProperty):
r"""Test class for PrecisionMetaschemaProperty class."""
_mod = 'ScalarMetaschemaProperties'
_cls = 'PrecisionMetaschemaProperty'
def __init__(self, *args, **kwargs):
super(TestPrecisionMetaschemaProperty, self).__init__(*args, **kwargs)
self._valid = [(np.int32(1), 32), (np.float16(1), 16)]
self._invalid = [(np.int32(1), 8), (np.float32(1), 16)]
self._valid_compare = [(32, 32), (16, 32)]
self._invalid_compare = [(32, 16)]
self._valid_normalize_schema = [
({'precision': 64}, {'precision': 64}),
({'subtype': 'int'}, {'subtype': 'int', 'precision': 64}),
({'subtype': 'complex'}, {'subtype': 'complex', 'precision': 128})]
[docs]class TestUnitsMetaschemaProperty(parent.TestMetaschemaProperty):
r"""Test class for UnitsMetaschemaProperty class."""
_mod = 'ScalarMetaschemaProperties'
_cls = 'UnitsMetaschemaProperty'
def __init__(self, *args, **kwargs):
super(TestUnitsMetaschemaProperty, self).__init__(*args, **kwargs)
self._valid = [(1, ''), (units.add_units(1, 'cm'), 'm')]
self._invalid = [(units.add_units(1, 'cm'), 'kg')]
self._valid_compare = [('cm', 'cm'), ('cm', 'm'), ('m', 'cm'),
('', 'cm'), ('cm', '')]
self._invalid_compare = [('cm', 'g')]