diff options
author | Ismaël Bouya <ismael.bouya@normalesup.org> | 2018-01-20 13:44:30 +0100 |
---|---|---|
committer | Ismaël Bouya <ismael.bouya@normalesup.org> | 2018-01-20 14:15:53 +0100 |
commit | 5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222 (patch) | |
tree | b44fffede07dfde6d832f533a877e156d4e0dc2d /test.py | |
parent | 089d5d9df3d9d93e3ce789be16ee6cdd99dc2b52 (diff) | |
download | Trader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.tar.gz Trader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.tar.zst Trader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.zip |
Change integer to decimals
Diffstat (limited to 'test.py')
-rw-r--r-- | test.py | 100 |
1 files changed, 45 insertions, 55 deletions
@@ -1,16 +1,14 @@ | |||
1 | import portfolio | 1 | import portfolio |
2 | import unittest | 2 | import unittest |
3 | from decimal import Decimal as D | ||
3 | from unittest import mock | 4 | from unittest import mock |
4 | 5 | ||
5 | class AmountTest(unittest.TestCase): | 6 | class AmountTest(unittest.TestCase): |
6 | def test_values(self): | 7 | def test_values(self): |
7 | amount = portfolio.Amount("BTC", 0.65) | 8 | amount = portfolio.Amount("BTC", "0.65") |
8 | self.assertEqual(0.65, amount.value) | 9 | self.assertEqual(D("0.65"), amount.value) |
9 | self.assertEqual("BTC", amount.currency) | 10 | self.assertEqual("BTC", amount.currency) |
10 | 11 | ||
11 | amount = portfolio.Amount("BTC", 10, int_val=2000000000000000) | ||
12 | self.assertEqual(0.002, amount.value) | ||
13 | |||
14 | def test_in_currency(self): | 12 | def test_in_currency(self): |
15 | amount = portfolio.Amount("ETC", 10) | 13 | amount = portfolio.Amount("ETC", 10) |
16 | 14 | ||
@@ -24,12 +22,12 @@ class AmountTest(unittest.TestCase): | |||
24 | 22 | ||
25 | with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock): | 23 | with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock): |
26 | ticker_mock.return_value = { | 24 | ticker_mock.return_value = { |
27 | "average": 0.3, | 25 | "average": D("0.3"), |
28 | "foo": "bar", | 26 | "foo": "bar", |
29 | } | 27 | } |
30 | converted_amount = amount.in_currency("ETH", None) | 28 | converted_amount = amount.in_currency("ETH", None) |
31 | 29 | ||
32 | self.assertEqual(3.0, converted_amount.value) | 30 | self.assertEqual(D("3.0"), converted_amount.value) |
33 | self.assertEqual("ETH", converted_amount.currency) | 31 | self.assertEqual("ETH", converted_amount.currency) |
34 | self.assertEqual(amount, converted_amount.linked_to) | 32 | self.assertEqual(amount, converted_amount.linked_to) |
35 | self.assertEqual("bar", converted_amount.ticker["foo"]) | 33 | self.assertEqual("bar", converted_amount.ticker["foo"]) |
@@ -44,13 +42,13 @@ class AmountTest(unittest.TestCase): | |||
44 | self.assertEqual("SC", abs(amount).currency) | 42 | self.assertEqual("SC", abs(amount).currency) |
45 | 43 | ||
46 | def test__add(self): | 44 | def test__add(self): |
47 | amount1 = portfolio.Amount("XVG", 12.9) | 45 | amount1 = portfolio.Amount("XVG", "12.9") |
48 | amount2 = portfolio.Amount("XVG", 13.1) | 46 | amount2 = portfolio.Amount("XVG", "13.1") |
49 | 47 | ||
50 | self.assertEqual(26, (amount1 + amount2).value) | 48 | self.assertEqual(26, (amount1 + amount2).value) |
51 | self.assertEqual("XVG", (amount1 + amount2).currency) | 49 | self.assertEqual("XVG", (amount1 + amount2).currency) |
52 | 50 | ||
53 | amount3 = portfolio.Amount("ETH", 1.6) | 51 | amount3 = portfolio.Amount("ETH", "1.6") |
54 | with self.assertRaises(Exception): | 52 | with self.assertRaises(Exception): |
55 | amount1 + amount3 | 53 | amount1 + amount3 |
56 | 54 | ||
@@ -58,35 +56,31 @@ class AmountTest(unittest.TestCase): | |||
58 | self.assertEqual(amount1, amount1 + amount4) | 56 | self.assertEqual(amount1, amount1 + amount4) |
59 | 57 | ||
60 | def test__radd(self): | 58 | def test__radd(self): |
61 | amount = portfolio.Amount("XVG", 12.9) | 59 | amount = portfolio.Amount("XVG", "12.9") |
62 | 60 | ||
63 | self.assertEqual(amount, 0 + amount) | 61 | self.assertEqual(amount, 0 + amount) |
64 | with self.assertRaises(Exception): | 62 | with self.assertRaises(Exception): |
65 | 4 + amount | 63 | 4 + amount |
66 | 64 | ||
67 | def test__sub(self): | 65 | def test__sub(self): |
68 | amount1 = portfolio.Amount("XVG", 13.3) | 66 | amount1 = portfolio.Amount("XVG", "13.3") |
69 | amount2 = portfolio.Amount("XVG", 13.1) | 67 | amount2 = portfolio.Amount("XVG", "13.1") |
70 | 68 | ||
71 | self.assertEqual(0.2, (amount1 - amount2).value) | 69 | self.assertEqual(D("0.2"), (amount1 - amount2).value) |
72 | self.assertEqual("XVG", (amount1 - amount2).currency) | 70 | self.assertEqual("XVG", (amount1 - amount2).currency) |
73 | 71 | ||
74 | amount3 = portfolio.Amount("ETH", 1.6) | 72 | amount3 = portfolio.Amount("ETH", "1.6") |
75 | with self.assertRaises(Exception): | 73 | with self.assertRaises(Exception): |
76 | amount1 - amount3 | 74 | amount1 - amount3 |
77 | 75 | ||
78 | amount4 = portfolio.Amount("ETH", 0.0) | 76 | amount4 = portfolio.Amount("ETH", 0.0) |
79 | self.assertEqual(amount1, amount1 - amount4) | 77 | self.assertEqual(amount1, amount1 - amount4) |
80 | 78 | ||
81 | def test__int(self): | ||
82 | amount = portfolio.Amount("XMR", 0.1) | ||
83 | self.assertEqual(100000000000000000, int(amount)) | ||
84 | |||
85 | def test__mul(self): | 79 | def test__mul(self): |
86 | amount = portfolio.Amount("XEM", 11) | 80 | amount = portfolio.Amount("XEM", 11) |
87 | 81 | ||
88 | self.assertEqual(38.5, (amount * 3.5).value) | 82 | self.assertEqual(D("38.5"), (amount * D("3.5")).value) |
89 | self.assertEqual(33, (amount * 3).value) | 83 | self.assertEqual(D("33"), (amount * 3).value) |
90 | 84 | ||
91 | with self.assertRaises(Exception): | 85 | with self.assertRaises(Exception): |
92 | amount * amount | 86 | amount * amount |
@@ -94,24 +88,20 @@ class AmountTest(unittest.TestCase): | |||
94 | def test__rmul(self): | 88 | def test__rmul(self): |
95 | amount = portfolio.Amount("XEM", 11) | 89 | amount = portfolio.Amount("XEM", 11) |
96 | 90 | ||
97 | self.assertEqual(38.5, (3.5 * amount).value) | 91 | self.assertEqual(D("38.5"), (D("3.5") * amount).value) |
98 | self.assertEqual(33, (3 * amount).value) | 92 | self.assertEqual(D("33"), (3 * amount).value) |
99 | 93 | ||
100 | def test__floordiv(self): | 94 | def test__floordiv(self): |
101 | amount = portfolio.Amount("XEM", 11) | 95 | amount = portfolio.Amount("XEM", 11) |
102 | 96 | ||
103 | self.assertEqual(5.5, (amount // 2).value) | 97 | self.assertEqual(D("5.5"), (amount / 2).value) |
104 | with self.assertRaises(TypeError): | 98 | self.assertEqual(D("4.4"), (amount / D("2.5")).value) |
105 | amount // 2.5 | ||
106 | self.assertEqual(1571428571428571428, (amount // 7)._value) | ||
107 | 99 | ||
108 | def test__div(self): | 100 | def test__div(self): |
109 | amount = portfolio.Amount("XEM", 11) | 101 | amount = portfolio.Amount("XEM", 11) |
110 | 102 | ||
111 | with self.assertRaises(TypeError): | 103 | self.assertEqual(D("5.5"), (amount / 2).value) |
112 | amount / 2.5 | 104 | self.assertEqual(D("4.4"), (amount / D("2.5")).value) |
113 | self.assertEqual(5.5, (amount / 2).value) | ||
114 | self.assertEqual(1571428571428571428, (amount / 7)._value) | ||
115 | 105 | ||
116 | def test__lt(self): | 106 | def test__lt(self): |
117 | amount1 = portfolio.Amount("BTD", 11.3) | 107 | amount1 = portfolio.Amount("BTD", 11.3) |
@@ -290,32 +280,32 @@ class BalanceTest(unittest.TestCase): | |||
290 | @mock.patch.object(portfolio.Trade, "get_ticker") | 280 | @mock.patch.object(portfolio.Trade, "get_ticker") |
291 | def test_in_currency(self, get_ticker): | 281 | def test_in_currency(self, get_ticker): |
292 | portfolio.Balance.known_balances = { | 282 | portfolio.Balance.known_balances = { |
293 | "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30), | 283 | "BTC": portfolio.Balance("BTC", "0.65", "0.35", "0.30"), |
294 | "ETH": portfolio.Balance("ETH", 3, 3, 0), | 284 | "ETH": portfolio.Balance("ETH", 3, 3, 0), |
295 | } | 285 | } |
296 | market = mock.Mock() | 286 | market = mock.Mock() |
297 | get_ticker.return_value = { | 287 | get_ticker.return_value = { |
298 | "bid": 0.09, | 288 | "bid": D("0.09"), |
299 | "ask": 0.11, | 289 | "ask": D("0.11"), |
300 | "average": 0.1, | 290 | "average": D("0.1"), |
301 | } | 291 | } |
302 | 292 | ||
303 | amounts = portfolio.Balance.in_currency("BTC", market) | 293 | amounts = portfolio.Balance.in_currency("BTC", market) |
304 | self.assertEqual("BTC", amounts["ETH"].currency) | 294 | self.assertEqual("BTC", amounts["ETH"].currency) |
305 | self.assertEqual(0.65, amounts["BTC"].value) | 295 | self.assertEqual(D("0.65"), amounts["BTC"].value) |
306 | self.assertEqual(0.30, amounts["ETH"].value) | 296 | self.assertEqual(D("0.30"), amounts["ETH"].value) |
307 | 297 | ||
308 | amounts = portfolio.Balance.in_currency("BTC", market, action="bid") | 298 | amounts = portfolio.Balance.in_currency("BTC", market, action="bid") |
309 | self.assertEqual(0.65, amounts["BTC"].value) | 299 | self.assertEqual(D("0.65"), amounts["BTC"].value) |
310 | self.assertEqual(0.27, amounts["ETH"].value) | 300 | self.assertEqual(D("0.27"), amounts["ETH"].value) |
311 | 301 | ||
312 | amounts = portfolio.Balance.in_currency("BTC", market, action="bid", type="used") | 302 | amounts = portfolio.Balance.in_currency("BTC", market, action="bid", type="used") |
313 | self.assertEqual(0.30, amounts["BTC"].value) | 303 | self.assertEqual(D("0.30"), amounts["BTC"].value) |
314 | self.assertEqual(0, amounts["ETH"].value) | 304 | self.assertEqual(0, amounts["ETH"].value) |
315 | 305 | ||
316 | def test_currencies(self): | 306 | def test_currencies(self): |
317 | portfolio.Balance.known_balances = { | 307 | portfolio.Balance.known_balances = { |
318 | "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30), | 308 | "BTC": portfolio.Balance("BTC", "0.65", "0.35", "0.30"), |
319 | "ETH": portfolio.Balance("ETH", 3, 3, 0), | 309 | "ETH": portfolio.Balance("ETH", 3, 3, 0), |
320 | } | 310 | } |
321 | self.assertListEqual(["BTC", "ETH"], list(portfolio.Balance.currencies())) | 311 | self.assertListEqual(["BTC", "ETH"], list(portfolio.Balance.currencies())) |
@@ -341,10 +331,10 @@ class BalanceTest(unittest.TestCase): | |||
341 | "BTC": 2600, | 331 | "BTC": 2600, |
342 | } | 332 | } |
343 | 333 | ||
344 | amounts = portfolio.Balance.dispatch_assets(portfolio.Amount("BTC", 10.1)) | 334 | amounts = portfolio.Balance.dispatch_assets(portfolio.Amount("BTC", "10.1")) |
345 | self.assertIn("XEM", portfolio.Balance.currencies()) | 335 | self.assertIn("XEM", portfolio.Balance.currencies()) |
346 | self.assertEqual(2.6, amounts["BTC"].value) | 336 | self.assertEqual(D("2.6"), amounts["BTC"].value) |
347 | self.assertEqual(7.5, amounts["XEM"].value) | 337 | self.assertEqual(D("7.5"), amounts["XEM"].value) |
348 | 338 | ||
349 | @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand") | 339 | @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand") |
350 | @mock.patch.object(portfolio.Trade, "get_ticker") | 340 | @mock.patch.object(portfolio.Trade, "get_ticker") |
@@ -355,20 +345,20 @@ class BalanceTest(unittest.TestCase): | |||
355 | "BTC": 2500, | 345 | "BTC": 2500, |
356 | } | 346 | } |
357 | get_ticker.side_effect = [ | 347 | get_ticker.side_effect = [ |
358 | { "average": 0.0001 }, | 348 | { "average": D("0.0001") }, |
359 | { "average": 0.000001 } | 349 | { "average": D("0.000001") } |
360 | ] | 350 | ] |
361 | market = mock.Mock() | 351 | market = mock.Mock() |
362 | market.fetch_balance.return_value = { | 352 | market.fetch_balance.return_value = { |
363 | "USDT": { | 353 | "USDT": { |
364 | "free": 10000.0, | 354 | "free": D("10000.0"), |
365 | "used": 0.0, | 355 | "used": D("0.0"), |
366 | "total": 10000.0 | 356 | "total": D("10000.0") |
367 | }, | 357 | }, |
368 | "XVG": { | 358 | "XVG": { |
369 | "free": 10000.0, | 359 | "free": D("10000.0"), |
370 | "used": 0.0, | 360 | "used": D("0.0"), |
371 | "total": 10000.0 | 361 | "total": D("10000.0") |
372 | }, | 362 | }, |
373 | } | 363 | } |
374 | portfolio.Balance.prepare_trades(market) | 364 | portfolio.Balance.prepare_trades(market) |
@@ -377,9 +367,9 @@ class BalanceTest(unittest.TestCase): | |||
377 | call = compute_trades.call_args | 367 | call = compute_trades.call_args |
378 | self.assertEqual(market, call[1]["market"]) | 368 | self.assertEqual(market, call[1]["market"]) |
379 | self.assertEqual(1, call[0][0]["USDT"].value) | 369 | self.assertEqual(1, call[0][0]["USDT"].value) |
380 | self.assertEqual(0.01, call[0][0]["XVG"].value) | 370 | self.assertEqual(D("0.01"), call[0][0]["XVG"].value) |
381 | self.assertEqual(0.2525, call[0][1]["BTC"].value) | 371 | self.assertEqual(D("0.2525"), call[0][1]["BTC"].value) |
382 | self.assertEqual(0.7575, call[0][1]["XEM"].value) | 372 | self.assertEqual(D("0.7575"), call[0][1]["XEM"].value) |
383 | 373 | ||
384 | def test__repr(self): | 374 | def test__repr(self): |
385 | balance = portfolio.Balance("BTX", 3, 1, 2) | 375 | balance = portfolio.Balance("BTX", 3, 1, 2) |