mirror of
https://github.com/XRPLF/rippled.git
synced 2026-07-25 16:10:57 +00:00
Add unit tests
This commit is contained in:
@@ -106,8 +106,7 @@ template <class T>
|
||||
concept Integral64 = std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>;
|
||||
|
||||
template <class STAmount, class Asset>
|
||||
concept CanUseAsScale = requires(Asset a, Number n) { STAmount(a, n); } &&
|
||||
requires(STAmount s) { s.exponent(); };
|
||||
concept CanUseAsScale = requires(Asset a, Number n) { STAmount(a, n); } && requires(STAmount s) { s.exponent(); };
|
||||
|
||||
/** Number is a floating point type that can represent a wide range of values.
|
||||
*
|
||||
|
||||
@@ -3728,8 +3728,7 @@ class Invariants_test : public beast::unit_test::suite
|
||||
|
||||
NumberMantissaScaleGuard g{MantissaRange::large};
|
||||
|
||||
auto makeDelta =
|
||||
[&vaultAsset](Number const& n) -> ValidVault::DeltaInfo {
|
||||
auto makeDelta = [&vaultAsset](Number const& n) -> ValidVault::DeltaInfo {
|
||||
return {n, n.scale<STAmount>(vaultAsset.raw())};
|
||||
};
|
||||
|
||||
@@ -3742,24 +3741,17 @@ class Invariants_test : public beast::unit_test::suite
|
||||
{
|
||||
.name = "Mixed integer and Number values",
|
||||
.expectedMinScale = -15,
|
||||
.values =
|
||||
{makeDelta(1), makeDelta(-1), makeDelta(Number{10, -1})},
|
||||
.values = {makeDelta(1), makeDelta(-1), makeDelta(Number{10, -1})},
|
||||
},
|
||||
{
|
||||
.name = "Mixed scales",
|
||||
.expectedMinScale = -17,
|
||||
.values =
|
||||
{makeDelta(Number{1, -2}),
|
||||
makeDelta(Number{5, -3}),
|
||||
makeDelta(Number{3, -2})},
|
||||
.values = {makeDelta(Number{1, -2}), makeDelta(Number{5, -3}), makeDelta(Number{3, -2})},
|
||||
},
|
||||
{
|
||||
.name = "Equal scales",
|
||||
.expectedMinScale = -16,
|
||||
.values =
|
||||
{makeDelta(Number{1, -1}),
|
||||
makeDelta(Number{5, -1}),
|
||||
makeDelta(Number{1, -1})},
|
||||
.values = {makeDelta(Number{1, -1}), makeDelta(Number{5, -1}), makeDelta(Number{1, -1})},
|
||||
},
|
||||
{
|
||||
.name = "Mixed mantissa sizes",
|
||||
@@ -3776,24 +3768,20 @@ class Invariants_test : public beast::unit_test::suite
|
||||
{
|
||||
testcase("vault computeMinScale: " + tc.name);
|
||||
|
||||
auto const actualScale =
|
||||
ValidVault::computeMinScale(vaultAsset, tc.values);
|
||||
auto const actualScale = ValidVault::computeMinScale(vaultAsset, tc.values);
|
||||
|
||||
BEAST_EXPECTS(
|
||||
actualScale == tc.expectedMinScale,
|
||||
"expected: " + std::to_string(tc.expectedMinScale) +
|
||||
", actual: " + std::to_string(actualScale));
|
||||
"expected: " + std::to_string(tc.expectedMinScale) + ", actual: " + std::to_string(actualScale));
|
||||
for (auto const& num : tc.values)
|
||||
{
|
||||
// None of these scales are far enough apart that rounding the
|
||||
// values would lose information, so check that the rounded
|
||||
// value matches the original.
|
||||
auto const actualRounded =
|
||||
roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
auto const actualRounded = roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
BEAST_EXPECTS(
|
||||
actualRounded == num.delta,
|
||||
"number " + to_string(num.delta) + " rounded to scale " +
|
||||
std::to_string(actualScale) + " is " +
|
||||
"number " + to_string(num.delta) + " rounded to scale " + std::to_string(actualScale) + " is " +
|
||||
to_string(actualRounded));
|
||||
}
|
||||
}
|
||||
@@ -3817,13 +3805,11 @@ class Invariants_test : public beast::unit_test::suite
|
||||
{
|
||||
testcase("vault computeMinScale: " + tc.name);
|
||||
|
||||
auto const actualScale =
|
||||
ValidVault::computeMinScale(vaultAsset, tc.values);
|
||||
auto const actualScale = ValidVault::computeMinScale(vaultAsset, tc.values);
|
||||
|
||||
BEAST_EXPECTS(
|
||||
actualScale == tc.expectedMinScale,
|
||||
"expected: " + std::to_string(tc.expectedMinScale) +
|
||||
", actual: " + std::to_string(actualScale));
|
||||
"expected: " + std::to_string(tc.expectedMinScale) + ", actual: " + std::to_string(actualScale));
|
||||
std::optional<Number> first;
|
||||
Number firstRounded;
|
||||
for (auto const& num : tc.values)
|
||||
@@ -3831,16 +3817,14 @@ class Invariants_test : public beast::unit_test::suite
|
||||
if (!first)
|
||||
{
|
||||
first = num.delta;
|
||||
firstRounded =
|
||||
roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
firstRounded = roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
continue;
|
||||
}
|
||||
auto const numRounded =
|
||||
roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
auto const numRounded = roundToAsset(vaultAsset, num.delta, actualScale);
|
||||
BEAST_EXPECTS(
|
||||
numRounded != firstRounded,
|
||||
"at a scale of " + std::to_string(actualScale) + " " +
|
||||
to_string(num.delta) + " == " + to_string(*first));
|
||||
"at a scale of " + std::to_string(actualScale) + " " + to_string(num.delta) +
|
||||
" == " + to_string(*first));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2513
src/test/app/Loan/LoanBase.h
Normal file
2513
src/test/app/Loan/LoanBase.h
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -14,7 +14,8 @@ namespace jtx {
|
||||
std::tuple<Json::Value, Keylet>
|
||||
Vault::create(CreateArgs const& args)
|
||||
{
|
||||
auto keylet = keylet::vault(args.owner.id(), env.seq(args.owner));
|
||||
auto sequence = args.sequence ? *args.sequence : env.seq(args.owner);
|
||||
auto keylet = keylet::vault(args.owner.id(), sequence);
|
||||
Json::Value jv;
|
||||
jv[jss::TransactionType] = jss::VaultCreate;
|
||||
jv[jss::Account] = args.owner.human();
|
||||
|
||||
@@ -26,6 +26,7 @@ struct Vault
|
||||
Account owner;
|
||||
Asset asset;
|
||||
std::optional<std::uint32_t> flags{};
|
||||
std::optional<uint32_t> sequence;
|
||||
};
|
||||
|
||||
/** Return a VaultCreate transaction and the Vault's expected keylet. */
|
||||
|
||||
Reference in New Issue
Block a user