import pytest from ee import EeVal @pytest.mark.parametrize("s, num_value, str_value, unit", [ # ("0", 0, "0", None), # ("0 k", 0, "0", None), # ("1", 1, "1", None), # ("1e-3", 0.001, "1 m", None), # ("1e3", 1000, "1 k", None), # ("4.7e3", 4700, "4.7 k", None), ("4.e3", 4000, "4 k", None), # ("10", 10, "10", None), # ("10k", 10 * 1000, "10 k", None), # ("10 k", 10 * 1000, "10 k", None), # ("10 k", 10 * 1000, "10 k", None), # ("1000 m", 1, "1", None), # ("100 m", 0.1, "100 m", None), # ("100 n", 0.0000001, "100 n", None), # ("1 m", 0.001, "1 m", None), # ("1 u", 0.000001, "1 u", None), # ("0.1 u", 0.0000001, "100 n", None), # (".1 u", 0.0000001, "100 n", None), # ("4.7 u", 0.0000047, "4.7 u", None), # ("1 ยต", 0.000001, "1 u", None), # ("1 n", 0.000000001, "1 n", None), # ("10 n", 0.00000001, "10 n", None), # ("1p", 1e-12, "1 p", None), # ("0.8p", 8e-13, "0.8 p", None), # ("0.008p", 8e-15, "0.008 p", None), ]) def test_basic(s, num_value, str_value, unit): num_value = float(num_value) v = EeVal(s) assert v.value == float(v) epsilon = num_value * 0.01 assert (num_value + epsilon) >= float(v) >= (num_value - epsilon) assert str(v) == str_value assert v.unit == unit @pytest.mark.parametrize("s, str_value, unit", [ ("10nF", "10 nF", "F"), ("10 nF", "10 nF", "F"), ("10n F", "10 nF", "F"), ("10 n F", "10 nF", "F"), ("4.7 n F", "4.7 nF", "F"), ]) def test_units(s, str_value, unit): v = EeVal(s) assert unit == v.unit assert float(v) == v.value assert str_value == str(v) def test_ordering(): p100 = EeVal('100 p') n100 = EeVal('100 n') n100f = EeVal('100 n F') u1 = EeVal('1u') assert n100 > p100 assert p100 < n100 assert n100f < u1 assert [p100, n100, u1] == sorted([p100, u1, n100]) def test_hash(): p100 = EeVal('100 p') n100 = EeVal('100 n') u1 = EeVal('1u') assert 3 == len({p100, p100, n100, u1})