use serial_test::serial;
use singleton_registry::define_registry;
use std::sync::Arc;
define_registry!(primitives);
#[test]
#[serial]
fn test_register_and_retrieve_integer() {
primitives::register(42i32);
let value: Arc<i32> = primitives::get().unwrap();
assert_eq!(*value, 42);
}
#[test]
#[serial]
fn test_register_and_retrieve_string() {
primitives::register("Hello, World!".to_string());
let value: Arc<String> = primitives::get().unwrap();
assert_eq!(&**value, "Hello, World!");
}
#[test]
#[serial]
fn test_register_and_retrieve_str_reference() {
primitives::register("some static string 123");
let value: Arc<&str> = primitives::get().unwrap();
assert_eq!(*value, "some static string 123");
}
#[test]
#[serial]
fn test_get_cloned_string() {
primitives::register("some cloned value 123".to_string());
let value: String = primitives::get_cloned().unwrap();
assert_eq!(value, "some cloned value 123");
}
#[test]
#[serial]
fn test_register_and_retrieve_float() {
primitives::register(4.63f64);
let value: Arc<f64> = primitives::get().unwrap();
assert_eq!(*value, 4.63);
}
#[test]
#[serial]
fn test_register_and_retrieve_boolean() {
primitives::register(true);
let value: Arc<bool> = primitives::get().unwrap();
assert!(*value);
}
#[test]
#[serial]
fn test_overwrite_same_type() {
primitives::register(100u32);
primitives::register(200u32);
let value: Arc<u32> = primitives::get().unwrap();
assert_eq!(*value, 200);
}
#[test]
#[serial]
fn test_contains_check() {
primitives::register(999i64);
assert!(primitives::contains::<i64>().unwrap());
assert!(!primitives::contains::<i8>().unwrap());
}
#[test]
#[serial]
fn test_register_arc_directly() {
let value = Arc::new(777u16);
primitives::register_arc(value.clone());
let retrieved: Arc<u16> = primitives::get().unwrap();
assert_eq!(*retrieved, 777);
}