//! named accounts for synthesized data accounts for bank state, etc. //! //! this account carries history about stake activations and de-activations //! pub use crate::stake_history::StakeHistory; use crate::sysvar::Sysvar; crate::declare_sysvar_id!("SysvarStakeHistory1111111111111111111111111", StakeHistory); impl Sysvar for StakeHistory { // override fn size_of() -> usize { // hard-coded so that we don't have to construct an empty 16392 // golden, update if MAX_ENTRIES changes } } #[cfg(test)] mod tests { use super::*; use crate::stake_history::*; #[test] fn test_size_of() { let mut stake_history = StakeHistory::default(); for i in 0..MAX_ENTRIES as u64 { stake_history.add( i, StakeHistoryEntry { activating: i, ..StakeHistoryEntry::default() }, ); } assert_eq!( bincode::serialized_size(&stake_history).unwrap() as usize, StakeHistory::size_of() ); } #[test] fn test_create_account() { let mut stake_history = StakeHistory::default(); for i in 0..MAX_ENTRIES as u64 + 1 { stake_history.add( i, StakeHistoryEntry { activating: i, ..StakeHistoryEntry::default() }, ); } assert_eq!(stake_history.len(), MAX_ENTRIES); assert_eq!(stake_history.iter().map(|entry| entry.0).min().unwrap(), 1); assert_eq!(stake_history.get(&0), None); assert_eq!( stake_history.get(&1), Some(&StakeHistoryEntry { activating: 1, ..StakeHistoryEntry::default() }) ); } }