f7a0e1f7c1
- Now it's checked that cleanup behaves as expected in a concurrent setting for `put` and `remove`. Note that Lincheck never checks that a value is actually cleaned up. Instead, it compares the result with the single-threaded execution of a scenario. Hence, the non-concurrent `CleanableSoftValueCacheTest` is crucial, as it separately ensures correct deterministic cleanup in a single-threaded environment. - We cannot test that operations returning a new value (such as `get`) always return values which haven't been cleaned up yet, because the value might be cleaned up by another thread between the return point of the operation and cleanup checking. ^KT-62136