use logic::data::{table, LogicDataRef, LogicDataTables}; use std::path::Path; use std::sync::Arc; fn tables() { let root = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../assets"); LogicDataTables::install(Arc::new( LogicDataTables::load_from_dir(&root).expect("tables"), )); } #[test] fn single_value_scaled() { tables(); let spear = LogicDataRef::by_name(table::PROJECTILES, "SpearGoblinProjectile") .as_projectile() .expect("SpearGoblinProjectile"); assert_eq!(spear.damage(0), 24); assert_eq!(spear.damage(2), 29, "the level that crashed the client"); assert_eq!(spear.damage(6), 42, "the bot's deck level"); } #[test] fn tower_scale_percent() { tables(); let princess = LogicDataRef::by_name(table::BUILDINGS, "PrincessTower") .as_character() .expect("PrincessTower"); let base = princess.hitpoints(0); assert!(base > 0); assert_eq!(princess.hitpoints(1), base * 109 / 100); assert_eq!(princess.hitpoints(2), base * (109 * 109 / 100) / 100); let king = LogicDataRef::by_name(table::BUILDINGS, "KingTower") .as_character() .expect("KingTower"); let king_base = king.hitpoints(0); assert_eq!(king.hitpoints(1), king_base * 108 / 100); } #[test] fn card_scale_percent() { tables(); let knight = LogicDataRef::by_name(table::CHARACTERS_COMBINED, "Knight") .as_character() .expect("Knight"); let base = knight.hitpoints(0); assert_eq!(knight.hitpoints(1), base * 110 / 100); assert_eq!(knight.hitpoints(3), base * 133 / 100); }