flatten 20260225
This commit is contained in:
79
tjp/core/threads/TestCollision.h
Executable file
79
tjp/core/threads/TestCollision.h
Executable file
@@ -0,0 +1,79 @@
|
||||
// License: Modified MIT (NON-AI)
|
||||
// See the LICENSE file in the root directory for license information.
|
||||
// Copyright 2025 Timothy Prepscius
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <atomic>
|
||||
#include "Lock.hpp"
|
||||
#include "../assert/release_assert.h"
|
||||
|
||||
namespace tjp::core {
|
||||
|
||||
struct ColliderImp
|
||||
{
|
||||
Mutex m;
|
||||
std::atomic<int> read = 0;
|
||||
std::atomic<int> write = 0;
|
||||
} ;
|
||||
|
||||
struct TestCollisionReadImp
|
||||
{
|
||||
ColliderImp &collider;
|
||||
|
||||
TestCollisionReadImp (ColliderImp &collider_) :
|
||||
collider(collider_)
|
||||
{
|
||||
auto l = lock_of(collider.m);
|
||||
release_assert(collider.write == 0);
|
||||
collider.read++;
|
||||
}
|
||||
|
||||
~TestCollisionReadImp ()
|
||||
{
|
||||
collider.read--;
|
||||
}
|
||||
};
|
||||
|
||||
struct TestCollisionWriteImp
|
||||
{
|
||||
ColliderImp &collider;
|
||||
|
||||
TestCollisionWriteImp (ColliderImp &collider_) :
|
||||
collider(collider_)
|
||||
{
|
||||
auto l = lock_of(collider.m);
|
||||
release_assert(collider.write == 0);
|
||||
release_assert(collider.read == 0);
|
||||
|
||||
collider.write++;
|
||||
}
|
||||
|
||||
~TestCollisionWriteImp ()
|
||||
{
|
||||
collider.write--;
|
||||
}
|
||||
};
|
||||
|
||||
struct ColliderEmpty {};
|
||||
struct TestCollisionEmpty
|
||||
{
|
||||
TestCollisionEmpty (ColliderEmpty &_){ (void)_; }
|
||||
} ;
|
||||
|
||||
#ifdef DEBUG
|
||||
using Collider = ColliderImp;
|
||||
using TestCollisionRead = TestCollisionReadImp;
|
||||
using TestCollisionWrite = TestCollisionWriteImp;
|
||||
#else
|
||||
using Collider = ColliderEmpty;
|
||||
using TestCollisionRead = TestCollisionEmpty;
|
||||
using TestCollisionWrite = TestCollisionEmpty;
|
||||
#endif
|
||||
|
||||
using ColliderAlways = ColliderImp;
|
||||
using TestCollisionReadAlways = TestCollisionReadImp;
|
||||
using TestCollisionWriteAlways = TestCollisionReadImp;
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user