use neurodoom::texture::TextureData;
use neurodoom::wad::Wad;
fn load_wad() -> Vec<u8> {
let path = std::env::var("DOOM_WAD")
.unwrap_or_else(|_| "doom1.wad".to_string());
std::fs::read(&path).unwrap_or_else(|e| panic!("failed to read WAD at {path}: {e}"))
}
#[test]
fn load_textures() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
assert_eq!(texdata.palettes.len(), 14);
assert!(texdata.colormaps.len() >= 32);
assert!(texdata.flats.len() > 0, "no flats loaded");
assert!(texdata.num_flats > 0);
assert!(texdata.textures.len() > 0, "no textures loaded");
}
#[test]
fn palette_valid() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
let pal = &texdata.palettes[0];
let nonzero = pal.iter().filter(|&&b| b != 0).count();
assert!(nonzero > 100, "palette seems mostly black: {nonzero} nonzero bytes");
}
#[test]
fn colormap_brightness() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
let cmap0 = &texdata.colormaps[0];
let identity_count = (0..256u16).filter(|&i| cmap0[i as usize] == i as u8).count();
assert!(identity_count > 200, "colormap 0 should be near-identity, got {identity_count}/256");
}
#[test]
fn texture_has_columns() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
let tex = &texdata.textures[0];
assert!(tex.width > 0);
assert!(tex.height > 0);
assert_eq!(tex.data.len(), tex.width as usize * tex.height as usize);
for c in 0..tex.width as usize {
assert_eq!(tex.column(c).len(), tex.height as usize);
}
}
#[test]
fn flat_name_lookup() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
let name = *b"FLOOR0_1";
let idx = texdata.flat_num_for_name(&name);
assert!(idx >= 0, "FLOOR0_1 flat not found");
}
#[test]
fn texture_name_lookup() {
let data = load_wad();
let wad = Wad::parse(&data).unwrap();
let texdata = TextureData::load(&wad).unwrap();
let name = *b"STARTAN3";
let idx = texdata.texture_num_for_name(&name);
assert!(idx > 0, "STARTAN3 texture not found");
}