blob: 6360de42de011b356661041a1dfe9158f0f8d847 [file] [log] [blame]
Jacob Bramley028fb052016-12-15 15:44:34 +00001// Copyright 2016, VIXL authors
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are met:
6//
7// * Redistributions of source code must retain the above copyright notice,
8// this list of conditions and the following disclaimer.
9// * Redistributions in binary form must reproduce the above copyright notice,
10// this list of conditions and the following disclaimer in the documentation
11// and/or other materials provided with the distribution.
12// * Neither the name of ARM Limited nor the names of its contributors may be
13// used to endorse or promote products derived from this software without
14// specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS CONTRIBUTORS "AS IS" AND
17// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
20// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#include <stdlib.h>
28
Jacob Bramley028fb052016-12-15 15:44:34 +000029#include "globals-vixl.h"
Pierre Langlois1bce0072017-06-06 17:58:58 +010030#include "test-runner.h"
Jacob Bramley028fb052016-12-15 15:44:34 +000031
32// These are all negative tests to check that the aborts work and print sensible
33// messages. These tests cannot check the aborts with negative_testing=off.
34
35#ifdef VIXL_NEGATIVE_TESTING
36#include <stdexcept>
37
38namespace vixl {
39
Pierre Langloisbde2e4b2017-01-24 17:41:26 +000040#define TEST(name, code, expected_prefix) \
41 TEST_(ABORTS_##name) { \
42 try { \
43 code; \
44 printf("\n%s:%d\nNo exception raised.\n", __FILE__, __LINE__); \
45 abort(); \
Pierre Langlois4df15512018-05-22 15:01:58 +010046 } catch (const std::runtime_error& e) { \
Pierre Langloisbde2e4b2017-01-24 17:41:26 +000047 size_t prefix_length = strlen(expected_prefix); \
48 if (strncmp(expected_prefix, e.what(), prefix_length) != 0) { \
49 printf("\n%s:%d\nFound:\n%sExpected:\n%s...\n", \
50 __FILE__, \
51 __LINE__, \
52 e.what(), \
53 expected_prefix); \
54 abort(); \
55 } \
56 } \
57 }
Jacob Bramley028fb052016-12-15 15:44:34 +000058
59TEST(abort, VIXL_ABORT(), "Aborting in ")
60TEST(abort_with_msg, VIXL_ABORT_WITH_MSG("message\n"), "message\nin ")
61TEST(check_simple, VIXL_CHECK(false), "Assertion failed (false)\nin ")
62TEST(check_expression, VIXL_CHECK(1 == 2), "Assertion failed (1 == 2)\nin ")
63#ifdef VIXL_DEBUG
64TEST(unimplemented, VIXL_UNIMPLEMENTED(), "UNIMPLEMENTED in ")
65TEST(unreachable, VIXL_UNREACHABLE(), "UNREACHABLE in ")
Jacob Bramley8e2049c2017-04-10 17:40:20 +010066TEST(assert, VIXL_ASSERT(false), "Assertion failed (false)\nin ")
Jacob Bramley028fb052016-12-15 15:44:34 +000067#endif
68
69} // namespace vixl
70
71#endif // VIXL_NEGATIVE_TESTING