harb/onchain/test
openhands 93ddd28978 fix: Test coverage: Stake.sol to 100% (#284)
Add 11 new targeted tests in Stake.t.sol to cover all reachable
uncovered branches and the untested permitAndSnatch() function:

- testRevert_TaxRateOutOfBounds_InSnatch: taxRate >= TAX_RATES.length in snatch()
- testRevert_PositionNotFound_NonLastInLoop: PositionNotFound inside the multi-position loop
- testRevert_TaxTooLow_NonLastInLoop: TaxTooLow inside the multi-position loop
- testSnatch_ExitLastPosition: _exitPosition() path for last snatched position
- testRevert_ExceededAvailableStake: no available stake, no positions provided
- testRevert_TooMuchSnatch_AvailableExceedsNeed: post-exit excess stake check
- testRevert_PositionNotFound_InChangeTax: changeTax() on non-existent position
- testRevert_TaxTooLow_InChangeTax: changeTax() with same/lower tax rate
- testRevert_NoPermission_InExitPosition: exitPosition() by non-owner
- testRevert_PositionNotFound_InPayTax: payTax() on non-existent position
- testPermitAndSnatch: EIP-712 permit + snatch in one transaction

Coverage achieved:
  Lines:     99.33% (148/149)
  Statements: 99.40% (167/168)
  Branches:  93.55% (29/31)  — 2 unreachable dead-code branches remain
  Functions: 100.00% (15/15)

The 2 uncovered branches are dead code: the require() failure in
_shrinkPosition (caller always guards sharesToTake < pos.share) and
the PositionNotFound guard in exitPosition() (unreachable because
owner and creationTime are always set/cleared together, so
pos.owner==msg.sender implies pos.creationTime!=0 for any live caller).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 03:59:20 +00:00
..
abstracts feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
helpers feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
libraries Add Solidity linting with solhint, Foundry formatter, and pre-commit hooks (#51) 2025-10-04 15:17:09 +02:00
mocks feat: protocol stats display + parameter sweep fuzzing infrastructure (#106) 2026-02-13 18:09:11 +00:00
EthScarcityAbundance.t.sol fix: resolve stack-too-deep in EthScarcityAbundance test 2026-02-23 17:10:01 +00:00
FuzzingAnalyzerBugs.t.sol feat: OptimizerV3 with direct 2D staking-to-LP parameter mapping 2026-02-13 18:21:18 +00:00
Kraiken.t.sol Add Solidity linting with solhint, Foundry formatter, and pre-commit hooks (#51) 2025-10-04 15:17:09 +02:00
LiquidityManager.t.sol fix: Test coverage: LiquidityManager + Optimizer + OptimizerV3 to 100% (#285) 2026-02-26 02:41:02 +00:00
Optimizer.t.sol fix: Test coverage: LiquidityManager + Optimizer + OptimizerV3 to 100% (#285) 2026-02-26 02:41:02 +00:00
OptimizerV3.t.sol fix: Test coverage: LiquidityManager + Optimizer + OptimizerV3 to 100% (#285) 2026-02-26 02:41:02 +00:00
OptimizerV3Push3.t.sol feat: Push3 → Solidity transpiler + OptimizerV3 port 2026-02-23 14:47:38 +00:00
ReplayProfitableScenario.t.sol feat: protocol stats display + parameter sweep fuzzing infrastructure (#106) 2026-02-13 18:09:11 +00:00
Stake.t.sol fix: Test coverage: Stake.sol to 100% (#284) 2026-02-26 03:59:20 +00:00
SupplyCorruption.t.sol fix(onchain): resolve KRK token supply corruption during recenter (#98) 2026-02-04 16:20:57 +00:00
VWAPTracker.t.sol Add Solidity linting with solhint, Foundry formatter, and pre-commit hooks (#51) 2025-10-04 15:17:09 +02:00