mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
GCC fixes for unit tests
This commit is contained in:
parent
0b5fa00984
commit
064c7dc16b
87
include/etl/experimental/singleton.h
Normal file
87
include/etl/experimental/singleton.h
Normal file
@ -0,0 +1,87 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2021 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ETL_SINGLETON_INCLUDED
|
||||
#define ETL_SINGLETON_INCLUDED
|
||||
|
||||
#include "platform.h"
|
||||
|
||||
namespace etl
|
||||
{
|
||||
//***************************************************************************
|
||||
/// Creates .
|
||||
//***************************************************************************
|
||||
template <typename TObject>
|
||||
class singleton
|
||||
{
|
||||
public:
|
||||
|
||||
static TObject& get_instance()
|
||||
{
|
||||
return p_instance.get();
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
static TObject* p_instance;
|
||||
|
||||
private:
|
||||
|
||||
singleton() ETL_DELETE;
|
||||
singleton(const singleton&) ETL_DELETE;
|
||||
singleton& operator =(const singleton&) ETL_DELETE;
|
||||
};
|
||||
|
||||
|
||||
template <typename TSingleton>
|
||||
class singleton_factory
|
||||
{
|
||||
virtual ~singleton_factory() {}
|
||||
|
||||
template <typename... TArgs>
|
||||
TSingleton* create(TArgs args...)
|
||||
{
|
||||
if (is_created)
|
||||
{
|
||||
return TSingleton::mp_Instance.get();
|
||||
}
|
||||
|
||||
|
||||
is_created = true;
|
||||
static Singleton Tmp;
|
||||
_TSingleton::mp_Instance.reset(pTmp);
|
||||
|
||||
return _TSingleton::mp_Instance.get();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -55,6 +55,11 @@ namespace
|
||||
{
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
lock_count = 0;
|
||||
}
|
||||
|
||||
bool try_lock()
|
||||
{
|
||||
++lock_count;
|
||||
@ -74,6 +79,8 @@ namespace
|
||||
int lock_count;
|
||||
};
|
||||
|
||||
Locks locks;
|
||||
|
||||
//***************************************************************************
|
||||
// Class callback via etl::function
|
||||
//***************************************************************************
|
||||
@ -147,7 +154,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_too_many_timers)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -172,7 +179,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_one_shot)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -221,7 +228,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_one_shot_after_timeout)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -274,7 +281,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_repeating)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -323,7 +330,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_repeating_bigger_step)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -376,7 +383,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_repeating_stop_start)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -436,7 +443,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_timer_starts_timer_small_step)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -480,7 +487,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_timer_starts_timer_big_step)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -524,7 +531,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_repeating_register_unregister)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -580,7 +587,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_repeating_clear)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -635,7 +642,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_delayed_immediate)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -685,7 +692,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_one_shot_big_step_short_delay_insert)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -728,7 +735,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_locked_one_shot_empty_list_huge_tick_before_insert)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -790,7 +797,7 @@ namespace
|
||||
test_object test_obj;
|
||||
callback_type delegate_callback = callback_type::create<test_object, &test_object::call>(test_obj);
|
||||
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
|
||||
@ -58,6 +58,11 @@ namespace
|
||||
{
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
lock_count = 0;
|
||||
}
|
||||
|
||||
bool try_lock()
|
||||
{
|
||||
++lock_count;
|
||||
@ -77,6 +82,8 @@ namespace
|
||||
int lock_count;
|
||||
};
|
||||
|
||||
Locks locks;
|
||||
|
||||
enum
|
||||
{
|
||||
MESSAGE1,
|
||||
@ -170,7 +177,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_too_many_timers)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -195,7 +202,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_one_shot)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -238,7 +245,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_one_shot_after_timeout)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -291,7 +298,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_repeating)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -334,7 +341,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_repeating_bigger_step)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -381,7 +388,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_repeating_stop_start)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -435,7 +442,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_repeating_register_unregister)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -485,7 +492,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_repeating_clear)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -534,7 +541,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_route_through_bus)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -579,7 +586,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_immediate_delayed)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -627,7 +634,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(message_timer_one_shot_big_step_short_delay_insert)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -666,7 +673,7 @@ namespace
|
||||
//*************************************************************************
|
||||
TEST(callback_timer_one_shot_empty_list_huge_tick_before_insert)
|
||||
{
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
@ -719,7 +726,7 @@ namespace
|
||||
#define FIX_PROCESSOR_AFFINITY
|
||||
#endif
|
||||
|
||||
static Locks locks;
|
||||
locks.clear();
|
||||
try_lock_type try_lock = try_lock_type::create<Locks, locks, &Locks::try_lock>();
|
||||
lock_type lock = lock_type::create<Locks, locks, &Locks::lock>();
|
||||
unlock_type unlock = unlock_type::create<Locks, locks, &Locks::unlock>();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user