コード例 #1
0
def test_affine_conversion():
    conversion = UnitConversion('F', 'C', 1.8, 32)
    assert str(conversion) == 'F ← 1.8*C + 32'

    result = conversion.convert(0, 'C', 'F')
    assert str(result) == '32 F'

    result = conversion.convert(32, to_units='C')
    assert str(result) == '0 C'

    result = conversion.convert(32, from_units='F')
    assert str(result) == '0 C'

    with pytest.raises(KeyError) as exception:
        result = conversion.convert(0, from_units='X', to_units='X')
    assert str(exception.value) == "unable to convert to 'X'."
    assert isinstance(exception.value, UnknownConversion)
    assert isinstance(exception.value, QuantiPhyError)
    assert isinstance(exception.value, KeyError)
    assert exception.value.args == ('X',)

    result = conversion.convert(0, to_units='X')
    assert str(result) == '32 F'

    with pytest.raises(KeyError) as exception:
        result = conversion.convert(0, from_units='X')
    assert str(exception.value) == "unable to convert from 'X'."
    assert isinstance(exception.value, UnknownConversion)
    assert isinstance(exception.value, QuantiPhyError)
    assert isinstance(exception.value, KeyError)
    assert exception.value.args == ('X',)
コード例 #2
0
def test_func_converters():
    Quantity.reset_prefs()

    def from_dB(value):
        return 10**(value/20)

    def to_dB(value):
        return 20*math.log10(value)

    vconverter = UnitConversion('V', 'dBV', from_dB, to_dB)
    assert str(vconverter) == 'V ← from_dB(dBV), dBV ← to_dB(V)'
    assert str(vconverter.convert(Quantity('100mV'))) == '-20 dBV'
    assert str(vconverter.convert(Quantity('-20dBV'))) == '100 mV'

    aconverter = UnitConversion('A', 'dBA', from_dB, to_dB)
    assert str(aconverter) == 'A ← from_dB(dBA), dBA ← to_dB(A)'
    assert str(aconverter.convert(Quantity('100mA'))) == '-20 dBA'
    assert str(aconverter.convert(Quantity('-20dBA'))) == '100 mA'

    assert '{:pdBV}'.format(Quantity('100mV')) == '-20 dBV'
    assert '{:pdBV}'.format(Quantity('10V')) == '20 dBV'
    assert '{:pV}'.format(Quantity('-20 dBV')) == '0.1 V'
    assert '{:pV}'.format(Quantity('20 dBV')) == '10 V'

    assert '{:pdBA}'.format(Quantity('100mA')) == '-20 dBA'
    assert '{:pdBA}'.format(Quantity('10A')) == '20 dBA'
    assert '{:pA}'.format(Quantity('-20 dBA')) == '0.1 A'
    assert '{:pA}'.format(Quantity('20 dBA')) == '10 A'
コード例 #3
0
 def converter(cls, to, data):
     try:
         # SYMBOL is not unique
         #return UnitConversion(to, (cls.SYMBOL, cls.UNITS), data[cls.UNITS][to[-1]])
         return UnitConversion(to, cls.UNITS, data[cls.UNITS][to[-1]])
     except KeyError as e:
         comment(f'missing price in {e}.', culprit=cls.UNITS)
コード例 #4
0
 def converter(cls, to, data):
     # cannot convert this to '$' directly using cryptocompare.
     # instead, use EOS as intermediary
     conversion = data[cls.UNITS]['EOS'] * data['EOS'][to[-1]]
     units = getattr(cls, 'UNITS', None)
     symbol = getattr(cls, 'SYMBOL', None)
     return UnitConversion(to, cull([symbol, units]), conversion)
コード例 #5
0
ファイル: test_misc.py プロジェクト: KenKundert/quantiphy
def test_scale():
    Quantity.reset_prefs()
    Quantity.set_prefs(spacer=None,
                       show_label=None,
                       label_fmt=None,
                       label_fmt_full=None)
    q1 = Quantity('3ns')
    q2 = Quantity('2')
    v2 = 2
    assert str(q1.scale(q2)) == '6 ns'
    assert repr(q1.scale(q2)) == "Quantity('6 ns')"
    assert str(q1.scale(v2)) == '6 ns'
    assert repr(q1.scale(v2)) == "Quantity('6 ns')"

    q1.name = 'period'
    q3 = q1.scale(q2).name == 'period'
    q1.desc = 'duration of one cycle'
    assert q1.scale(q2).name == 'period'
    assert q1.scale(q2).desc == 'duration of one cycle'

    class Dollars(Quantity):
        units = '$'
        prec = 2
        form = 'fixed'
        show_commas = True
        minus = Quantity.minus_sign
        strip_zeros = False

    class Cents(Dollars):
        units = '¢'
        prec = 0

    print(UnitConversion(Dollars, Cents, 0.01))

    total = Dollars(1)
    assert str(total) == '$1.00'
    total = total.scale(1000000)
    assert str(total) == '$1,000,000.00'

    class WholeDollars(Dollars):
        prec = 0

    total = WholeDollars(20)
    assert str(total) == '$20'
    total = total.scale(1000000)
    assert str(total) == '$20,000,000'
    total = total.scale(5, Dollars)
    assert str(total) == '$100,000,000.00'

    total = total.scale(Cents)
    assert str(total) == '10,000,000,000 ¢'
    assert type(total) == Cents
コード例 #6
0
def test_subclass_conversion():
    Quantity.reset_prefs()

    class Bitcoin(Quantity):
        units = 'BTC'
        form = 'fixed'
        prec = 2
        show_commas = True

    class Satoshi(Quantity):
        units = 'sat'
        form = 'fixed'
        prec = 3
        show_commas = True

    conversion = UnitConversion(Bitcoin, Satoshi, 1e-8)
    assert str(conversion) == 'BTC ← 1e-08*sat'

    result = conversion.convert(1, 'BTC', 'sat')
    assert str(result) == '100 Msat'

    result = conversion.convert(1, 'sat', 'BTC')
    assert str(result) == '10 nBTC'
コード例 #7
0
def test_linear_conversion():
    Quantity.reset_prefs()
    conversion = UnitConversion('USD', 'BTC', 100000)
    assert str(conversion) == 'USD ← 100000*BTC'

    result = conversion.convert(1, 'BTC', 'USD')
    assert str(result) == '100 kUSD'

    result = conversion.convert(1, 'USD', 'BTC')
    assert str(result) == '10 uBTC'

    result = conversion.convert(from_units='BTC', to_units='USD')
    assert str(result) == '100 kUSD'

    result = conversion.convert(from_units='USD', to_units='BTC')
    assert str(result) == '10 uBTC'

    result = conversion.convert('BTC')
    assert str(result) == '100 kUSD'

    result = conversion.convert('USD')
    assert str(result) == '10 uBTC'

    result = conversion.convert(10)
    assert str(result) == '1 MUSD'

    dollar = Quantity('200000 USD')
    bitcoin = conversion.convert(dollar)
    assert str(bitcoin) == '2 BTC'

    dollar = conversion.convert(bitcoin)
    assert str(dollar) == '200 kUSD'
コード例 #8
0
def test_coversion():
    conversion = UnitConversion('USD', 'BTC', 100000)
    assert str(conversion) == 'USD = 100000*BTC'

    result = conversion.convert(1, 'BTC', 'USD')
    assert str(result) == '100 kUSD'

    result = conversion.convert(1, 'USD', 'BTC')
    assert str(result) == '10 uBTC'

    result = conversion.convert(from_units='BTC', to_units='USD')
    assert str(result) == '100 kUSD'

    result = conversion.convert(from_units='USD', to_units='BTC')
    assert str(result) == '10 uBTC'

    result = conversion.convert('BTC')
    assert str(result) == '100 kUSD'

    result = conversion.convert('USD')
    assert str(result) == '10 uBTC'

    result = conversion.convert(10)
    assert str(result) == '1 MUSD'

    dollar = Quantity('200000 USD')
    bitcoin = conversion.convert(dollar)
    assert str(bitcoin) == '2 BTC'

    dollar = conversion.convert(bitcoin)
    assert str(dollar) == '200 kUSD'

    conversion = UnitConversion('F', 'C', 1.8, 32)
    assert str(conversion) == 'F = 1.8*C + 32'

    result = conversion.convert(0, 'C', 'F')
    assert str(result) == '32 F'

    result = conversion.convert(32, to_units='C')
    assert str(result) == '0 C'

    result = conversion.convert(32, from_units='F')
    assert str(result) == '0 C'

    with pytest.raises(KeyError) as exception:
        result = conversion.convert(0, from_units='X', to_units='X')
    assert str(exception.value) == "unable to convert to 'X'."
    assert isinstance(exception.value, UnknownConversion)
    assert isinstance(exception.value, QuantiPhyError)
    assert isinstance(exception.value, KeyError)
    assert exception.value.args == ('X',)

    result = conversion.convert(0, to_units='X')
    assert str(result) == '32 F'

    with pytest.raises(KeyError) as exception:
        result = conversion.convert(0, from_units='X')
    assert str(exception.value) == "unable to convert from 'X'."
    assert isinstance(exception.value, UnknownConversion)
    assert isinstance(exception.value, QuantiPhyError)
    assert isinstance(exception.value, KeyError)
    assert exception.value.args == ('X',)