DRTVWR-476: Add basic tests for LLCond.
parent
3810145c1d
commit
9a3afe9606
|
|
@ -145,6 +145,7 @@ set(llcommon_HEADER_FILES
|
|||
llcleanup.h
|
||||
llcommon.h
|
||||
llcommonutils.h
|
||||
llcond.h
|
||||
llcoros.h
|
||||
llcrc.h
|
||||
llcriticaldamp.h
|
||||
|
|
@ -327,6 +328,7 @@ if (LL_TESTS)
|
|||
LL_ADD_INTEGRATION_TEST(commonmisc "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(bitpack "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(llbase64 "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(llcond "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(lldate "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(lldeadmantimer "" "${test_libs}")
|
||||
LL_ADD_INTEGRATION_TEST(lldependencies "" "${test_libs}")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,67 @@
|
|||
/**
|
||||
* @file llcond_test.cpp
|
||||
* @author Nat Goodspeed
|
||||
* @date 2019-07-18
|
||||
* @brief Test for llcond.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2019&license=viewerlgpl$
|
||||
* Copyright (c) 2019, Linden Research, Inc.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
// Precompiled header
|
||||
#include "linden_common.h"
|
||||
// associated header
|
||||
#include "llcond.h"
|
||||
// STL headers
|
||||
// std headers
|
||||
// external library headers
|
||||
// other Linden headers
|
||||
#include "../test/lltut.h"
|
||||
#include "llcoros.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* TUT
|
||||
*****************************************************************************/
|
||||
namespace tut
|
||||
{
|
||||
struct llcond_data
|
||||
{
|
||||
LLScalarCond<int> cond{0};
|
||||
};
|
||||
typedef test_group<llcond_data> llcond_group;
|
||||
typedef llcond_group::object object;
|
||||
llcond_group llcondgrp("llcond");
|
||||
|
||||
template<> template<>
|
||||
void object::test<1>()
|
||||
{
|
||||
set_test_name("Immediate gratification");
|
||||
cond.set_one(1);
|
||||
ensure("wait_for_equal() failed",
|
||||
cond.wait_for_equal(F32Milliseconds(1), 1));
|
||||
ensure("wait_for_unequal() should have failed",
|
||||
! cond.wait_for_unequal(F32Milliseconds(1), 1));
|
||||
}
|
||||
|
||||
template<> template<>
|
||||
void object::test<2>()
|
||||
{
|
||||
set_test_name("Simple two-coroutine test");
|
||||
LLCoros::instance().launch(
|
||||
"test<2>",
|
||||
[this]()
|
||||
{
|
||||
// Lambda immediately entered -- control comes here first.
|
||||
ensure_equals(cond.get(), 0);
|
||||
cond.set_all(1);
|
||||
cond.wait_equal(2);
|
||||
ensure_equals(cond.get(), 2);
|
||||
cond.set_all(3);
|
||||
});
|
||||
// Main coroutine is resumed only when the lambda waits.
|
||||
ensure_equals(cond.get(), 1);
|
||||
cond.set_all(2);
|
||||
cond.wait_equal(3);
|
||||
}
|
||||
} // namespace tut
|
||||
Loading…
Reference in New Issue