+
+
+
3582 using namespace test::jtx;
+
+
+
+
3586 Account
const& owner;
+
3587 Account
const& issuer;
+
3588 Account
const& depositor;
+
3589 Account
const& vaultAccount;
+
+
+
+
+
+
+
+
-
3599 testCase(18, [&,
this](Env& env, Data d) {
-
3600 testcase(
"Scale deposit overflow on second deposit");
-
-
-
3603 auto tx = d.vault.deposit(
-
3604 {.depositor = d.depositor,
-
-
3606 .amount = d.asset(5)});
-
-
-
+
3599 auto testCase = [&,
this](
+
+
+
3602 Env env{*
this, testable_amendments() | featureSingleAssetVault};
+
3603 Account
const owner{
"owner"};
+
3604 Account
const issuer{
"issuer"};
+
3605 Account
const depositor{
"depositor"};
+
+
3607 env.fund(XRP(1000), issuer, owner, depositor);
+
+
-
-
3612 auto tx = d.vault.deposit(
-
3613 {.depositor = d.depositor,
-
-
3615 .amount = d.asset(10)});
-
-
-
-
-
-
3621 testCase(18, [&,
this](Env& env, Data d) {
-
3622 testcase(
"Scale deposit overflow on total shares");
-
-
-
3625 auto tx = d.vault.deposit(
-
3626 {.depositor = d.depositor,
-
-
3628 .amount = d.asset(5)});
-
-
-
-
-
-
3634 auto tx = d.vault.deposit(
-
3635 {.depositor = d.depositor,
-
-
3637 .amount = d.asset(5)});
-
-
-
-
-
-
3643 testCase(1, [&,
this](Env& env, Data d) {
-
-
-
3646 auto const start = env.balance(d.depositor, d.assets).number();
-
3647 auto tx = d.vault.deposit(
-
3648 {.depositor = d.depositor,
-
-
3650 .amount = d.asset(1)});
-
-
-
3653 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(10));
-
-
3655 env.balance(d.depositor, d.assets) ==
-
-
-
-
3659 testCase(1, [&,
this](Env& env, Data d) {
-
3660 testcase(
"Scale deposit insignificant amount");
-
-
3662 auto tx = d.vault.deposit(
-
3663 {.depositor = d.depositor,
-
-
-
-
-
-
3669 testCase(1, [&,
this](Env& env, Data d) {
-
3670 testcase(
"Scale deposit exact, using full precision");
-
-
3672 auto const start = env.balance(d.depositor, d.assets).number();
-
3673 auto tx = d.vault.deposit(
-
3674 {.depositor = d.depositor,
-
-
-
-
-
3679 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(15));
-
-
3681 env.balance(d.depositor, d.assets) ==
-
-
-
-
3685 testCase(1, [&,
this](Env& env, Data d) {
-
3686 testcase(
"Scale deposit exact, truncating from .5");
-
-
3688 auto const start = env.balance(d.depositor, d.assets).number();
-
-
-
-
3692 auto tx = d.vault.deposit(
-
3693 {.depositor = d.depositor,
-
-
-
-
-
3698 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
-
-
3700 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3705 auto tx = d.vault.deposit(
-
3706 {.depositor = d.depositor,
-
-
-
-
-
3711 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(24));
-
-
3713 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3718 auto tx = d.vault.deposit(
-
3719 {.depositor = d.depositor,
-
-
-
-
-
3724 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(36));
-
-
3726 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3731 testCase(1, [&,
this](Env& env, Data d) {
-
3732 testcase(
"Scale deposit exact, truncating from .01");
-
-
3734 auto const start = env.balance(d.depositor, d.assets).number();
-
-
3736 auto tx = d.vault.deposit(
-
3737 {.depositor = d.depositor,
-
-
-
-
-
3742 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
-
-
3744 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3749 auto tx = d.vault.deposit(
-
3750 {.depositor = d.depositor,
-
-
-
-
-
3755 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(18));
-
-
3757 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3762 testCase(1, [&,
this](Env& env, Data d) {
-
3763 testcase(
"Scale deposit exact, truncating from .99");
-
-
3765 auto const start = env.balance(d.depositor, d.assets).number();
-
-
3767 auto tx = d.vault.deposit(
-
3768 {.depositor = d.depositor,
-
-
-
-
-
3773 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
-
-
3775 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3780 auto tx = d.vault.deposit(
-
3781 {.depositor = d.depositor,
-
-
-
-
-
3786 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(18));
-
-
3788 env.balance(d.depositor, d.assets) ==
-
-
-
-
-
3793 testCase(1, [&,
this](Env& env, Data d) {
-
-
3795 auto const start = env.balance(d.depositor, d.assets).number();
-
3796 auto tx = d.vault.deposit(
-
3797 {.depositor = d.depositor,
-
-
-
-
-
3802 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
-
-
3804 env.balance(d.depositor, d.assets) ==
-
-
-
3807 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3810 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
-
-
-
-
3819 auto const start = env.balance(d.depositor, d.assets).number();
-
3820 auto tx = d.vault.withdraw(
-
3821 {.depositor = d.depositor,
-
-
-
-
-
-
3827 env.balance(d.depositor, d.shares) == d.share(900));
-
-
3829 env.balance(d.depositor, d.assets) ==
-
-
-
3832 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3835 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
3840 testcase(
"Scale redeem with rounding");
-
-
-
-
-
3845 auto const start = env.balance(d.depositor, d.assets).number();
-
3846 d.peek([](
SLE& vault,
auto&) ->
bool {
-
3847 vault[sfAssetsAvailable] =
Number(1);
-
-
-
-
-
-
-
-
3855 auto tx = d.vault.withdraw(
-
3856 {.depositor = d.depositor,
-
-
-
-
-
-
3862 env.balance(d.depositor, d.shares) == d.share(900 - 25));
-
-
3864 env.balance(d.depositor, d.assets) ==
-
-
-
3867 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3870 env.balance(d.vaultAccount, d.shares) ==
-
-
+
+
3612 env.trust(asset(1000), owner);
+
3613 env.trust(asset(1000), depositor);
+
3614 env(pay(issuer, owner, asset(200)));
+
3615 env(pay(issuer, depositor, asset(200)));
+
+
+
3618 auto [tx, keylet] = vault.create({.owner = owner, .asset = asset});
+
3619 tx[sfScale] = scale;
+
+
+
3622 auto const [vaultAccount, issuanceId] =
+
+
3624 auto const vault = env.le(keylet);
+
+
3626 Account(
"vault", vault->at(sfAccount)),
+
3627 vault->at(sfShareMPTID)};
+
+
+
3630 env.memoize(vaultAccount);
+
+
+
+
3634 return env.app().openLedger().modify(
+
+
+
+
3638 if (!BEAST_EXPECT(vault !=
nullptr))
+
+
3640 auto shares = sb.
peek(
+
+
3642 if (!BEAST_EXPECT(shares !=
nullptr))
+
+
3644 if (fn(*vault, *shares))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
3659 .depositor = depositor,
+
3660 .vaultAccount = vaultAccount,
+
+
+
+
+
+
+
+
+
+
3670 testCase(18, [&,
this](Env& env, Data d) {
+
3671 testcase(
"Scale deposit overflow on first deposit");
+
3672 auto tx = d.vault.deposit(
+
3673 {.depositor = d.depositor,
+
+
3675 .amount = d.asset(10)});
+
+
+
+
+
3680 testCase(18, [&,
this](Env& env, Data d) {
+
3681 testcase(
"Scale deposit overflow on second deposit");
+
+
+
3684 auto tx = d.vault.deposit(
+
3685 {.depositor = d.depositor,
+
+
3687 .amount = d.asset(5)});
+
+
+
+
+
+
3693 auto tx = d.vault.deposit(
+
3694 {.depositor = d.depositor,
+
+
3696 .amount = d.asset(10)});
+
+
+
+
+
+
3702 testCase(18, [&,
this](Env& env, Data d) {
+
3703 testcase(
"Scale deposit overflow on total shares");
+
+
+
3706 auto tx = d.vault.deposit(
+
3707 {.depositor = d.depositor,
+
+
3709 .amount = d.asset(5)});
+
+
+
+
+
+
3715 auto tx = d.vault.deposit(
+
3716 {.depositor = d.depositor,
+
+
3718 .amount = d.asset(5)});
+
+
+
+
+
+
3724 testCase(1, [&,
this](Env& env, Data d) {
+
+
+
3727 auto const start = env.balance(d.depositor, d.assets).number();
+
3728 auto tx = d.vault.deposit(
+
3729 {.depositor = d.depositor,
+
+
3731 .amount = d.asset(1)});
+
+
+
3734 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(10));
+
+
3736 env.balance(d.depositor, d.assets) ==
+
+
+
+
3740 testCase(1, [&,
this](Env& env, Data d) {
+
3741 testcase(
"Scale deposit insignificant amount");
+
+
3743 auto tx = d.vault.deposit(
+
3744 {.depositor = d.depositor,
+
+
+
+
+
+
3750 testCase(1, [&,
this](Env& env, Data d) {
+
3751 testcase(
"Scale deposit exact, using full precision");
+
+
3753 auto const start = env.balance(d.depositor, d.assets).number();
+
3754 auto tx = d.vault.deposit(
+
3755 {.depositor = d.depositor,
+
+
+
+
+
3760 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(15));
+
+
3762 env.balance(d.depositor, d.assets) ==
+
+
+
+
3766 testCase(1, [&,
this](Env& env, Data d) {
+
3767 testcase(
"Scale deposit exact, truncating from .5");
+
+
3769 auto const start = env.balance(d.depositor, d.assets).number();
+
+
+
+
3773 auto tx = d.vault.deposit(
+
3774 {.depositor = d.depositor,
+
+
+
+
+
3779 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
+
+
3781 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3786 auto tx = d.vault.deposit(
+
3787 {.depositor = d.depositor,
+
+
+
+
+
3792 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(24));
+
+
3794 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3799 auto tx = d.vault.deposit(
+
3800 {.depositor = d.depositor,
+
+
+
+
+
3805 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(36));
+
+
3807 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3812 testCase(1, [&,
this](Env& env, Data d) {
+
3813 testcase(
"Scale deposit exact, truncating from .01");
+
+
3815 auto const start = env.balance(d.depositor, d.assets).number();
+
+
3817 auto tx = d.vault.deposit(
+
3818 {.depositor = d.depositor,
+
+
+
+
+
3823 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
+
+
3825 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3830 auto tx = d.vault.deposit(
+
3831 {.depositor = d.depositor,
+
+
+
+
+
3836 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(18));
+
+
3838 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3843 testCase(1, [&,
this](Env& env, Data d) {
+
3844 testcase(
"Scale deposit exact, truncating from .99");
+
+
3846 auto const start = env.balance(d.depositor, d.assets).number();
+
+
3848 auto tx = d.vault.deposit(
+
3849 {.depositor = d.depositor,
+
+
+
+
+
3854 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(12));
+
+
3856 env.balance(d.depositor, d.assets) ==
+
+
+
+
+
3861 auto tx = d.vault.deposit(
+
3862 {.depositor = d.depositor,
+
+
+
+
+
3867 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(18));
+
+
3869 env.balance(d.depositor, d.assets) ==
+
+
+
-
-
-
-
-
-
-
3880 auto const start = env.balance(d.depositor, d.assets).number();
-
-
3882 tx = d.vault.withdraw(
-
3883 {.depositor = d.depositor,
-
-
-
-
-
-
3889 env.balance(d.depositor, d.shares) == d.share(875 - 21));
-
-
3891 env.balance(d.depositor, d.assets) ==
-
-
-
3894 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3897 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
-
3903 auto const rest = env.balance(d.depositor, d.shares).number();
-
-
3905 tx = d.vault.withdraw(
-
3906 {.depositor = d.depositor,
-
-
3908 .amount =
STAmount(d.share, rest)});
-
-
-
3911 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
+
3874 testCase(1, [&,
this](Env& env, Data d) {
+
+
3876 auto const start = env.balance(d.depositor, d.assets).number();
+
3877 auto tx = d.vault.deposit(
+
3878 {.depositor = d.depositor,
+
+
+
+
+
3883 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
+
+
3885 env.balance(d.depositor, d.assets) ==
+
+
+
3888 env.balance(d.vaultAccount, d.assets) ==
+
+
+
3891 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
+
+
3900 auto const start = env.balance(d.depositor, d.assets).number();
+
3901 auto tx = d.vault.withdraw(
+
3902 {.depositor = d.depositor,
+
+
+
+
+
+
3908 env.balance(d.depositor, d.shares) == d.share(900));
+
+
3910 env.balance(d.depositor, d.assets) ==
+
-
3913 env.balance(d.vaultAccount, d.assets).number() == 0);
-
-
3915 env.balance(d.vaultAccount, d.shares).number() == 0);
-
-
-
-
3919 testCase(18, [&,
this](Env& env, Data d) {
-
3920 testcase(
"Scale withdraw overflow");
-
-
-
3923 auto tx = d.vault.deposit(
-
3924 {.depositor = d.depositor,
-
-
3926 .amount = d.asset(5)});
-
-
-
-
-
-
3932 auto tx = d.vault.withdraw(
-
3933 {.depositor = d.depositor,
-
-
-
-
-
-
-
-
3941 testCase(1, [&,
this](Env& env, Data d) {
-
-
3943 auto const start = env.balance(d.depositor, d.assets).number();
-
3944 auto tx = d.vault.deposit(
-
3945 {.depositor = d.depositor,
-
-
-
-
-
3950 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
-
-
3952 env.balance(d.depositor, d.assets) ==
-
-
-
3955 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3958 env.balance(d.vaultAccount, d.shares) ==
-
+
3913 env.balance(d.vaultAccount, d.assets) ==
+
+
+
3916 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
3921 testcase(
"Scale redeem with rounding");
+
+
+
+
+
3926 auto const start = env.balance(d.depositor, d.assets).number();
+
3927 d.peek([](
SLE& vault,
auto&) ->
bool {
+
3928 vault[sfAssetsAvailable] =
Number(1);
+
+
+
+
+
+
+
+
3936 auto tx = d.vault.withdraw(
+
3937 {.depositor = d.depositor,
+
+
+
+
+
+
3943 env.balance(d.depositor, d.shares) == d.share(900 - 25));
+
+
3945 env.balance(d.depositor, d.assets) ==
+
+
+
3948 env.balance(d.vaultAccount, d.assets) ==
+
+
+
3951 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
3970 auto const start = env.balance(d.depositor, d.assets).number();
-
3971 auto tx = d.vault.withdraw(
-
3972 {.depositor = d.depositor,
-
-
-
-
+
3961 auto const start = env.balance(d.depositor, d.assets).number();
+
+
3963 tx = d.vault.withdraw(
+
3964 {.depositor = d.depositor,
+
+
+
+
+
+
3970 env.balance(d.depositor, d.shares) == d.share(875 - 21));
+
+
3972 env.balance(d.depositor, d.assets) ==
+
+
+
3975 env.balance(d.vaultAccount, d.assets) ==
+
-
3978 env.balance(d.depositor, d.shares) == d.share(900));
-
-
3980 env.balance(d.depositor, d.assets) ==
-
-
-
3983 env.balance(d.vaultAccount, d.assets) ==
-
-
-
3986 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
3991 testcase(
"Scale withdraw insignificant amount");
-
3992 auto tx = d.vault.withdraw(
-
3993 {.depositor = d.depositor,
-
-
-
+
3978 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
3984 auto const rest = env.balance(d.depositor, d.shares).number();
+
+
3986 tx = d.vault.withdraw(
+
3987 {.depositor = d.depositor,
+
+
3989 .amount =
STAmount(d.share, rest)});
+
+
+
3992 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
+
+
3994 env.balance(d.vaultAccount, d.assets).number() == 0);
+
+
3996 env.balance(d.vaultAccount, d.shares).number() == 0);
-
-
-
4000 testcase(
"Scale withdraw with rounding assets");
-
-
-
-
-
-
-
-
4008 auto const start = env.balance(d.depositor, d.assets).number();
-
4009 d.peek([](
SLE& vault,
auto&) ->
bool {
-
4010 vault[sfAssetsAvailable] =
Number(1);
-
-
-
-
-
-
-
-
4018 auto tx = d.vault.withdraw(
-
4019 {.depositor = d.depositor,
-
-
-
-
-
-
4025 env.balance(d.depositor, d.shares) == d.share(900 - 25));
-
-
4027 env.balance(d.depositor, d.assets) ==
-
-
-
4030 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4033 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
4038 testcase(
"Scale withdraw with rounding shares up");
-
-
-
-
-
-
-
-
4046 auto const start = env.balance(d.depositor, d.assets).number();
-
4047 auto tx = d.vault.withdraw(
-
4048 {.depositor = d.depositor,
-
-
-
-
-
-
4054 env.balance(d.depositor, d.shares) == d.share(875 - 38));
-
-
4056 env.balance(d.depositor, d.assets) ==
-
+
+
+
4000 testCase(18, [&,
this](Env& env, Data d) {
+
4001 testcase(
"Scale withdraw overflow");
+
+
+
4004 auto tx = d.vault.deposit(
+
4005 {.depositor = d.depositor,
+
+
4007 .amount = d.asset(5)});
+
+
+
+
+
+
4013 auto tx = d.vault.withdraw(
+
4014 {.depositor = d.depositor,
+
+
+
+
+
+
+
+
4022 testCase(1, [&,
this](Env& env, Data d) {
+
+
4024 auto const start = env.balance(d.depositor, d.assets).number();
+
4025 auto tx = d.vault.deposit(
+
4026 {.depositor = d.depositor,
+
+
+
+
+
4031 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
+
+
4033 env.balance(d.depositor, d.assets) ==
+
+
+
4036 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4039 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
+
+
+
+
+
4051 auto const start = env.balance(d.depositor, d.assets).number();
+
4052 auto tx = d.vault.withdraw(
+
4053 {.depositor = d.depositor,
+
+
+
+
-
4059 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4062 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
4067 testcase(
"Scale withdraw with rounding shares down");
-
-
-
-
-
-
-
-
4075 auto const start = env.balance(d.depositor, d.assets).number();
-
4076 auto tx = d.vault.withdraw(
-
4077 {.depositor = d.depositor,
-
-
-
-
-
-
4083 env.balance(d.depositor, d.shares) == d.share(837 - 37));
-
-
4085 env.balance(d.depositor, d.assets) ==
-
-
-
4088 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4091 env.balance(d.vaultAccount, d.shares) ==
-
-
+
4059 env.balance(d.depositor, d.shares) == d.share(900));
+
+
4061 env.balance(d.depositor, d.assets) ==
+
+
+
4064 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4067 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4072 testcase(
"Scale withdraw insignificant amount");
+
4073 auto tx = d.vault.withdraw(
+
4074 {.depositor = d.depositor,
+
+
+
+
+
+
+
4081 testcase(
"Scale withdraw with rounding assets");
+
+
+
+
+
+
+
+
4089 auto const start = env.balance(d.depositor, d.assets).number();
+
4090 d.peek([](
SLE& vault,
auto&) ->
bool {
+
4091 vault[sfAssetsAvailable] =
Number(1);
+
+
-
-
4096 testcase(
"Scale withdraw tiny amount");
-
-
4098 auto const start = env.balance(d.depositor, d.assets).number();
+
+
+
+
4099 auto tx = d.vault.withdraw(
4100 {.depositor = d.depositor,
-
-
+
+
-
4106 env.balance(d.depositor, d.shares) == d.share(800 - 1));
+
4106 env.balance(d.depositor, d.shares) == d.share(900 - 25));
4108 env.balance(d.depositor, d.assets) ==
-
+
4111 env.balance(d.vaultAccount, d.assets) ==
-
+
4114 env.balance(d.vaultAccount, d.shares) ==
-
+
-
-
-
4121 env.balance(d.vaultAccount, d.assets).number();
-
-
4123 tx = d.vault.withdraw(
-
4124 {.depositor = d.depositor,
-
-
4126 .amount =
STAmount(d.asset, rest)});
-
-
-
4129 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
-
-
4131 env.balance(d.vaultAccount, d.assets).number() == 0);
-
-
4133 env.balance(d.vaultAccount, d.shares).number() == 0);
-
-
-
-
4137 testCase(18, [&,
this](Env& env, Data d) {
-
4138 testcase(
"Scale clawback overflow");
-
-
-
4141 auto tx = d.vault.deposit(
-
4142 {.depositor = d.depositor,
-
-
4144 .amount = d.asset(5)});
-
-
-
-
-
-
4150 auto tx = d.vault.clawback(
-
4151 {.issuer = d.issuer,
-
-
4153 .holder = d.depositor,
-
-
-
-
-
-
-
4160 testCase(1, [&,
this](Env& env, Data d) {
-
-
4162 auto const start = env.balance(d.depositor, d.assets).number();
-
4163 auto tx = d.vault.deposit(
-
4164 {.depositor = d.depositor,
-
-
-
-
-
4169 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
-
-
4171 env.balance(d.depositor, d.assets) ==
-
-
-
4174 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4177 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
-
-
-
-
-
-
4188 auto const start = env.balance(d.depositor, d.assets).number();
-
4189 auto tx = d.vault.clawback(
-
4190 {.issuer = d.issuer,
-
-
4192 .holder = d.depositor,
-
-
-
-
-
4197 env.balance(d.depositor, d.shares) == d.share(900));
-
-
4199 env.balance(d.depositor, d.assets) ==
-
-
-
4202 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4205 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
4210 testcase(
"Scale clawback insignificant amount");
-
4211 auto tx = d.vault.clawback(
-
4212 {.issuer = d.issuer,
-
-
4214 .holder = d.depositor,
-
-
-
-
-
-
4220 testcase(
"Scale clawback with rounding assets");
-
-
-
-
-
-
-
-
4228 auto const start = env.balance(d.depositor, d.assets).number();
-
4229 auto tx = d.vault.clawback(
-
4230 {.issuer = d.issuer,
-
-
4232 .holder = d.depositor,
-
-
-
-
-
4237 env.balance(d.depositor, d.shares) == d.share(900 - 25));
-
-
4239 env.balance(d.depositor, d.assets) ==
-
-
-
4242 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4245 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
4250 testcase(
"Scale clawback with rounding shares up");
-
-
-
-
-
-
-
-
4258 auto const start = env.balance(d.depositor, d.assets).number();
-
4259 auto tx = d.vault.clawback(
-
4260 {.issuer = d.issuer,
-
-
4262 .holder = d.depositor,
-
-
-
-
-
4267 env.balance(d.depositor, d.shares) == d.share(875 - 38));
-
-
4269 env.balance(d.depositor, d.assets) ==
-
-
-
4272 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4275 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
4280 testcase(
"Scale clawback with rounding shares down");
-
-
-
-
-
-
-
-
4288 auto const start = env.balance(d.depositor, d.assets).number();
-
4289 auto tx = d.vault.clawback(
-
4290 {.issuer = d.issuer,
-
-
4292 .holder = d.depositor,
-
-
-
-
-
4297 env.balance(d.depositor, d.shares) == d.share(837 - 37));
-
-
4299 env.balance(d.depositor, d.assets) ==
-
-
-
4302 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4305 env.balance(d.vaultAccount, d.shares) ==
-
-
+
4119 testcase(
"Scale withdraw with rounding shares up");
+
+
+
+
+
+
+
+
4127 auto const start = env.balance(d.depositor, d.assets).number();
+
4128 auto tx = d.vault.withdraw(
+
4129 {.depositor = d.depositor,
+
+
+
+
+
+
4135 env.balance(d.depositor, d.shares) == d.share(875 - 38));
+
+
4137 env.balance(d.depositor, d.assets) ==
+
+
+
4140 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4143 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4148 testcase(
"Scale withdraw with rounding shares down");
+
+
+
+
+
+
+
+
4156 auto const start = env.balance(d.depositor, d.assets).number();
+
4157 auto tx = d.vault.withdraw(
+
4158 {.depositor = d.depositor,
+
+
+
+
+
+
4164 env.balance(d.depositor, d.shares) == d.share(837 - 37));
+
+
4166 env.balance(d.depositor, d.assets) ==
+
+
+
4169 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4172 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4177 testcase(
"Scale withdraw tiny amount");
+
+
4179 auto const start = env.balance(d.depositor, d.assets).number();
+
4180 auto tx = d.vault.withdraw(
+
4181 {.depositor = d.depositor,
+
+
+
+
+
+
4187 env.balance(d.depositor, d.shares) == d.share(800 - 1));
+
+
4189 env.balance(d.depositor, d.assets) ==
+
+
+
4192 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4195 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
4202 env.balance(d.vaultAccount, d.assets).number();
+
+
4204 tx = d.vault.withdraw(
+
4205 {.depositor = d.depositor,
+
+
4207 .amount =
STAmount(d.asset, rest)});
+
+
+
4210 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
+
+
4212 env.balance(d.vaultAccount, d.assets).number() == 0);
+
+
4214 env.balance(d.vaultAccount, d.shares).number() == 0);
+
+
+
+
4218 testCase(18, [&,
this](Env& env, Data d) {
+
4219 testcase(
"Scale clawback overflow");
+
+
+
4222 auto tx = d.vault.deposit(
+
4223 {.depositor = d.depositor,
+
+
4225 .amount = d.asset(5)});
+
+
+
+
+
+
4231 auto tx = d.vault.clawback(
+
4232 {.issuer = d.issuer,
+
+
4234 .holder = d.depositor,
+
+
+
+
+
+
+
4241 testCase(1, [&,
this](Env& env, Data d) {
+
+
4243 auto const start = env.balance(d.depositor, d.assets).number();
+
4244 auto tx = d.vault.deposit(
+
4245 {.depositor = d.depositor,
+
+
+
+
+
4250 BEAST_EXPECT(env.balance(d.depositor, d.shares) == d.share(1000));
+
+
4252 env.balance(d.depositor, d.assets) ==
+
+
+
4255 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4258 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
+
+
+
+
4269 auto const start = env.balance(d.depositor, d.assets).number();
+
4270 auto tx = d.vault.clawback(
+
4271 {.issuer = d.issuer,
+
+
4273 .holder = d.depositor,
+
+
+
+
+
4278 env.balance(d.depositor, d.shares) == d.share(900));
+
+
4280 env.balance(d.depositor, d.assets) ==
+
+
+
4283 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4286 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4291 testcase(
"Scale clawback insignificant amount");
+
4292 auto tx = d.vault.clawback(
+
4293 {.issuer = d.issuer,
+
+
4295 .holder = d.depositor,
+
+
+
+
+
+
4301 testcase(
"Scale clawback with rounding assets");
+
+
+
+
+
+
-
-
4310 testcase(
"Scale clawback tiny amount");
-
-
4312 auto const start = env.balance(d.depositor, d.assets).number();
-
4313 auto tx = d.vault.clawback(
-
4314 {.issuer = d.issuer,
-
-
4316 .holder = d.depositor,
-
-
-
-
-
4321 env.balance(d.depositor, d.shares) == d.share(800 - 1));
+
4309 auto const start = env.balance(d.depositor, d.assets).number();
+
4310 auto tx = d.vault.clawback(
+
4311 {.issuer = d.issuer,
+
+
4313 .holder = d.depositor,
+
+
+
+
+
4318 env.balance(d.depositor, d.shares) == d.share(900 - 25));
+
+
4320 env.balance(d.depositor, d.assets) ==
+
-
4323 env.balance(d.depositor, d.assets) ==
-
+
4323 env.balance(d.vaultAccount, d.assets) ==
+
-
4326 env.balance(d.vaultAccount, d.assets) ==
-
-
-
4329 env.balance(d.vaultAccount, d.shares) ==
-
-
-
-
-
-
-
4336 env.balance(d.vaultAccount, d.assets).number();
-
4337 d.peek([](
SLE& vault,
auto&) ->
bool {
-
4338 vault[sfAssetsAvailable] =
Number(5);
-
-
-
-
-
-
-
-
4346 tx = d.vault.clawback(
-
4347 {.issuer = d.issuer,
-
-
4349 .holder = d.depositor,
-
4350 .amount =
STAmount(d.asset, rest)});
-
-
-
4353 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
-
-
4355 env.balance(d.vaultAccount, d.assets).number() == 0);
-
-
4357 env.balance(d.vaultAccount, d.shares).number() == 0);
+
4326 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4331 testcase(
"Scale clawback with rounding shares up");
+
+
+
+
+
+
+
+
4339 auto const start = env.balance(d.depositor, d.assets).number();
+
4340 auto tx = d.vault.clawback(
+
4341 {.issuer = d.issuer,
+
+
4343 .holder = d.depositor,
+
+
+
+
+
4348 env.balance(d.depositor, d.shares) == d.share(875 - 38));
+
+
4350 env.balance(d.depositor, d.assets) ==
+
+
+
4353 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4356 env.balance(d.vaultAccount, d.shares) ==
+
-
-
+
+
+
4361 testcase(
"Scale clawback with rounding shares down");
+
+
+
+
+
+
+
+
4369 auto const start = env.balance(d.depositor, d.assets).number();
+
4370 auto tx = d.vault.clawback(
+
4371 {.issuer = d.issuer,
+
+
4373 .holder = d.depositor,
+
+
+
+
+
4378 env.balance(d.depositor, d.shares) == d.share(837 - 37));
+
+
4380 env.balance(d.depositor, d.assets) ==
+
+
+
4383 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4386 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
4391 testcase(
"Scale clawback tiny amount");
+
+
4393 auto const start = env.balance(d.depositor, d.assets).number();
+
4394 auto tx = d.vault.clawback(
+
4395 {.issuer = d.issuer,
+
+
4397 .holder = d.depositor,
+
+
+
+
+
4402 env.balance(d.depositor, d.shares) == d.share(800 - 1));
+
+
4404 env.balance(d.depositor, d.assets) ==
+
+
+
4407 env.balance(d.vaultAccount, d.assets) ==
+
+
+
4410 env.balance(d.vaultAccount, d.shares) ==
+
+
+
+
+
+
+
4417 env.balance(d.vaultAccount, d.assets).number();
+
4418 d.peek([](
SLE& vault,
auto&) ->
bool {
+
4419 vault[sfAssetsAvailable] =
Number(5);
+
+
+
+
+
+
+
+
4427 tx = d.vault.clawback(
+
4428 {.issuer = d.issuer,
+
+
4430 .holder = d.depositor,
+
4431 .amount =
STAmount(d.asset, rest)});
+
+
+
4434 BEAST_EXPECT(env.balance(d.depositor, d.shares).number() == 0);
+
+
4436 env.balance(d.vaultAccount, d.assets).number() == 0);
+
+
4438 env.balance(d.vaultAccount, d.shares).number() == 0);
+
+
+