```\n    function increaseTotalSupply(uint256 _amount) private {\n        daiMock.mint(address(this), _amount);\n        daiMock.approve(address(uToken), _amount);\n        uToken.mint(_amount);\n    }\n\n    function testMintRedeemSandwich() public {\n        increaseTotalSupply(50 ether);\n\n        vm.prank(ALICE);\n        uToken.borrow(ALICE, 50 ether);\n        uint256 borrowed = uToken.borrowBalanceView(ALICE);\n\n        vm.roll(block.number + 500);\n\n        vm.startPrank(BOB);\n        daiMock.approve(address(uToken), 100 ether);\n        uToken.mint(100 ether);\n\n        console.log("\n  [UToken] Total supply:", uToken.totalSupply());\n        console.log("[UToken] BOB balance:", uToken.balanceOf(BOB));\n        console.log("[DAI]    BOB balance:", daiMock.balanceOf(BOB));\n\n        uint256 currExchangeRate = uToken.exchangeRateStored();\n        console.log("[1] Exchange rate:", currExchangeRate);\n        vm.stopPrank();\n\n        vm.startPrank(ALICE);\n        uint256 interest = uToken.calculatingInterest(ALICE);\n        uint256 repayAmount = borrowed + interest;\n\n        daiMock.approve(address(uToken), repayAmount);\n        uToken.repayBorrow(ALICE, repayAmount);\n\n        console.log("\n  [UToken] Total supply:", uToken.totalSupply());\n        console.log("[UToken] ALICE balance:", uToken.balanceOf(ALICE));\n        console.log("[DAI]    ALICE balance:", daiMock.balanceOf(ALICE));\n\n        currExchangeRate = uToken.exchangeRateStored();\n        console.log("[2] Exchange rate:", currExchangeRate);\n        vm.stopPrank();\n\n        vm.startPrank(BOB);\n        uToken.redeem(uToken.balanceOf(BOB), 0);\n\n        console.log("\n  [UToken] Total supply:", uToken.totalSupply());\n        console.log("[UToken] BOB balance:", uToken.balanceOf(BOB));\n        console.log("[DAI]    BOB balance:", daiMock.balanceOf(BOB));\n\n        currExchangeRate = uToken.exchangeRateStored();\n        console.log("[3] Exchange rate:", currExchangeRate);\n    }\n```\n