oct 0.36.2

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

//! Tests for [`IntoOctets`].

#![cfg(all(test, miri))]

use core::ptr;
use oct::{Immutable, Init, IntoOctets};

#[repr(C)]
struct Foo(
	pub u64,
	pub u32,
	pub u32,
	pub u16,
	pub u16,
	pub u16,
	pub u16,
	pub u8,
	pub u8,
	pub u8,
	pub u8,
	pub u8,
	pub u8,
	pub u8,
	pub u8,
);

unsafe impl Immutable for Foo {}

unsafe impl Init for Foo {}

#[test]
fn test_foo_as_octets() {
	assert_eq!(
		size_of::<Foo>(),
		32,
	);

	static DATA: &Foo = &Foo(
		u64::from_be(0x1F_1E_1D_1C_1B_1A_19_18),
		u32::from_be(0x17_16_15_14),
		u32::from_be(0x13_12_11_10),
		u16::from_be(0x0F_0E),
		u16::from_be(0x0D_0C),
		u16::from_be(0x0B_0A),
		u16::from_be(0x09_08),
		u8::from_be(0x07),
		u8::from_be(0x06),
		u8::from_be(0x05),
		u8::from_be(0x04),
		u8::from_be(0x03),
		u8::from_be(0x02),
		u8::from_be(0x01),
		u8::from_be(0x00),
	);

	let octets = DATA.as_octets();

	assert_eq!(
		octets.len(),
		size_of_val(DATA),
	);

	assert_eq!(
		octets.as_ptr().addr(),
		ptr::from_ref(DATA).addr(),
	);

	assert_eq!(
		octets,
		&[
			0x1F,
			0x1E,
			0x1D,
			0x1C,
			0x1B,
			0x1A,
			0x19,
			0x18,
			0x17,
			0x16,
			0x15,
			0x14,
			0x13,
			0x12,
			0x11,
			0x10,
			0x0F,
			0x0E,
			0x0D,
			0x0C,
			0x0B,
			0x0A,
			0x09,
			0x08,
			0x07,
			0x06,
			0x05,
			0x04,
			0x03,
			0x02,
			0x01,
			0x00,
		],
	);
}