add more transfer tests for different situations

This commit is contained in:
Ricardo Guilherme Schmidt
2023-09-26 02:41:52 -03:00
parent c105703c8a
commit 18827999ec
3 changed files with 97 additions and 4 deletions

View File

@@ -5,21 +5,21 @@
| Function Name | min | avg | median | max | # calls |
| allowance | 0 | 269 | 0 | 808 | 3 |
| approve | 30781 | 31244 | 31244 | 31708 | 2 |
| balanceOf | 0 | 655 | 0 | 2753 | 15 |
| balanceOf | 0 | 393 | 0 | 2753 | 25 |
| balanceOfAt | 0 | 90 | 0 | 2363 | 26 |
| changeController | 0 | 1014 | 758 | 3558 | 5 |
| controller | 0 | 0 | 0 | 0 | 6 |
| createCloneToken | 0 | 916398 | 916398 | 1832796 | 2 |
| decimals | 0 | 0 | 0 | 0 | 6 |
| destroyTokens | 8956 | 8956 | 8956 | 8956 | 1 |
| generateTokens | 0 | 23933 | 0 | 95751 | 12 |
| generateTokens | 0 | 13676 | 0 | 95751 | 21 |
| name | 0 | 0 | 0 | 0 | 6 |
| parentSnapShotBlock | 0 | 0 | 0 | 0 | 7 |
| parentToken | 0 | 0 | 0 | 0 | 7 |
| symbol | 0 | 0 | 0 | 0 | 6 |
| totalSupply | 0 | 273 | 0 | 1911 | 7 |
| totalSupplyAt | 0 | 285 | 0 | 1995 | 7 |
| transfer | 9785 | 53386 | 75187 | 75187 | 3 |
| transfer | 9785 | 47444 | 55381 | 75187 | 10 |
| transferFrom | 0 | 23361 | 3495 | 66590 | 3 |

View File

@@ -11,5 +11,9 @@ GenerateTokensTest:test_RevertWhen_SenderIsNotController() (gas: 14966)
MiniMeTokenTest:testDeployment() (gas: 26535)
ReentrancyTest:testAttack() (gas: 229331)
TransferTest:testDeployment() (gas: 26595)
TransferTest:testDoubleTransfer() (gas: 92339)
TransferTest:testDoubleTransfer() (gas: 92361)
TransferTest:testDoubleTransfer2() (gas: 70580)
TransferTest:testMultipleTransferToSame() (gas: 114591)
TransferTest:testMultipleTransferToSame2() (gas: 92788)
TransferTest:testTransfer() (gas: 81675)
TransferTest:testTransfer2() (gas: 59896)

View File

@@ -72,6 +72,53 @@ contract TransferTest is MiniMeTokenTest {
MiniMeTokenTest.setUp();
}
function testMultipleTransferToSame() public {
vm.pauseGasMetering();
_generateTokens(accounts[0], 10);
_generateTokens(accounts[1], 10);
vm.roll(block.number + 1);
vm.prank(accounts[0]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[2], 2);
vm.pauseGasMetering();
vm.prank(accounts[1]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[2], 2);
vm.pauseGasMetering();
assertEq(minimeToken.balanceOf(accounts[0]), 8, "balance of sender 0 should be reduced");
assertEq(minimeToken.balanceOf(accounts[1]), 8, "balance of sender 1 should be reduced");
assertEq(minimeToken.balanceOf(accounts[2]), 4, "balance of receiver should be increased");
vm.resumeGasMetering();
}
function testMultipleTransferToSame2() public {
vm.pauseGasMetering();
_generateTokens(accounts[0], 10);
_generateTokens(accounts[1], 10);
_generateTokens(accounts[2], 1);
vm.roll(block.number + 1);
vm.prank(accounts[0]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[2], 2);
vm.pauseGasMetering();
vm.prank(accounts[1]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[2], 2);
vm.pauseGasMetering();
assertEq(minimeToken.balanceOf(accounts[0]), 8, "balance of sender 0 should be reduced");
assertEq(minimeToken.balanceOf(accounts[1]), 8, "balance of sender 1 should be reduced");
assertEq(minimeToken.balanceOf(accounts[2]), 5, "balance of receiver should be increased");
vm.resumeGasMetering();
}
function testDoubleTransfer() public {
vm.pauseGasMetering();
@@ -90,6 +137,25 @@ contract TransferTest is MiniMeTokenTest {
vm.resumeGasMetering();
}
function testDoubleTransfer2() public {
vm.pauseGasMetering();
_generateTokens(accounts[0], 10);
_generateTokens(accounts[1], 1);
vm.roll(block.number + 1);
vm.startPrank(accounts[0]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[1], 2);
minimeToken.transfer(accounts[1], 2);
vm.pauseGasMetering();
vm.stopPrank();
assertEq(minimeToken.balanceOf(accounts[0]), 6, "balance of sender should be reduced");
assertEq(minimeToken.balanceOf(accounts[1]), 5, "balance of receiver should be increased");
vm.resumeGasMetering();
}
function testTransfer() public {
vm.pauseGasMetering();
uint256 currentBlock = block.number;
@@ -113,6 +179,29 @@ contract TransferTest is MiniMeTokenTest {
assertEq(minimeToken.balanceOfAt(accounts[0], currentBlock), 10, "balance at original block should be correct");
vm.resumeGasMetering();
}
function testTransfer2() public {
vm.pauseGasMetering();
uint256 currentBlock = block.number;
uint256 nextBlock = currentBlock + 1;
_generateTokens(accounts[0], 10);
_generateTokens(accounts[1], 1);
// enforce the next block
vm.roll(nextBlock);
vm.prank(accounts[0]);
vm.resumeGasMetering();
minimeToken.transfer(accounts[1], 2);
vm.pauseGasMetering();
assertEq(minimeToken.balanceOf(accounts[0]), 8, "balance of sender should be reduced");
assertEq(minimeToken.balanceOf(accounts[1]), 3, "balance of receiver should be increased");
vm.resumeGasMetering();
}
}
contract AllowanceTest is MiniMeTokenTest {