// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIB_FIT_PROMISE_TESTS_UNITTEST_UTILS_H_
#define LIB_FIT_PROMISE_TESTS_UNITTEST_UTILS_H_

#include <stdlib.h>

#include <zxtest/zxtest.h>

// Asserts that a condition is true.  If false, prints an error then
// aborts the test run.
//
// This is for use when we don't want the test to continue running after a
// failure.  zxtest's ASSERT_*() macros do "return;" on failure, which
// doesn't work in functions with non-void return types, and it continues
// running if the calling function doesn't check for failure with something
// like ASSERT_NO_FATAL_FAILURES().
//
// Functions defined using zxtest's TEST() macro should use zxtest's
// ASSERT_*() and EXPECT_*() assertions instead of ASSERT_CRITICAL().
#define ASSERT_CRITICAL(x)                                                       \
  do {                                                                           \
    if (!(x)) {                                                                  \
      printf("ASSERT_CRITICAL FAILED at (%s:%d): %s\n", __FILE__, __LINE__, #x); \
      abort();                                                                   \
    }                                                                            \
  } while (0)

#endif  // LIB_FIT_PROMISE_TESTS_UNITTEST_UTILS_H_
