Tests/Kernel: Added hwtests for svcArbitrateAddress
This commit is contained in:
parent
c67172587c
commit
4ac4e96bed
53
source/tests/kernel/address_arbiter.cpp
Normal file
53
source/tests/kernel/address_arbiter.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include <memory>
|
||||||
|
#include <cstring>
|
||||||
|
#include <3ds.h>
|
||||||
|
|
||||||
|
#include "common/scope_exit.h"
|
||||||
|
#include "tests/test.h"
|
||||||
|
|
||||||
|
namespace Kernel {
|
||||||
|
namespace AddressArbiter {
|
||||||
|
|
||||||
|
static bool Test_ArbitrateAddress() {
|
||||||
|
const Result ERR_TIMEOUT = 0x09401BFE;
|
||||||
|
|
||||||
|
Handle arbiter;
|
||||||
|
TestEquals(svcCreateAddressArbiter(&arbiter), 0);
|
||||||
|
SCOPE_EXIT({ svcCloseHandle(arbiter); });
|
||||||
|
|
||||||
|
s32 arbitration_value = 0;
|
||||||
|
|
||||||
|
// Test ARBITRATION_WAIT_IF_LESS_THAN, should not wait
|
||||||
|
TestEquals(svcArbitrateAddress(arbiter, (u32)&arbitration_value, ARBITRATION_WAIT_IF_LESS_THAN, 0, 0), 0);
|
||||||
|
TestEquals(arbitration_value, 0);
|
||||||
|
|
||||||
|
// Test ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT, this one should _not_ wait, however, it still returns a Timeout error
|
||||||
|
TestEquals(svcArbitrateAddress(arbiter, (u32)&arbitration_value, ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT, 0, 3000000000), ERR_TIMEOUT);
|
||||||
|
TestEquals(arbitration_value, 0);
|
||||||
|
|
||||||
|
// Test ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT, this should wait and return a Timeout error
|
||||||
|
TestEquals(svcArbitrateAddress(arbiter, (u32)&arbitration_value, ARBITRATION_WAIT_IF_LESS_THAN_TIMEOUT, 1, 3000000000), ERR_TIMEOUT);
|
||||||
|
TestEquals(arbitration_value, 0);
|
||||||
|
|
||||||
|
// Test ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN_TIMEOUT, this one should wait and return a Timeout error
|
||||||
|
TestEquals(svcArbitrateAddress(arbiter, (u32)&arbitration_value, ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN_TIMEOUT, 1, 3000000000), ERR_TIMEOUT);
|
||||||
|
// The value must be modified if the thread was put to sleep
|
||||||
|
TestEquals(arbitration_value, -1);
|
||||||
|
|
||||||
|
// Reset the value
|
||||||
|
arbitration_value = 0;
|
||||||
|
|
||||||
|
// Test ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN, this one should not wait and return RESULT_SUCCESS
|
||||||
|
TestEquals(svcArbitrateAddress(arbiter, (u32)&arbitration_value, ARBITRATION_DECREMENT_AND_WAIT_IF_LESS_THAN, 0, 0), 0);
|
||||||
|
// The value must not be modified if the thread was not put to sleep
|
||||||
|
TestEquals(arbitration_value, 0);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestAll() {
|
||||||
|
Test("Kernel::AddressArbiter", "ArbitrateAddress", Test_ArbitrateAddress(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
} // namespace
|
@ -4,10 +4,12 @@ namespace Kernel {
|
|||||||
|
|
||||||
namespace Ports { void TestAll(); }
|
namespace Ports { void TestAll(); }
|
||||||
namespace WaitSynch { void TestAll(); }
|
namespace WaitSynch { void TestAll(); }
|
||||||
|
namespace AddressArbiter { void TestAll(); }
|
||||||
|
|
||||||
void TestAll() {
|
void TestAll() {
|
||||||
Ports::TestAll();
|
Ports::TestAll();
|
||||||
WaitSynch::TestAll();
|
WaitSynch::TestAll();
|
||||||
|
AddressArbiter::TestAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
Loading…
x
Reference in New Issue
Block a user