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"), ("10Ω", "10 Ω", "Ω"), ("10 Ω", "10 Ω", "Ω"), ("10 Ohm", "10 Ohm", "Ohm"), ]) 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})