Skip to content

Commit

Permalink
pyln: failing test msat from float str
Browse files Browse the repository at this point in the history
We were not able to create pyln Millisatoshi from floats, e.g.:
 - "0.01btc"
 - "0.1sat"
 - ...

This adds a test that makes sure this won't happen again.
  • Loading branch information
m-schmoock authored and rustyrussell committed Dec 2, 2020
1 parent 83a2113 commit 7bfb5f1
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions contrib/pyln-client/tests/test_units.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from pyln.client import Millisatoshi
import pytest # type: ignore


def test_to_approx_str():
Expand Down Expand Up @@ -34,3 +35,29 @@ def test_to_approx_str():
assert amount.to_approx_str() == "12btc"
amount = Millisatoshi('1200000000sat')
assert amount.to_approx_str(1) == "12btc" # note: no rounding


def test_floats():
# test parsing amounts from floating number strings
amount = Millisatoshi("0.01btc")
assert amount.to_satoshi() == 10**6
amount = Millisatoshi("1.01btc")
assert amount.to_satoshi() == 10**8 + 10**6
amount = Millisatoshi("0.1sat")
assert int(amount) == 100
amount = Millisatoshi("0.01sat")
assert int(amount) == 10
amount = Millisatoshi("1.1sat")
assert int(amount) == 1100

# test floating point arithmetic
amount = Millisatoshi("1000msat") * 0.1
assert int(amount) == 100

# sub millisatoshi are not a concept yet
with pytest.raises(ValueError, match='Millisatoshi must be a whole number'):
amount = Millisatoshi("0.000000000001btc")
with pytest.raises(ValueError, match='Millisatoshi must be a whole number'):
amount = Millisatoshi("0.0001sat")
with pytest.raises(ValueError, match='Millisatoshi must be a whole number'):
amount = Millisatoshi("0.1msat")

0 comments on commit 7bfb5f1

Please sign in to comment.