extern crate alloc;
use crate::sample_info::SampleInfo;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Sample<T> {
pub data: T,
pub info: SampleInfo,
}
impl<T> Sample<T> {
#[must_use]
pub fn new(data: T, info: SampleInfo) -> Self {
Self { data, info }
}
#[must_use]
pub fn is_valid(&self) -> bool {
self.info.valid_data
}
#[must_use]
pub fn info(&self) -> &SampleInfo {
&self.info
}
}
#[cfg(test)]
#[allow(clippy::expect_used, clippy::unwrap_used)]
mod tests {
use super::*;
use crate::instance_handle::InstanceHandle;
use crate::sample_info::{InstanceStateKind, SampleStateKind, ViewStateKind};
use crate::time::Time;
#[test]
fn sample_new_holds_data_and_info() {
let info = SampleInfo::new_alive(
InstanceHandle::from_raw(1),
InstanceHandle::from_raw(2),
Time::new(10, 0),
);
let s = Sample::new(42u32, info);
assert_eq!(s.data, 42);
assert_eq!(s.info().instance_handle, InstanceHandle::from_raw(1));
assert!(s.is_valid());
}
#[test]
fn sample_with_invalid_data_marker() {
let info = SampleInfo {
valid_data: false,
instance_state: InstanceStateKind::NotAliveDisposed,
..SampleInfo::default()
};
let s = Sample::new(0u32, info);
assert!(!s.is_valid());
assert_eq!(s.info.instance_state, InstanceStateKind::NotAliveDisposed);
}
#[test]
fn sample_states_in_info_default() {
let s = Sample::new((), SampleInfo::default());
assert_eq!(s.info.sample_state, SampleStateKind::NotRead);
assert_eq!(s.info.view_state, ViewStateKind::New);
}
}