gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 01/02: more real cases


From: gnunet
Subject: [taler-wallet-core] 01/02: more real cases
Date: Tue, 20 Jun 2023 22:51:17 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit 5c5586df99d16038a81c4c59151a83af227a2fc9
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Tue Jun 20 17:50:07 2023 -0300

    more real cases
---
 .../taler-wallet-core/src/operations/deposits.ts   |   7 +-
 .../src/util/coinSelection.test.ts                 | 138 +++++++++++++++++++++
 2 files changed, 144 insertions(+), 1 deletion(-)

diff --git a/packages/taler-wallet-core/src/operations/deposits.ts 
b/packages/taler-wallet-core/src/operations/deposits.ts
index 6781696cf..0bc3caec4 100644
--- a/packages/taler-wallet-core/src/operations/deposits.ts
+++ b/packages/taler-wallet-core/src/operations/deposits.ts
@@ -79,7 +79,12 @@ import {
 } from "../index.js";
 import { InternalWalletState } from "../internal-wallet-state.js";
 import { readSuccessResponseJsonOrThrow } from "@gnu-taler/taler-util/http";
-import { constructTaskIdentifier, OperationAttemptResult, spendCoins, 
TombstoneTag } from "./common.js";
+import {
+  constructTaskIdentifier,
+  OperationAttemptResult,
+  spendCoins,
+  TombstoneTag,
+} from "./common.js";
 import { getExchangeDetails } from "./exchanges.js";
 import {
   extractContractData,
diff --git a/packages/taler-wallet-core/src/util/coinSelection.test.ts 
b/packages/taler-wallet-core/src/util/coinSelection.test.ts
index 3073b69c7..fddd217ea 100644
--- a/packages/taler-wallet-core/src/util/coinSelection.test.ts
+++ b/packages/taler-wallet-core/src/util/coinSelection.test.ts
@@ -627,3 +627,141 @@ function asCoinList(v: { info: CoinInfo; size: number 
}[]): any {
     return [c.info.value, c.size];
   });
 }
+
+/**
+ * regression tests
+ */
+
+test("demo: withdraw raw 25", (t) => {
+  const coinList: Coin[] = [
+    [kudos`0.1`, 0],
+    [kudos`1`, 0],
+    [kudos`2`, 0],
+    [kudos`5`, 0],
+    [kudos`10`, 0],
+  ];
+  const result = convertWithdrawalAmountFromAvailableCoins(
+    {
+      list: coinList.map(([v, t]) => defaultFeeConfig(v, t)),
+      exchanges: {},
+    },
+    kudos`25`,
+    TransactionAmountMode.Raw,
+  );
+  t.is(Amounts.stringifyValue(result.effective), "24.8");
+  t.is(Amounts.stringifyValue(result.raw), "24.92");
+  // coins received
+  // 8 x  0.1
+  // 2 x  0.2
+  // 2 x 10.0
+  // total effective 24.8
+  // fee 12 x 0.01 = 0.12
+  // total raw 24.92
+  // left in reserve 25 - 24.92 == 0.08
+
+  //current wallet impl: hides the left in reserve fee
+  //shows fee = 0.2
+});
+
+test("demo: deposit max after withdraw raw 25", (t) => {
+  const coinList: Coin[] = [
+    [kudos`0.1`, 8],
+    [kudos`1`, 0],
+    [kudos`2`, 2],
+    [kudos`5`, 0],
+    [kudos`10`, 2],
+  ];
+  const result = getMaxDepositAmountForAvailableCoins(
+    {
+      list: coinList.map(([v, t]) => defaultFeeConfig(v, t)),
+      exchanges: {
+        one: {
+          wireFee: kudos`0.01`,
+          purseFee: kudos`0.00`,
+          creditDeadline: AbsoluteTime.never(),
+          debitDeadline: AbsoluteTime.never(),
+        },
+      },
+    },
+    "KUDOS",
+  );
+  t.is(Amounts.stringifyValue(result.effective), "24.8");
+  t.is(Amounts.stringifyValue(result.raw), "24.67");
+
+  // 8 x  0.1
+  // 2 x  0.2
+  // 2 x 10.0
+  // total effective 24.8
+  // deposit fee 12 x 0.01 = 0.12
+  // wire fee 0.01
+  // total raw: 24.8 - 0.13 = 24.67
+
+  // current wallet impl fee 0.14
+});
+
+test("demo: withdraw raw 13", (t) => {
+  const coinList: Coin[] = [
+    [kudos`0.1`, 0],
+    [kudos`1`, 0],
+    [kudos`2`, 0],
+    [kudos`5`, 0],
+    [kudos`10`, 0],
+  ];
+  const result = convertWithdrawalAmountFromAvailableCoins(
+    {
+      list: coinList.map(([v, t]) => defaultFeeConfig(v, t)),
+      exchanges: {},
+    },
+    kudos`13`,
+    TransactionAmountMode.Raw,
+  );
+  t.is(Amounts.stringifyValue(result.effective), "12.8");
+  t.is(Amounts.stringifyValue(result.raw), "12.9");
+  // coins received
+  // 8 x  0.1
+  // 1 x  0.2
+  // 1 x 10.0
+  // total effective 12.8
+  // fee 10 x 0.01 = 0.10
+  // total raw 12.9
+  // left in reserve 13 - 12.9 == 0.1
+
+  //current wallet impl: hides the left in reserve fee
+  //shows fee = 0.2
+});
+
+test("demo: deposit max after withdraw raw 13", (t) => {
+  const coinList: Coin[] = [
+    [kudos`0.1`, 8],
+    [kudos`1`, 0],
+    [kudos`2`, 1],
+    [kudos`5`, 0],
+    [kudos`10`, 1],
+  ];
+  const result = getMaxDepositAmountForAvailableCoins(
+    {
+      list: coinList.map(([v, t]) => defaultFeeConfig(v, t)),
+      exchanges: {
+        one: {
+          wireFee: kudos`0.01`,
+          purseFee: kudos`0.00`,
+          creditDeadline: AbsoluteTime.never(),
+          debitDeadline: AbsoluteTime.never(),
+        },
+      },
+    },
+    "KUDOS",
+  );
+  t.is(Amounts.stringifyValue(result.effective), "12.8");
+  t.is(Amounts.stringifyValue(result.raw), "12.69");
+
+  // 8 x  0.1
+  // 1 x  0.2
+  // 1 x 10.0
+  // total effective 12.8
+  // deposit fee 10 x 0.01 = 0.10
+  // wire fee 0.01
+  // total raw: 12.8 - 0.11 = 12.69
+
+  // current wallet impl fee 0.14
+});

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]