From ce334320363618c6c1ed3d2ae598d49cae98753c Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 14 Nov 2016 03:37:47 +0100 Subject: add test cases for coin selection --- src/wallet-test.ts | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 src/wallet-test.ts (limited to 'src/wallet-test.ts') diff --git a/src/wallet-test.ts b/src/wallet-test.ts new file mode 100644 index 000000000..144b2054c --- /dev/null +++ b/src/wallet-test.ts @@ -0,0 +1,193 @@ +import {test, TestLib} from "testlib/talertest"; +import {mkAmount} from "./types"; +import * as wallet from "./wallet"; + + +test("coin selection 1", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,5,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + +test("coin selection 2", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + // Merchant covers the fee, this one shouldn't be used + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,5,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + +test("coin selection 2", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,2,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 2); + t.pass(); +}); + + + +test("coin selection 3", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(2,0,"EUR"), mkAmount(0,2,"EUR")); + if (!res) { + t.fail(); + return; + } + t.assert(res.length == 3); + t.pass(); +}); + + +test("coin selection 3", (t: TestLib) => { + let cds: any = []; + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 0, "EUR"), + }, + }); + cds.push({ + coin: { + currentAmount: mkAmount(1, 0, "EUR"), + }, + denom: { + value: mkAmount(1, 0, "EUR"), + fee_deposit: mkAmount(0, 5, "EUR"), + }, + }); + + let res = wallet.selectCoins(cds, mkAmount(4,0,"EUR"), mkAmount(0,2,"EUR")); + t.assert(!res); + t.pass(); + +}); -- cgit v1.2.3