@@ -14,7 +14,7 @@ contract CFGTest is Test {
1414 assertEq (token.decimals (), 18 );
1515 }
1616
17- function testMint (address nonWard , address destination , uint256 amount ) public {
17+ function testMint (address nonWard , address destination , uint256 mintAmount ) public {
1818 vm.assume (nonWard != address (this ));
1919 vm.assume (destination != address (this ) && destination != address (0 ));
2020
@@ -25,36 +25,92 @@ contract CFGTest is Test {
2525
2626 vm.prank (nonWard);
2727 vm.expectRevert (IAuth.NotAuthorized.selector );
28- token.mint (destination, amount );
28+ token.mint (destination, mintAmount );
2929
3030 assertEq (token.balanceOf (destination), 0 );
3131
3232 vm.prank (address (this ));
33- token.mint (destination, amount );
33+ token.mint (destination, mintAmount );
3434
35- assertEq (token.balanceOf (destination), amount );
35+ assertEq (token.balanceOf (destination), mintAmount );
3636 }
3737
38- function testBurn (address nonWard , uint256 amountToMint , uint256 amountToBurn ) public {
38+ function testBurn (address nonWard , uint256 mintAmount , uint256 burnAmount ) public {
3939 vm.assume (nonWard != address (this ));
40- amountToBurn = bound (amountToBurn , 0 , amountToMint );
40+ burnAmount = bound (burnAmount , 0 , mintAmount );
4141
4242 CFG token = new CFG ();
4343
4444 assertEq (token.wards (address (this )), 1 );
4545 assertEq (token.wards (nonWard), 0 );
4646
47- vm.prank (address (this ));
48- token.mint (address (this ), amountToMint);
49-
50- assertEq (token.balanceOf (address (this )), amountToMint);
47+ token.mint (address (this ), mintAmount);
48+ assertEq (token.balanceOf (address (this )), mintAmount);
5149
5250 vm.prank (nonWard);
5351 vm.expectRevert (IAuth.NotAuthorized.selector );
54- token.burn (address (this ), amountToBurn);
52+ token.burn (address (this ), burnAmount);
53+
54+ token.burn (address (this ), burnAmount);
55+ assertEq (token.balanceOf (address (this )), mintAmount - burnAmount);
56+ }
57+
58+ function testDelegateVotingPower (
59+ uint256 mintAmount ,
60+ uint256 transferAmount ,
61+ uint256 transferFromAmount ,
62+ uint256 burnAmount ,
63+ address delegatee ,
64+ address user2 ,
65+ address delegatee2
66+ ) public {
67+ vm.assume (delegatee != address (this ) && delegatee != address (0 ));
68+ vm.assume (user2 != delegatee && user2 != address (this ) && user2 != address (0 ));
69+ vm.assume (
70+ delegatee2 != delegatee && delegatee2 != user2 && delegatee2 != address (this ) && delegatee2 != address (0 )
71+ );
72+ transferAmount = bound (transferAmount, 0 , mintAmount);
73+ transferFromAmount = bound (transferFromAmount, 0 , mintAmount - transferAmount);
74+ burnAmount = bound (burnAmount, 0 , mintAmount - transferAmount - transferFromAmount);
75+
76+ CFG token = new CFG ();
77+
78+ token.mint (address (this ), mintAmount);
79+ assertEq (token.balanceOf (address (this )), mintAmount);
80+
81+ assertEq (token.delegatee (address (this )), address (0 ));
82+ assertEq (token.delegatee (user2), address (0 ));
83+ assertEq (token.delegatedVotingPower (address (this )), 0 );
84+ assertEq (token.delegatedVotingPower (delegatee2), 0 );
85+
86+ token.delegate (delegatee);
87+ vm.prank (user2);
88+ token.delegate (delegatee2);
89+
90+ assertEq (token.delegatee (address (this )), delegatee);
91+ assertEq (token.delegatee (user2), delegatee2);
92+ assertEq (token.delegatedVotingPower (delegatee), mintAmount);
93+ assertEq (token.delegatedVotingPower (delegatee2), 0 );
94+
95+ token.transfer (user2, transferAmount);
96+
97+ assertEq (token.delegatee (address (this )), delegatee);
98+ assertEq (token.delegatee (user2), delegatee2);
99+ assertEq (token.delegatedVotingPower (delegatee), mintAmount - transferAmount);
100+ assertEq (token.delegatedVotingPower (delegatee2), transferAmount);
101+
102+ token.transferFrom (address (this ), user2, transferFromAmount);
103+
104+ assertEq (token.delegatee (address (this )), delegatee);
105+ assertEq (token.delegatee (user2), delegatee2);
106+ assertEq (token.delegatedVotingPower (delegatee), mintAmount - transferAmount - transferFromAmount);
107+ assertEq (token.delegatedVotingPower (delegatee2), transferAmount + transferFromAmount);
55108
56- token.burn (address (this ), amountToBurn );
109+ token.burn (address (this ), burnAmount );
57110
58- assertEq (token.balanceOf (address (this )), amountToMint - amountToBurn);
111+ assertEq (token.delegatee (address (this )), delegatee);
112+ assertEq (token.delegatee (user2), delegatee2);
113+ assertEq (token.delegatedVotingPower (delegatee), mintAmount - transferAmount - transferFromAmount - burnAmount);
114+ assertEq (token.delegatedVotingPower (delegatee2), transferAmount + transferFromAmount);
59115 }
60116}
0 commit comments