oct 0.35.0

Octonary transcodings.
Documentation
// Copyright 2024-2026 Gabriel Bjørnager Jensen.
//
// SPDX: MIT OR Apache-2.0

//! Tests for [`MaxSerialisedSize`].

#![cfg(test)]

#[cfg(feature = "proc_macro")]
use core::mem::ManuallyDrop;

#[cfg(feature = "proc_macro")]
use oct::serdes::MaxSerialisedSize;

#[cfg(feature = "proc_macro")]
#[test]
fn test_derive_max_serialised_size() {
	#[derive(MaxSerialisedSize)]
	struct StructUnit;

	#[derive(MaxSerialisedSize)]
	struct StructNamed {
		_raw_name: [u8; 16],

		_birthday: u64,
	}

	#[derive(MaxSerialisedSize)]
	struct StructUnnamed(
		#[expect(unused)]
		[f64; 6],
	);

	#[expect(unused)]
	#[derive(MaxSerialisedSize)]
	enum Enum {
		Unit,

		Named {
			named: StructNamed,
		},

		Unnamed(StructUnnamed),
	}

	#[derive(MaxSerialisedSize)]
	union Union<T: MaxSerialisedSize> {
		_null: ManuallyDrop<[T; 0]>,

		_single: ManuallyDrop<[T; 1]>,

		_double: ManuallyDrop<[T; 2]>,
	}

	assert_eq!(StructUnit::MAX_SERIALISED_SIZE,    0);
	assert_eq!(StructNamed::MAX_SERIALISED_SIZE,   24);
	assert_eq!(StructUnnamed::MAX_SERIALISED_SIZE, 48);
	assert_eq!(Enum::MAX_SERIALISED_SIZE,          49);
	assert_eq!(Union::<u128>::MAX_SERIALISED_SIZE, 32);
}