From d16dbcd93c775a3d15a679ea32e35e2d0a13c7b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 18 Dec 2022 20:54:28 +0100 Subject: [PATCH] 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. --- src/Magnum/Trade/AnimationData.cpp | 22 +++++++++++------ src/Magnum/Trade/Test/AnimationDataTest.cpp | 27 ++++++++++++--------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Magnum/Trade/AnimationData.cpp b/src/Magnum/Trade/AnimationData.cpp index b7be3f127..f9fbd005d 100644 --- a/src/Magnum/Trade/AnimationData.cpp +++ b/src/Magnum/Trade/AnimationData.cpp @@ -78,34 +78,42 @@ Containers::ArrayView AnimationData::mutableData() & { } 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; } 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; } 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; } 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; } const Animation::TrackViewStorage& 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; } const Animation::TrackViewStorage& AnimationData::mutableTrack(UnsignedInt id) { CORRADE_ASSERT(_dataFlags & DataFlag::Mutable, - "Trade::AnimationData::mutableTrack(): the animation is not mutable", reinterpret_cast&>(_tracks[id]._view)); - CORRADE_ASSERT(id < _tracks.size(), "Trade::AnimationData::track(): index out of range", reinterpret_cast&>(_tracks[id]._view)); + "Trade::AnimationData::mutableTrack(): the animation is not mutable", + reinterpret_cast&>(_tracks[id]._view)); + CORRADE_ASSERT(id < _tracks.size(), + "Trade::AnimationData::mutableTrack(): index" << id << "out of range for" << _tracks.size() << "tracks", + reinterpret_cast&>(_tracks[0]._view)); return reinterpret_cast&>(_tracks[id]._view); } diff --git a/src/Magnum/Trade/Test/AnimationDataTest.cpp b/src/Magnum/Trade/Test/AnimationDataTest.cpp index a11eaa2e9..57900aa76 100644 --- a/src/Magnum/Trade/Test/AnimationDataTest.cpp +++ b/src/Magnum/Trade/Test/AnimationDataTest.cpp @@ -579,19 +579,24 @@ void AnimationDataTest::trackWrongIndex() { std::ostringstream out; Error redirectError{&out}; - AnimationData data{nullptr, nullptr}; - data.trackType(0); - data.trackResultType(0); - data.trackTargetType(0); - data.trackTarget(0); - data.track(0); + AnimationData data{nullptr, { + AnimationTrackData{AnimationTrackType::Vector3, + AnimationTrackTargetType::Scaling3D, 0, {}} + }}; + data.trackType(1); + data.trackResultType(1); + data.trackTargetType(1); + data.trackTarget(1); + data.track(1); + data.mutableTrack(1); CORRADE_COMPARE(out.str(), - "Trade::AnimationData::trackType(): index out of range\n" - "Trade::AnimationData::trackResultType(): index out of range\n" - "Trade::AnimationData::trackTargetType(): index out of range\n" - "Trade::AnimationData::trackTarget(): index out of range\n" - "Trade::AnimationData::track(): index out of range\n"); + "Trade::AnimationData::trackType(): index 1 out of range for 1 tracks\n" + "Trade::AnimationData::trackResultType(): index 1 out of range for 1 tracks\n" + "Trade::AnimationData::trackTargetType(): index 1 out of range for 1 tracks\n" + "Trade::AnimationData::trackTarget(): index 1 out of range for 1 tracks\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() {