Skip to content

Releases: jeremy-rifkin/libassert

Version 2.1.0

02 Jun 17:50
8cede19
Compare
Choose a tag to compare

Added:

  • Added software breakpoints to make assertion failures more debugger-friendly
  • Added ANSI color support for catch2 integration now that it is supported in catch v3.6.0

Fixed:

  • Fixed checking of stringifiable containers for types with operator<< overloads and fmt specializations

Other:

  • Added support for gcc 8
  • Improved testing

Version 2.0.2

30 Apr 04:40
425beca
Compare
Choose a tag to compare

Fixed:

  • Fixed minor issue with LIBASSERT_USE_MAGIC_ENUM handling in libassert-config.cmake
  • Fixed handling of edge case for internal string trimming utility

Other:

  • Bumped cpptrace to 0.5.3

Version 2.0.1

03 Apr 02:54
e64e4dd
Compare
Choose a tag to compare

Fixed:

  • Fixed issue with determining stringifiability when T::value_type is a class named value_type with a constructor #90
  • Fixed issue with an incorrect header being imported in assert-gtest.hpp #87

Other:

  • Improved internal string formatting
  • Improved Catch2 support

Version 2.0.0

17 Mar 01:23
9386c86
Compare
Choose a tag to compare

Changes since v1:

Assertion macros:

  • Replaced the previous ASSERT/VERIFY nomenclature with DEBUG_ASSERT and ASSERT
  • Updated assertion macros to no longer return a value by default
  • Added DEBUG_ASSERT_VAL, ASSERT_VAL, and ASSUME_VAL variants that return values
  • Added PANIC and UNREACHABLE
  • Added LIBASSERT_PREFIX_ASSERTIONS option to only add assertion macros with a LIBASSERT_ prefix

Assertion behavior:

  • Removed default throwing behavior for some assertion failures, all assertions now abort by default
  • Removed libassert::verification_failure
  • Removed non-fatal assertions

Custom failure handlers:

  • Removed macro-based custom assertion failure handler system
  • Added libassert::set_failure_handler
  • Removed default safe signed-unsigned comparison behavior
  • Added LIBASSERT_SAFE_COMPARISONS to opt into safe signed-unsigned comparisons
  • Simplified assertion failure handler signatures

Assertion information:

  • Removed libassert::assertion_printer
  • Added libassert::assertion_info with much more comprehensive information and methods for working with assertion
    information

Testing library support:

  • Added Catch2 and GoogleTest integrations

Library structure:

  • Removed libassert::utility and libassert::config namespaces
  • Updated the library's cmake target name to libassert::assert
  • Updated the library's header to <libasssert/assert.hpp>

Configuration:

  • Added configuration for literal formatting
  • Added configuration for path shortening modes
  • Added setting for output separator with libassert::set_separator
  • Removed libassert::set_color_output and libassert::set_rgb_output
  • Added libassert::set_color_scheme

Stringification:

  • Improved stringification generation to handle more types and better decide when there is useful information to print
  • Added stringification customization point instead of relying on operator<<(std::ostream, const T&)
  • Added LIBASSERT_NO_STRINGIFY_SMART_POINTER_OBJECTS option
  • Added limit to the number of items stringified for containers
  • Added {fmt} support with LIBASSERT_USE_FMT

Utilities:

  • Added libassert::enable_virtual_terminal_processing_if_needed() to the public interface
  • Added libassert::isatty to the public interface as well as stdin/stdout/stderr constants
  • Updated libassert::stacktrace to take color scheme and skip parameters
  • Removed libassert::replace_rgb
  • Removed libassert::strip_colors

Output:

  • Improved stacktrace format to make "click to jump to source" possible in some IDEs

Analysis:

  • Type prettifying
    • Added normalization for std::__cxx11:: to to std::
    • Added normalization for msvc ​`anonymous namespace' to (anonymous namespace)
  • Overhauled C++ tokenizer to use a much better implementation

Bug fixes:

  • Resolved long-standing crash caused by libc++'s std::regex implementation

Internal improvements:

  • Improved how data is stored in binary_diagnostics_descriptor, assert_static_parameters, and assertion_info
  • Improved internal argument processing
  • Improved assertion macro expansion
  • Added C++23 specialization for how static assertion information is stored which is hopefully faster for compile times
  • Improved handling of literal formatting
  • Removed the global lock used while processing assertions
  • Improved assertion processing logic
  • Lots of internal refactoring, cleanup, and changes to improve maintainability
  • Overhauled CMake thanks to a contributor, fixing a lot of issues and greatly improving the setup
  • Removed need for user to manually specify LIBASSERT_STATIC if using the project with cmake and a static build
  • Magic enum is now grabbed with FetchContent or externally from an existing install or package manager
  • Resolved inconsistent use of ASSERT vs LIBASSERT for the library's macro prefix
  • Updated internal error handling to use cpptrace exceptions
  • Added cmake integration testing on mingw to CI
  • General CI improvements
  • General testing improvements

Version 2.0.0-beta

16 Mar 14:59
c4035f8
Compare
Choose a tag to compare

Changes:

  • Catch2 and GoogleTest integrations
  • Implemented alternative path modes
  • {fmt} support with LIBASSERT_USE_FMT
  • Reworked stringification again
  • Overhauled C++ tokenizer to use a much better implementation
  • Added libassert::enable_virtual_terminal_processing_if_needed() to the public interface
  • Added libassert::isatty to the public interface as well as stdin/stdout/stderr constants
  • Renamed libassert::generate_stringification to libassert::stringify
  • Added setting for output separator with libassert::set_separator
  • Updated parameter passing for libassert::set_color_scheme
  • Updated libassert::stacktrace to take color scheme and skip parameters
  • Added C++23 specialization for how static assertion information is stored which is hopefully faster for compile times
  • Added LIBASSERT_PREFIX_ASSERTIONS option to only add assertion macros with a LIBASSERT_ prefix
  • Added normalization for msvc ​`anonymous namespace'
  • Added LIBASSERT_NO_STRINGIFY_SMART_POINTER_OBJECTS option
  • Improved how data is stored in binary_diagnostics_descriptor, assert_static_parameters, and assertion_info
  • Simplified up failure handler signature
  • Added limit to the number of items stringified for containers
  • Resolved long-standing bug related to libc++'s std::regex implementation
  • Added methods for getting parts of assertion info outputs for easier custom failure handler implementation
  • Improved internal argument processing
  • Cmake fixes and improvements

Version 2.0.0-alpha

28 Feb 04:26
7fb5d07
Compare
Choose a tag to compare

This is the first pre-release for version 2. Version 2 is an overhaul of the library taking lessons learned.

Major changes:

  • Replaced the previous ASSERT/VERIFY nomenclature with DEBUG_ASSERT and ASSERT
  • Updated assertion macros to no longer return a value by default
    • Debug-only assertions no longer have to evaluate the assertion expression, and removed NO_ASSERT_RELEASE_EVAL
  • Added DEBUG_ASSERT_VAL, ASSERT_VAL, and ASSUME_VAL variants that return values
  • Added PANIC and UNREACHABLE
  • Removed default throwing behavior for some assertion failures, all assertions now abort by default
  • Removed non-fatal assertions
  • Improved stringification generation to handle more types and better decide when there is useful information to print
  • Added stringification customization point instead of relying on operator<<(std::ostream, const T&)
  • Removed macro-based custom assertion failure handler system
  • Added libassert::set_failure_handler
  • Removed default safe signed-unsigned comparison behavior
  • Added LIBASSERT_SAFE_COMPARISONS to opt into safe signed-unsigned comparisons
  • Added color palette configuration
  • Added configuration for literal formatting
  • Reworked structures used to represent assertion information
    • Cleaned up binary_diagnostics_descriptor
    • Removed up extra_diagnostics struct trying to do too much
    • Renamed assertion_printer to assertion_info
    • Made more information available in the assertion_info struct
    • Removed lifetime funniness with the assertion_info struct
  • Type prettifying
    • std::__cxx11:: is simplified to std::

Core changes:

  • Cleaned up assertion macro expansion
  • Cleaned up handling of literal formatting
  • Cleaned up stringification generation
  • Cleaned up assertion processing logic
  • Removed the global lock used while processing assertions
  • Lots of internal refactoring, cleanup, and changes to improve maintainability
  • Overhauled CMake thanks to a contributor, fixing a lot of issues
  • Removed need for user to manually specify ASSERT_STATIC if using the project with cmake and a static build
  • Magic enum is now grabbed with FetchContent or externally from an existing install or package manager
  • Reworked README.md
  • Added CONTRIBUTING.md
  • Resolved inconsistent use of ASSERT vs LIBASSERT for the library's macro prefix
  • Fixed inconsistent use of assert vs libassert for referring to the library
  • Updated the library's cmake target name to libassert::assert
  • Updated the library's header to <libasssert/assert.hpp>
  • Updated internal error handling to use cpptrace exceptions
  • Added cmake integration testing on mingw to CI
  • General CI improvements
  • General testing improvements

Version 1.2.2

23 Nov 05:26
cc7e7f4
Compare
Choose a tag to compare

Small patch release that bumps the stack tracing back-end, part of getting vcpkg issues ironed out.

  • Bumped cpptrace to version 0.3.0

Version 1.2.1

10 Oct 04:14
3ba3135
Compare
Choose a tag to compare

Small release, mainly logistics and infrastructure changes:

  • More testing
  • Minor fixes and refactors
  • Added sonarcloud analysis
  • Bumped cpptrace to a much improved version 0.2.1

Version 1.2

28 Jul 20:53
c5168d5
Compare
Choose a tag to compare

Changelog:

  • Added libassert::config::set_rgb_output to control whether 24-bit ansi color sequences are used for coloring
  • Added support for stringifying std::error_code, std::error_condition, std::expected, and std::unexpected
  • Added -Wundef support
  • Added support for old-style ASSERT(foo && "Message")
  • Massively reworked stack traces so they are now much more reliable, portable, and efficient with the help of cpptrace
  • Improved stack tracing on windows: Added support for more complex symbols in stack traces
  • Improved MSVC behavior under /Zc:preprocessor
  • Improved output for assertions that aren't currently decomposed into a left-hand / right-hand (e.g. ASSERT(a + b);)
  • Improved cmake
  • Improved automated build and test workflows
  • Removed Makefiles
  • Fixed bug with analysis of expressions containing >>
  • Fixed bug with highlighting of escape sequences in strings
  • Fixed bug with line number width calculations
  • Fixed issue with a gcc bug via a workaround
  • Fixed issue with gnu libstdc++ dual abi via a workaround
  • Fixed issue with -Wuseless-cast
  • General code cleanup and improvements

Version 1.1

17 May 21:15
220c95f
Compare
Choose a tag to compare

Changelog:

  • Added -DNO_ASSERT_RELEASE_EVAL to make ASSERT behave more like traditional C assert
  • Renamed library's namespace to libassert::
  • Added customization point for libassert::detail::stringify
  • Added support for assertions in constexpr functions
  • Some internal refactoring, bug fixes, and typo corrections
  • Better cmake, big thanks to @qdewaghe!