simvar_utils 0.3.0

Simulator Utils package
Documentation
  • Coverage
  • 100%
    9 out of 9 items documented2 out of 9 items with examples
  • Size
  • Source code size: 106.06 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 401.4 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 16s Average build duration of successful builds.
  • all releases: 26s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • MoosicBox/MoosicBox
    37 2 109
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • BSteffaniak

MoosicBox Simulation Utilities

Utility functions for simulation testing and cancellation management.

Overview

The MoosicBox Simulation Utilities package provides:

  • Thread Management: Worker thread ID tracking and management
  • Cancellation Tokens: Local and global simulation cancellation
  • Async Utilities: Future cancellation support
  • Testing Support: Simulation state management for testing

Features

Thread Management

  • Worker Thread IDs: Unique thread identification for simulation workers
  • Thread-Local Storage: Per-thread state management

Cancellation Management

  • Local Cancellation: Per-thread simulation cancellation
  • Global Cancellation: System-wide simulation termination
  • Token Reset: Cancellation token lifecycle management

Async Support

  • Future Cancellation: Run futures until simulation cancellation
  • Cancellation Detection: Check if simulation is cancelled
  • Graceful Shutdown: Clean simulation termination

Installation

Add this to your Cargo.toml:

[dependencies]
simvar_utils = { path = "../simvar/utils" }

Usage

Thread Management

use simvar_utils::worker_thread_id;

// Get unique thread ID for current worker
let thread_id = worker_thread_id();
println!("Worker thread ID: {}", thread_id);

Cancellation Management

use simvar_utils::{
    cancel_simulation, cancel_global_simulation,
    is_simulator_cancelled, is_global_simulator_cancelled,
    reset_simulator_cancellation_token, reset_global_simulator_cancellation_token
};

// Check cancellation status
if is_simulator_cancelled() || is_global_simulator_cancelled() {
    println!("Simulation cancelled");
    return;
}

// Cancel local simulation
cancel_simulation();

// Cancel global simulation
cancel_global_simulation();

// Reset local cancellation token for new simulation
reset_simulator_cancellation_token();

// Reset global cancellation token for new simulation
reset_global_simulator_cancellation_token();

Running Futures with Cancellation

use simvar_utils::run_until_simulation_cancelled;

// Run future until simulation is cancelled
let result = run_until_simulation_cancelled(async {
    // Your simulation work here
    simulate_work().await
}).await;

match result {
    Some(output) => println!("Simulation completed: {:?}", output),
    None => println!("Simulation was cancelled"),
}

Dependencies

  • Switchy: Threading and cancellation utilities
  • Standard Library: Thread-local storage and atomic operations

Integration

This package is designed for use with:

  • MoosicBox Simvar Harness: Simulation testing framework
  • Test Suites: Deterministic testing with cancellation
  • Background Workers: Cancellable async operations