#![expect(missing_docs, reason = "This is a test module")]
#![allow(dead_code, unused_variables, unused_assignments, reason = "compile-only derive test")]
use thread_aware::ThreadAware;
use thread_aware::affinity::pinned_affinities;
#[derive(ThreadAware)]
struct Simple {
a: i32,
b: Option<String>,
}
#[derive(ThreadAware)]
struct Tuple(i64, #[thread_aware(skip)] i64);
#[derive(ThreadAware)]
enum E {
A,
B(i32, i32),
C {
x: i32,
#[thread_aware(skip)]
y: i32,
},
}
#[test]
fn derive_compiles_and_runs() {
let affinities = pinned_affinities(&[2]);
let d0 = Some(affinities[0]);
let d1 = affinities[1];
let mut s = Simple {
a: 10,
b: Some("x".to_string()),
};
thread_aware::ThreadAware::relocate(&mut s, d0, d1);
let mut t = Tuple(5, 6);
thread_aware::ThreadAware::relocate(&mut t, d0, d1);
assert_eq!(t.0, 5);
assert_eq!(t.1, 6);
let mut e = E::C { x: 1, y: 2 };
thread_aware::ThreadAware::relocate(&mut e, d0, d1);
}