aboutsummaryrefslogtreecommitdiff
path: root/test.py
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-01-20 13:44:30 +0100
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-01-20 14:15:53 +0100
commit5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222 (patch)
treeb44fffede07dfde6d832f533a877e156d4e0dc2d /test.py
parent089d5d9df3d9d93e3ce789be16ee6cdd99dc2b52 (diff)
downloadTrader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.tar.gz
Trader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.tar.zst
Trader-5ab23e1c86de4caf0a34b9b91e5b9eddb0efa222.zip
Change integer to decimals
Diffstat (limited to 'test.py')
-rw-r--r--test.py100
1 files changed, 45 insertions, 55 deletions
diff --git a/test.py b/test.py
index 7608061..fde3a06 100644
--- a/test.py
+++ b/test.py
@@ -1,16 +1,14 @@
1import portfolio 1import portfolio
2import unittest 2import unittest
3from decimal import Decimal as D
3from unittest import mock 4from unittest import mock
4 5
5class AmountTest(unittest.TestCase): 6class 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)