use light_token_interface::{
state::{calculate_token_account_size, CompressedOnlyExtension, ExtensionStructConfig},
BASE_TOKEN_ACCOUNT_SIZE,
};
#[test]
fn test_ctoken_account_size_calculation() {
assert_eq!(
calculate_token_account_size(None).unwrap(),
BASE_TOKEN_ACCOUNT_SIZE as usize
);
let pausable_size =
calculate_token_account_size(Some(&[ExtensionStructConfig::PausableAccount(())])).unwrap();
assert_eq!(pausable_size, 172);
let perm_delegate_size =
calculate_token_account_size(Some(&[ExtensionStructConfig::PermanentDelegateAccount(())]))
.unwrap();
assert_eq!(perm_delegate_size, 172);
let both_size = calculate_token_account_size(Some(&[
ExtensionStructConfig::PausableAccount(()),
ExtensionStructConfig::PermanentDelegateAccount(()),
]))
.unwrap();
assert_eq!(both_size, 173);
let transfer_fee_size =
calculate_token_account_size(Some(&[ExtensionStructConfig::TransferFeeAccount(())]))
.unwrap();
assert_eq!(transfer_fee_size, 180);
let transfer_hook_size =
calculate_token_account_size(Some(&[ExtensionStructConfig::TransferHookAccount(())]))
.unwrap();
assert_eq!(transfer_hook_size, 173);
let all_size = calculate_token_account_size(Some(&[
ExtensionStructConfig::PausableAccount(()),
ExtensionStructConfig::PermanentDelegateAccount(()),
ExtensionStructConfig::TransferFeeAccount(()),
ExtensionStructConfig::TransferHookAccount(()),
]))
.unwrap();
assert_eq!(all_size, 184);
}
#[test]
fn test_compressed_only_extension_size() {
use light_token_interface::state::ExtensionStruct;
use light_zero_copy::ZeroCopyNew;
assert_eq!(
CompressedOnlyExtension::LEN,
17,
"CompressedOnlyExtension should be 17 bytes (8 + 8 + 1)"
);
let config = ExtensionStructConfig::CompressedOnly(());
assert_eq!(
ExtensionStruct::byte_len(&config).unwrap(),
1 + CompressedOnlyExtension::LEN,
"ExtensionStruct byte_len should be 1 + LEN"
);
}