mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Add unit tests for BlockAllocator
BlockAllocator backs sceKernelAllocPartitionMemory and the various partition allocators, and had no coverage at all. It's pure address bookkeeping - no real memory - so it can be checked hard: after any sequence of operations the blocks must still tile the range exactly, with no gaps, overlaps or strays, and GetTotalFreeBytes/GetLargestFreeBlockSize must agree with what's really in the list. ValidateAllocator() rebuilds the list through the public accessors and asserts all of that, and it runs after every step of the randomised sections. Covers bottom-up and top-down allocation, grain rounding, rejection of zero and oversized requests, splitting and re-merging on free, double free and free of an address that was never allocated, AllocAt including unaligned positions and collisions, AllocAligned with alignments coarser than the allocator's grain, filling the range completely and draining it, a range whose size isn't a multiple of the grain, and two randomised churn loops - one plain alloc/free, one mixing in aligned allocations and AllocAt to reach block layouts the simple loop never produces. Fixed seeds, so a failure reproduces. No bugs found - the allocator holds up. Verified the tests aren't vacuous by injecting two plausible bugs: dropping the forward merge in MergeFreeBlocks, and an off-by-one in the bottom-up fit check. Both are caught, the second pinpointed to a specific churn iteration. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01GZq8ZtJmFY7bkX5FVkr3P9
This commit is contained in:
1 parent
5cfc4e4dae
commit
879baa6412
3 files changed
+365
-1
No files matched your search
@@ -168,6 +168,12 @@ when making cross platform changes.
|
||||
New unit tests are added by listing them in availableTests in unittest.cpp. If they are large, put them in
|
||||
separate files in the unittest subdirectory. Remember to update both CMakeLists.txt and the visual studio project.
|
||||
|
||||
A unit test is often the first thing to call a given function from outside its own .cpp, which makes the
|
||||
`ppsspp_unittest` target in the legacy Android build (`android/jni/Android.mk`, see above) the strictest check
|
||||
we have: MSVC links an `inline` function defined in a .cpp anyway, clang correctly does not. So a test can
|
||||
build and pass on Windows and fail to link only on Android CI, with an undefined symbol pointing at a header
|
||||
line. Fix it by dropping the bogus `inline` from the definition, not by avoiding the call.
|
||||
|
||||
pspautotests are a large set of tests of the PSP OS's API surface, and thus tests our HLE implementation.
|
||||
|
||||
**To check for regressions, run them exactly the way CI does** (see `.github/workflows/build.yml`):
|
||||
|
||||
Reference in new issue
Block a user