bevy_alchemy 0.5.0

An experimental, status effects-as-entities system for Bevy.
Documentation
//! Tests the behaviour of timers for each [`TimerMergeMode`].

use bevy_alchemy::*;
use std::time::Duration;

#[test]
fn merge_replace() {
    let mut first = Lifetime::from_seconds(1.0).with_mode(TimerMergeMode::Replace);
    let second = Lifetime::from_seconds(2.0).with_mode(TimerMergeMode::Replace);
    first.merge(&second);

    assert_eq!(first, second);
}

#[test]
fn merge_keep() {
    let first = Lifetime::from_seconds(1.0).with_mode(TimerMergeMode::Keep);
    let second = Lifetime::from_seconds(2.0).with_mode(TimerMergeMode::Keep);
    let mut result = first.clone();
    result.merge(&second);

    assert_eq!(result, first);
}

#[test]
fn merge_fraction() {
    let first = Lifetime::from_seconds(1.0).with_mode(TimerMergeMode::Fraction);
    let second = Lifetime::from_seconds(2.0).with_mode(TimerMergeMode::Fraction);
    let mut result = first.clone();
    result.merge(&second);

    assert_eq!(result, second);
}

#[test]
fn merge_max() {
    let first = Lifetime::from_seconds(1.0).with_mode(TimerMergeMode::Max);
    let mut second = Lifetime::from_seconds(3.0).with_mode(TimerMergeMode::Max);
    second.merge(&first);
    let third = Lifetime::from_seconds(2.0).with_mode(TimerMergeMode::Max);

    let mut result = third.clone();
    result.merge(&second);

    assert_eq!(result, second);
}

#[test]
fn merge_sum() {
    let first = Lifetime::from_seconds(1.0).with_mode(TimerMergeMode::Sum);
    let mut second = Lifetime::from_seconds(3.0).with_mode(TimerMergeMode::Sum);
    second.merge(&first);

    let mut result = Lifetime::from_seconds(2.0).with_mode(TimerMergeMode::Sum);
    result.merge(&second);

    assert_eq!(result.timer.duration(), Duration::from_secs_f32(6.0));
}