# 2023-02-01 testSwapYForXGivenY debugging ```solidity function testSwapYForXGivenY() public { uint160 sqrtP = 1 << 95; uint256 yToSpend = 5; (uint256 x, uint256 spentY) = swapper.swapYForXGivenYExt(yToSpend, Price.wrap(sqrtP)); console2.log(spentY); assertTrue(x > 0); } ``` [FAIL. Reason: Arithmetic over/underflow] testSwapYForXGivenY() (gas: 62815) Problem: when accumulating x, more y is being spent than what is passed in In `swapYForXGivenY`: ```solidity uint256 usedY = SwapMath.calcYFromPriceDelta(newSP, sCache.sqrtP, liq, true); uint256 feeAmount = fCache.feeCalc.calcFeeAmount(sCache.mLiq, sCache.tLiq, usedY); console2.log("usedY: %d ", usedY); // usedY: 49500000000000000000 console2.log("feeAmt: %d ", feeAmount); // feeAmt: 10033483146067417 console2.log("y: %d ", y); // y: 5 y -= usedY + feeAmount; // overflows ``` Test fails with underflow for y<100e18, passes when over 100e18 (test just looks for any x to be sent back) _Initial values:_ * mLiq: 100e18 * tLiq: 1e18 * sqrtP: Price.wrap(1 << 96) When swapping x for y given x, we can swap 5 x for y without overflow. ``` usedX: 4 feeamt: 1 x: 5 ``` Q: why do we pass in y, calculate an effective y balance from fees and a price chance from that, and then once again try and calculate how much y we're swapping for from that price change? Solution to overflow in test(?) : price being passed in was far too less than the actual price, so when calulating y from the price delta the value was far higher than the amount passed in