#![forbid(unsafe_code)]
#![allow(dead_code)]
#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
pub mod cell_note;
pub mod codepage;
pub mod compatibility_profile;
pub mod duration;
pub mod effect;
pub mod envelope;
pub mod fixed;
pub mod instr_default;
pub mod instr_ekn;
pub mod instr_midi;
pub mod instr_opl;
pub mod instr_robsid;
pub mod instr_sid;
pub mod instrument;
pub mod instrument_behavior;
pub mod keyboard;
pub mod mix_plugin;
pub mod module;
pub mod period_helper;
pub mod daw;
pub mod edit;
pub mod pitch;
pub mod sample;
pub mod track_unit;
pub mod vibrato;
pub mod voice_setup;
pub mod waveform;
pub mod xorshift;
pub mod prelude;
#[cfg(any(
feature = "import_mod",
feature = "import_xm",
feature = "import_s3m",
feature = "import_it",
feature = "import_sid",
))]
pub mod import;
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(42, 42);
}
#[cfg(feature = "import_xm")]
#[test]
fn load_empty_xm() {
let data = include_bytes!("../examples/empty.xm");
let module = crate::module::Module::load_xm(data);
assert!(
module.is_ok(),
"Failed to load empty.xm: {:?}",
module.err()
);
}
#[cfg(feature = "import_xm")]
#[test]
fn load_note_xm() {
let data = include_bytes!("../examples/note.xm");
let module = crate::module::Module::load_xm(data).expect("Failed to load note.xm");
assert!(
!module.instrument.is_empty(),
"Module should have instruments"
);
assert!(
!module.timeline_map.entries.is_empty(),
"timeline_map should be populated"
);
assert!(!module.tracks.is_empty(), "tracks should be populated");
module
.verify_layers_consistent()
.expect("DAW layer should be consistent after import");
}
#[cfg(feature = "import_sid")]
#[test]
fn load_sid_commando_has_consistent_layer() {
let sid = crate::import::sid::sid_module::SidModule::get_sid_commando();
let modules = sid.to_modules(false);
assert!(
!modules.is_empty(),
"SID should produce at least one Module"
);
for (i, m) in modules.iter().enumerate() {
assert!(
!m.tracks.is_empty(),
"SID module {} should have tracks after build_timeline_layer",
i
);
m.verify_layers_consistent()
.unwrap_or_else(|e| panic!("SID module {} inconsistent: {:?}", i, e));
}
}
#[cfg(feature = "import_xm")]
#[test]
fn load_empty_xm_has_consistent_layer() {
let data = include_bytes!("../examples/empty.xm");
let module = crate::module::Module::load_xm(data).expect("load");
module
.verify_layers_consistent()
.expect("DAW layer should be consistent on empty.xm");
}
#[cfg(feature = "import_xm")]
#[test]
fn load_xi_instrument() {
let data = include_bytes!("../examples/instr.xi");
let xmi = crate::import::xm::xi_instrument::XiInstrument::load(data);
assert!(xmi.is_ok(), "Failed to load instr.xi: {:?}", xmi.err());
}
#[cfg(feature = "import_xm")]
#[test]
fn autodetect_xm() {
let data = include_bytes!("../examples/note.xm");
let module = crate::module::Module::load(data);
assert!(module.is_ok(), "Autodetect should find XM format");
}
}