This issue was discovered during CI:
https://github.com/solana-labs/solana-program-library/runs/1833196857
The approach is to do the same calc as `_liquidate_obligation` and make
sure that the `MockConverter` doesn't overflow `Decimal`. This seemed
like a simpler approach than doing a complex local proptest constraint.
On top of that, it includes the proptest regression to run it on every
`cargo test`.
* Add proptest-regressions to .gitignore, created from failed proptests
* Add proptests to ensure swapping maintains value
* Address review feedback
* Add doc to public test function
* token-swap: Add fuzzer for swap / withdraw / deposit
* Run cargo fmt
* Make end-to-end testing work
* Fix test failures
* Cleanup for review
* Remove Clone trait for Initialize
* Fix building fuzz targets
* Fix fuzz withdraw logic to avoid ZeroTradingTokens error
* Cargo fmt
* Clippy / fmt again
* Integrate fuzzer in main workspace to share clippy / fmt
* Fix clippy
* Switch to stable honggfuzz that could work with BPF
* Update to most recent honggfuzz
* Add build / run requirements
* Add fuzz CI and cleanup for honggfuzz
* Revert to using fuzz feature to integrate with workspace
* Make fuzz script executable
* Refactor and cleanup
* Add nightly run
* Fix workflow typo
* Add runtime for pull request fuzz workflow
* Fix unrelated new clippy errors