test_help-rs 0.2.1

Test helpers for Rust
Documentation
//! Test helpers for Rust.
//!
//! **test_help-rs** provides assertion macros and evaluators for
//! approximate equality of floating-point scalars and vectors in unit
//! tests — filling gaps around `f32` and `f64` comparisons in Rust's stock
//! testing support.
//!
//! Scalar comparisons report exact, approximate, or unequal results. Vector
//! comparisons apply the same evaluator element-wise and also report
//! unequal lengths or the first unequal element.
//!
//! The stock tolerance helpers are [`margin`], [`multiplier`], and
//! [`zero_margin_or_multiplier`]. Custom
//! [`traits::ApproximateEqualityEvaluator`] implementations can provide
//! other comparison strategies.
//!
//! The optional `"nan-equality"` feature treats two `NaN` values as exactly
//! equal in stock comparisons. The `"nightly-constants"` feature enables
//! additional standard-library constant tests and requires a nightly
//! toolchain; it is intended for crate development rather than downstream
//! use.
//!
//! # Installation
//!
//! Reference in **Cargo.toml** in the usual way:
//!
//! ```toml
//! test_help-rs = { version = "0.2.1" }
//! ```
//!
//! # Components
//!
//! ## Macros
//!
//! * [`assert_scalar_eq_approx!`] — scalar approximate equality;
//! * [`assert_scalar_ne_approx!`] — scalar approximate inequality;
//! * [`assert_vector_eq_approx!`] — vector approximate equality;
//! * [`assert_vector_ne_approx!`] — vector approximate inequality;
//!
//! ## Functions
//!
//! * [`margin`] — margin-based
//!   [`traits::ApproximateEqualityEvaluator`];
//! * [`multiplier`] — multiplier-based
//!   [`traits::ApproximateEqualityEvaluator`];
//! * [`zero_margin_or_multiplier`] — combined stock evaluator used by the
//!   two-argument assertion macros;
//! * [`evaluate_scalar_eq_approx`] — scalar comparison without asserting;
//! * [`evaluate_vector_eq_approx`] — vector comparison without asserting;
//!
//! ## Types
//!
//! * [`ComparisonResult`] — outcome of a scalar comparison;
//! * [`VectorComparisonResult`] — outcome of a vector comparison;
//! * [`traits::ApproximateEqualityEvaluator`] — custom comparison strategy;
//! * [`traits::TestableAsF64`] — types usable with the assertion macros
//!   (via [`base_traits::ToF64`]);
//!
//! ## Constants
//!
//! * [`constants::DEFAULT_MARGIN`] and [`constants::DEFAULT_MULTIPLIER`]
//!   — stock tolerance values for the two-argument macros;
//!
//! # Examples
//!
//! ```
//! use test_helpers::{assert_scalar_eq_approx, margin};
//!
//! assert_scalar_eq_approx!(3.0, 3.0001, margin(0.0001));
//! ```
//!
//! See the project [README](https://github.com/synesissoftware/test_help-rs)
//! for further information.

// lib.rs : test_help-rs

#![allow(non_camel_case_types)]
#![cfg_attr(all(test, feature = "nightly-constants"), feature(more_float_constants))]

pub(crate) mod macros;

use crate::macros::declare_and_publish;

declare_and_publish!(comparison_result, ComparisonResult);
declare_and_publish!(vector_comparison_result, VectorComparisonResult);

pub mod constants;
pub mod traits;

#[macro_use]
mod assertions;
#[macro_use]
mod assertions_as_str;
mod internal;
mod utils;

declare_and_publish!(
    api,
    evaluate_scalar_eq_approx,
    evaluate_vector_eq_approx,
    margin,
    multiplier,
    zero_margin_or_multiplier,
);

#[doc(hidden)]
pub use base_traits;

#[cfg(test)]
#[rustfmt::skip]
mod tests;


// ///////////////////////////// end of file //////////////////////////// //