Beispiel #1
0
def test_quantity_deserialization():
    s = json.dumps(datatypes.Quantity(3.5, 'meters'),
                   cls=datatypes.JSONEncoder)
    quantity = json.loads(s, object_hook=datatypes.JSONEncoder.object_hook)
    assert quantity.units == 'meters'
    assert quantity.magnitude == 3.5
    assert quantity.pint_units == datatypes.ureg.Unit('meter')
Beispiel #2
0
def test_quantity_deserialization_unitless():
    # when using None as unit, it's a dimensionless quantity
    s = json.dumps(datatypes.Quantity(3.5, None), cls=datatypes.JSONEncoder)
    quantity = json.loads(s, object_hook=datatypes.JSONEncoder.object_hook)
    assert quantity.units == None
    assert quantity.magnitude == 3.5
    assert quantity.pint_units == datatypes.ureg.Unit('1')
Beispiel #3
0
def test_quantity_deserialization_base_units():
    # when using None as unit, it's a dimensionless quantity
    s = json.dumps(datatypes.Quantity(3500, 'kilometers', True),
                   cls=datatypes.JSONEncoder)
    quantity = json.loads(s, object_hook=datatypes.JSONEncoder.object_hook)
    assert quantity.units == 'kilometers'
    assert quantity.magnitude == 3.5
    assert quantity.magnitude_in_base_units == 3500
    assert quantity.pint_units == datatypes.ureg.Unit('kilometers')
Beispiel #4
0
def test_quantity_serialization_string():
    # The magnitude may be passed as anything that can be converted to a float
    s = json.dumps(datatypes.Quantity("3.5", None), cls=datatypes.JSONEncoder)
    assert json.loads(s) == {
        '_type': 'quantity',
        'units': None,
        'magnitude_in_base_units': 3.5,
        'dimensionality': 'dimensionless'
    }
Beispiel #5
0
def test_quantity_serialization_unitless():
    # when using None as unit, it's a dimensionless quantity
    s = json.dumps(datatypes.Quantity(3.5, None), cls=datatypes.JSONEncoder)
    assert json.loads(s) == {
        '_type': 'quantity',
        'units': None,
        'magnitude_in_base_units': 3.5,
        'dimensionality': 'dimensionless'
    }
Beispiel #6
0
def test_quantity_valid_data_dimensionless():
    schema = {
        'type': 'object',
        'properties': {
            'test': datatypes.Quantity.JSON_SCHEMA
        }
    }
    data = {'test': datatypes.Quantity(1, None)}
    raw_data = json.loads(json.dumps(data, cls=datatypes.JSONEncoder))
    jsonschema.validate(raw_data, schema)
Beispiel #7
0
def test_quantity_serialization_units():
    # units passed as strings are kept as is, even though they might not be in the canonical form
    s = json.dumps(datatypes.Quantity(3.5, 'meters'),
                   cls=datatypes.JSONEncoder)
    assert json.loads(s) == {
        '_type': 'quantity',
        'units': 'meters',
        'magnitude_in_base_units': 3.5,
        'dimensionality': '[length]'
    }
Beispiel #8
0
def test_quantity_serialization_units_pint():
    # any unit recognized by pint can be used
    s = json.dumps(datatypes.Quantity(3.5, datatypes.ureg.Unit("kilometers")),
                   cls=datatypes.JSONEncoder)
    assert json.loads(s) == {
        '_type': 'quantity',
        'units': 'kilometer',
        'magnitude_in_base_units': 3500,
        'dimensionality': '[length]'
    }
Beispiel #9
0
def test_quantity_less_than_equals(objects):
    object1 = objects.create_object(action_id=0, data={'q': datatypes.Quantity(1, 'meter')}, schema={}, user_id=0)
    objects.create_object(action_id=0, data={'q': datatypes.Quantity(1, 'kilometer')}, schema={}, user_id=0)
    assert [object1] == objects.get_current_objects(lambda data: where_filters.quantity_less_than_equals(data['q'], datatypes.Quantity(1, 'meter')))
Beispiel #10
0
def test_quantity_equals_epsilon(objects):
    object1 = objects.create_object(action_id=0, data={'q': datatypes.Quantity(10, 'mg')}, schema={}, user_id=0)
    objects.create_object(action_id=0, data={'q': datatypes.Quantity(9.99, 'mg')}, schema={}, user_id=0)
    assert [object1] == objects.get_current_objects(lambda data: where_filters.quantity_equals(data['q'], datatypes.Quantity(0.00001, 'kg')))
Beispiel #11
0
def test_quantity_between_excluding(objects):
    object1 = objects.create_object(action_id=0, data={'q': datatypes.Quantity(1, 'meter')}, schema={}, user_id=0)
    objects.create_object(action_id=0, data={'q': datatypes.Quantity(1, 'centimeter')}, schema={}, user_id=0)
    assert [] == objects.get_current_objects(lambda data: where_filters.quantity_between(data['q'], datatypes.Quantity(10, 'centimeters'), datatypes.Quantity(1, 'meter'), including=False))
    assert [object1] == objects.get_current_objects(lambda data: where_filters.quantity_between(data['q'], datatypes.Quantity(10, 'centimeters'), datatypes.Quantity(1.1, 'meter'), including=False))
Beispiel #12
0
def test_strict_serialization_filter_types():
    datatypes.JSONEncoder.STRICT = True
    # objects of serializable types will be ignored
    json.dumps({'length': datatypes.Quantity(10, 'meter')},
               cls=datatypes.JSONEncoder)
    datatypes.JSONEncoder.STRICT = False
Beispiel #13
0
def test_quantity_invalid_value():
    with pytest.raises(ValueError):
        datatypes.Quantity(1, 'invalid')
Beispiel #14
0
def test_quantity_equals():
    assert datatypes.Quantity(1, None) == datatypes.Quantity(1, None)
    assert datatypes.Quantity(1, None) != datatypes.Quantity(2, None)
    assert datatypes.Quantity(1, 'meter') == datatypes.Quantity(
        0.001, 'kilometers')
    assert datatypes.Quantity(1, 'meter') != datatypes.Quantity(1, 'second')
Beispiel #15
0
def test_quantity_serialization_string_invalid():
    with pytest.raises(ValueError):
        json.dumps(datatypes.Quantity("3.5m", None), cls=datatypes.JSONEncoder)