Skip to content

atomic Unit tests for Dec and Inc not check edge cases  #1769

Open
@psychocoderHPC

Description

@psychocoderHPC

The unit test for atomicDec is not testing the flip around based on the values.

ref = (((old == 0) || (old > value)) ? value : static_cast<T>(old - 1));

Some for atomicInc

ref = ((old >= value) ? 0 : static_cast<T>(old + 1));

We simply test if an value is incremented or decremented:

ALPAKA_NO_HOST_ACC_WARNING
template<typename TAcc, typename T>
ALPAKA_FN_ACC auto testAtomicInc(TAcc const& acc, bool* success, T operandOrig) -> void
{
// \TODO: Check reset to 0 at 'value'.
T const value = static_cast<T>(42);
T const reference = static_cast<T>(operandOrig + 1);
auto& operand = alpaka::declareSharedVar<T, __COUNTER__>(acc);
{
operand = operandOrig;
T const ret = alpaka::atomicOp<alpaka::AtomicInc>(acc, &operand, value);
ALPAKA_CHECK(*success, equals(operandOrig, ret));
ALPAKA_CHECK(*success, equals(operand, reference));
}
{
operand = operandOrig;
T const ret = alpaka::atomicInc(acc, &operand, value);
ALPAKA_CHECK(*success, equals(operandOrig, ret));
ALPAKA_CHECK(*success, equals(operand, reference));
}
}
ALPAKA_NO_HOST_ACC_WARNING
template<typename TAcc, typename T>
ALPAKA_FN_ACC auto testAtomicDec(TAcc const& acc, bool* success, T operandOrig) -> void
{
// \TODO: Check reset to 'value' at 0.
T const value = static_cast<T>(42);
T const reference = static_cast<T>(operandOrig - 1);
auto& operand = alpaka::declareSharedVar<T, __COUNTER__>(acc);
{
operand = operandOrig;
T const ret = alpaka::atomicOp<alpaka::AtomicDec>(acc, &operand, value);
ALPAKA_CHECK(*success, equals(operandOrig, ret));
ALPAKA_CHECK(*success, equals(operand, reference));
}
{
operand = operandOrig;
T const ret = alpaka::atomicDec(acc, &operand, value);
ALPAKA_CHECK(*success, equals(operandOrig, ret));
ALPAKA_CHECK(*success, equals(operand, reference));
}
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions