32 lines
1 KiB
Python
32 lines
1 KiB
Python
import random
|
|
from splitbill import solve, perform_transfers
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.parametrize("tolerance", [0, 1, 2, 10, 100])
|
|
def test_random(tolerance):
|
|
balances = {str(k): random.randint(-200, 200) for k in range(7)}
|
|
balances["7"] = -sum(balances.values())
|
|
balances = {k: v for k, v in balances.items() if v != 0}
|
|
transactions = solve(balances, tolerance)
|
|
assert abs(sum(perform_transfers(balances, transactions).values())) <= tolerance
|
|
|
|
|
|
def test_bug1():
|
|
tolerance = 100
|
|
balances = {'0': -39, '1': 139, '2': -54, '3': 99, '4': 13, '5': 175, '6': -173, '7': -160}
|
|
transactions = solve(balances, tolerance=tolerance)
|
|
assert abs(sum(perform_transfers(balances, transactions).values())) <= tolerance
|
|
|
|
def test_2_subgroups():
|
|
balances = {
|
|
"A": 50,
|
|
"B": -20,
|
|
"C": -30,
|
|
"D": 70,
|
|
"E": -35,
|
|
"F": -35,
|
|
}
|
|
transactions = solve(balances)
|
|
assert abs(sum(perform_transfers(balances, transactions).values())) == 0
|
|
assert len(transactions) == 4
|