oct 0.36.2

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

//! Tests for [`Outlay`].

#![cfg(test)]

use core::alloc::Layout;
use oct::Outlay;

#[test]
fn test_outlay() {
	assert!(<u8>::classify_size(0).is_none());
	assert!(<u8>::classify_size(1).is_some());

	assert_eq!(<(u128, u128)>::classify_size(31), None);
	assert_eq!(<(u128, u128)>::classify_size(32), Some(()));
	assert_eq!(<(u128, u128)>::classify_size(64), Some(()));

	assert_eq!(<[i32]>::classify_size(0), Some(0));
	assert_eq!(<[i32]>::classify_size(1), None);
	assert_eq!(<[i32]>::classify_size(2), None);
	assert_eq!(<[i32]>::classify_size(3), None);
	assert_eq!(<[i32]>::classify_size(4), Some(1));

	assert_eq!(str::classify_size(0), Some(0));
	assert_eq!(str::classify_size(1), Some(1));
	assert_eq!(str::classify_size(2), Some(2));
	assert_eq!(str::classify_size(3), Some(3));
	assert_eq!(str::classify_size(4), Some(4));

	assert_eq!(<[()]>::classify_size(0), None);
	assert_eq!(<[()]>::classify_size(1), None);
	assert_eq!(<[()]>::classify_size(2), None);
	assert_eq!(<[()]>::classify_size(3), None);
	assert_eq!(<[()]>::classify_size(4), None);

	assert_eq!(
		<i8>::layout_for_metadata(()),
		Ok(Layout::new::<i8>()),
	);

	assert_eq!(
		<[i8; 8]>::layout_for_metadata(()),
		Layout::array::<i8>(8),
	);

	assert_eq!(
		<[i8]>::layout_for_metadata(8),
		Layout::array::<i8>(8),
	);

	<[i8]>::layout_for_metadata(isize::MAX as usize).unwrap();
	<[i8]>::layout_for_metadata(isize::MAX as usize + 1).unwrap_err();

	assert!(<i32>::ptr_dangling_with_metadata(()).is_aligned());
	assert!(!<i32>::ptr_dangling_with_metadata(()).is_null());

	assert_eq!(<[i32]>::ptr_dangling_with_metadata(0).addr() % align_of::<i32>(), 0);
	assert!(!<[i32]>::ptr_dangling_with_metadata(0).is_null());
}