diff options
author | uvok | 2025-04-15 17:49:08 +0200 |
---|---|---|
committer | uvok | 2025-04-15 17:49:08 +0200 |
commit | e9ee4a15e7824ecf774bf126c75d0465a237cf27 (patch) | |
tree | d5526dd548901339fc40b01aad45f2e8f61fab83 | |
parent | d86d0ecaddc27b85053758fab55c3f72562dfd2a (diff) |
Mark queue as "internal"
-rw-r--r-- | test_trade_queue.py | 18 | ||||
-rw-r--r-- | trade_queue.py | 13 |
2 files changed, 17 insertions, 14 deletions
diff --git a/test_trade_queue.py b/test_trade_queue.py index 2fa3ee3..1bfa1ef 100644 --- a/test_trade_queue.py +++ b/test_trade_queue.py @@ -17,9 +17,9 @@ class TestFIFOQueue(unittest.TestCase): """ Test adding trades to the queue. """ - self.assertEqual(len(self.queue.queue), 3) # There should be 3 trades in the queue - self.assertEqual(self.queue.queue[0].amount, 10.0) # Check the first trade's amount - self.assertEqual(self.queue.queue[1].date, "2025-04-15") # Check the second trade's date + self.assertEqual(len(self.queue._queue), 3) # There should be 3 trades in the queue + self.assertEqual(self.queue._queue[0].amount, 10.0) # Check the first trade's amount + self.assertEqual(self.queue._queue[1].date, "2025-04-15") # Check the second trade's date def test_remove_exact_amount(self): """ @@ -28,7 +28,7 @@ class TestFIFOQueue(unittest.TestCase): trades = self.queue.remove_coins(10.0) self.assertEqual(len(trades), 1) # One trade should be returned self.assertEqual(trades[0].amount, 10.0) # Amount should match the request - self.assertEqual(len(self.queue.queue), 2) # Two trades should remain in the queue + self.assertEqual(len(self.queue._queue), 2) # Two trades should remain in the queue def test_remove_partial_trade(self): """ @@ -37,7 +37,7 @@ class TestFIFOQueue(unittest.TestCase): trades = self.queue.remove_coins(5.0) self.assertEqual(len(trades), 1) # One partial trade should be returned self.assertEqual(trades[0].amount, 5.0) # Amount should match the request - self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade amount should update + self.assertEqual(self.queue._queue[0].amount, 5.0) # Remaining trade amount should update def test_remove_multiple_trades(self): """ @@ -47,7 +47,7 @@ class TestFIFOQueue(unittest.TestCase): self.assertEqual(len(trades), 2) # Two trades should be returned self.assertEqual(trades[0].amount, 10.0) # The first trade should be fully consumed self.assertEqual(trades[1].amount, 15.0) # The second trade should be partially consumed - self.assertEqual(self.queue.queue[0].amount, 5.0) # Remaining trade in queue should update + self.assertEqual(self.queue._queue[0].amount, 5.0) # Remaining trade in queue should update def test_remove_insufficient_amount(self): """ @@ -108,9 +108,9 @@ class TestFIFOQueue(unittest.TestCase): self.assertEqual(trades[0].amount, 4.0) # Check the removed amount self.assertEqual(trades[0].total_cost, 40.0) # Total cost should be proportional: (100 * 5 / 10) - self.assertEqual(self.queue.queue[0].price_per_coin, 10) # Original total cost remains unchanged - self.assertEqual(self.queue.queue[0].amount, 6.0) # Remaining amount in the first trade should be updated - self.assertEqual(self.queue.queue[0].total_cost, 60.0) # Original total cost remains unchanged + self.assertEqual(self.queue._queue[0].price_per_coin, 10) # Original total cost remains unchanged + self.assertEqual(self.queue._queue[0].amount, 6.0) # Remaining amount in the first trade should be updated + self.assertEqual(self.queue._queue[0].total_cost, 60.0) # Original total cost remains unchanged if __name__ == "__main__": unittest.main() diff --git a/trade_queue.py b/trade_queue.py index 9cae560..c7e5537 100644 --- a/trade_queue.py +++ b/trade_queue.py @@ -15,17 +15,20 @@ class FIFOQueue: Will track trades. """ def __init__(self) -> None: - self.queue: Deque[Trade] = deque() + self._queue: Deque[Trade] = deque() self._cached_total: Decimal = Decimal(0) self._cache_valid: bool = True logger.info("FIFOQueue initialized with empty queue.") + + def __len__(self) -> int: + return len(self._queue) def add(self, amount: float | Decimal, total_cost: float | Decimal, date: str) -> None: """ Add a trade to the queue. """ trade = Trade(amount, total_cost, date) - self.queue.append(trade) + self._queue.append(trade) self._cache_valid = False logger.info(f"Added trade: {trade}.") @@ -52,7 +55,7 @@ class FIFOQueue: entries: List[Trade] = [] while remaining > 0: - trade = self.queue[0] + trade = self._queue[0] logger.debug(f"Processing trade: {trade}") if trade.amount > remaining: @@ -64,7 +67,7 @@ class FIFOQueue: else: remaining -= trade.amount entries.append(trade) - self.queue.popleft() + self._queue.popleft() logger.info(f"Removed full trade: {trade}. Remaining coins to remove: {remaining}") return entries @@ -75,7 +78,7 @@ class FIFOQueue: """ if not self._cache_valid: logger.debug("Cache invalid, recalculating remaining amount.") - self._cached_total = sum((trade.amount for trade in self.queue), Decimal(0)) + self._cached_total = sum((trade.amount for trade in self._queue), Decimal(0)) self._cache_valid = True logger.info(f"Cache recalculated: {self._cached_total:.2f}") |