Browse Source

Trade: improve AnimationData OOB assertion messages.

This still contained the original message which didn't say the index.
Times changed significantly since then, and the printed index really
proved to be useful.

Also fixing a OOB assertion in the test triggered by the new ArrayView
element access assertions -- the graceful assertion returns the first
element, so we have to have at least one there to return.
pull/499/head
Vladimír Vondruš 3 years ago
parent
commit
d16dbcd93c
  1. 22
      src/Magnum/Trade/AnimationData.cpp
  2. 27
      src/Magnum/Trade/Test/AnimationDataTest.cpp

22
src/Magnum/Trade/AnimationData.cpp

@ -78,34 +78,42 @@ Containers::ArrayView<char> AnimationData::mutableData() & {
} }
AnimationTrackType AnimationData::trackType(UnsignedInt id) const { AnimationTrackType AnimationData::trackType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackType(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._type; return _tracks[id]._type;
} }
AnimationTrackType AnimationData::trackResultType(UnsignedInt id) const { AnimationTrackType AnimationData::trackResultType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackResultType(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackResultType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._resultType; return _tracks[id]._resultType;
} }
AnimationTrackTargetType AnimationData::trackTargetType(UnsignedInt id) const { AnimationTrackTargetType AnimationData::trackTargetType(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTargetType(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackTargetType(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._targetType; return _tracks[id]._targetType;
} }
UnsignedLong AnimationData::trackTarget(UnsignedInt id) const { UnsignedLong AnimationData::trackTarget(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::trackTarget(): index out of range", {}); CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::trackTarget(): index" << id << "out of range for" << _tracks.size() << "tracks", {});
return _tracks[id]._target; return _tracks[id]._target;
} }
const Animation::TrackViewStorage<const Float>& AnimationData::track(UnsignedInt id) const { const Animation::TrackViewStorage<const Float>& AnimationData::track(UnsignedInt id) const {
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", _tracks[id]._view); CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::track(): index" << id << "out of range for" << _tracks.size() << "tracks", _tracks[0]._view);
return _tracks[id]._view; return _tracks[id]._view;
} }
const Animation::TrackViewStorage<Float>& AnimationData::mutableTrack(UnsignedInt id) { const Animation::TrackViewStorage<Float>& AnimationData::mutableTrack(UnsignedInt id) {
CORRADE_ASSERT(_dataFlags & DataFlag::Mutable, CORRADE_ASSERT(_dataFlags & DataFlag::Mutable,
"Trade::AnimationData::mutableTrack(): the animation is not mutable", reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view)); "Trade::AnimationData::mutableTrack(): the animation is not mutable",
CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view)); reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view));
CORRADE_ASSERT(id < _tracks.size(),
"Trade::AnimationData::mutableTrack(): index" << id << "out of range for" << _tracks.size() << "tracks",
reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[0]._view));
return reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view); return reinterpret_cast<const Animation::TrackViewStorage<Float>&>(_tracks[id]._view);
} }

27
src/Magnum/Trade/Test/AnimationDataTest.cpp

@ -579,19 +579,24 @@ void AnimationDataTest::trackWrongIndex() {
std::ostringstream out; std::ostringstream out;
Error redirectError{&out}; Error redirectError{&out};
AnimationData data{nullptr, nullptr}; AnimationData data{nullptr, {
data.trackType(0); AnimationTrackData{AnimationTrackType::Vector3,
data.trackResultType(0); AnimationTrackTargetType::Scaling3D, 0, {}}
data.trackTargetType(0); }};
data.trackTarget(0); data.trackType(1);
data.track(0); data.trackResultType(1);
data.trackTargetType(1);
data.trackTarget(1);
data.track(1);
data.mutableTrack(1);
CORRADE_COMPARE(out.str(), CORRADE_COMPARE(out.str(),
"Trade::AnimationData::trackType(): index out of range\n" "Trade::AnimationData::trackType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackResultType(): index out of range\n" "Trade::AnimationData::trackResultType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackTargetType(): index out of range\n" "Trade::AnimationData::trackTargetType(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::trackTarget(): index out of range\n" "Trade::AnimationData::trackTarget(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::track(): index out of range\n"); "Trade::AnimationData::track(): index 1 out of range for 1 tracks\n"
"Trade::AnimationData::mutableTrack(): index 1 out of range for 1 tracks\n");
} }
void AnimationDataTest::trackWrongType() { void AnimationDataTest::trackWrongType() {

Loading…
Cancel
Save