Merge pull request #37 from Subv/arbitrateaddress

Tests/Kernel: Added hwtests for svcArbitrateAddress
This commit is contained in:
bunnei 2015-12-28 18:35:30 -05:00
commit e17dc648dc
2 changed files with 55 additions and 0 deletions

View 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

View File

@ -4,10 +4,12 @@ namespace Kernel {
namespace Ports { void TestAll(); }
namespace WaitSynch { void TestAll(); }
namespace AddressArbiter { void TestAll(); }
void TestAll() {
Ports::TestAll();
WaitSynch::TestAll();
AddressArbiter::TestAll();
}
} // namespace