// ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ //██Let me play the world's tiniest piano for you. ██ //█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ //█▙▙█▙▙▙█▙▙█▙▙▙█▙▙█▙▙▙█▙▙█▙▙▙█▙▙█▙▙▙█▙▙█▙▙▙█▙▙█▙▙▙██ //█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ //███████████████████████████████████████████████████ //█ ▀ ▀ ▀ █ #![allow(unused)] #![allow(clippy::unit_arg)] #![feature(adt_const_params)] #![feature(associated_type_defaults)] #![feature(if_let_guard)] #![feature(impl_trait_in_assoc_type)] #![feature(type_alias_impl_trait)] #![feature(trait_alias)] #![feature(type_changing_struct_update)] #![feature(let_chains)] #![feature(closure_lifetime_binder)] /// Standard result type. pub type Usually = std::result::Result>; /// Standard optional result type. pub type Perhaps = std::result::Result, Box>; pub use ::tek_engine:: *; pub use ::tek_device::{self, *}; pub use ::tengri::dsl::*; pub use ::tengri::input::*; pub use ::tengri::output::*; pub use ::tengri::tui::*; pub use ::tengri::tui::ratatui; pub use ::tengri::tui::ratatui::prelude::buffer::Cell; pub use ::tengri::tui::ratatui::prelude::Color::{self, *}; pub use ::tengri::tui::ratatui::prelude::{Style, Stylize, Buffer, Modifier}; pub use ::tengri::tui::crossterm; pub use ::tengri::tui::crossterm::event::{Event, KeyCode::{self, *}}; pub(crate) use std::path::Path; pub(crate) use std::sync::{Arc, RwLock}; pub(crate) use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering::Relaxed}; mod api; pub use self::api::*; mod audio; pub use self::audio::*; mod config; pub use self::config::*; mod model; pub use self::model::*; mod view; pub use self::view::*; #[cfg(test)] #[test] fn test_model () { let mut app = App::default(); let _ = app.clip(); let _ = app.toggle_loop(); } #[cfg(test)] #[test] fn test_model_scene () { let mut app = App::default(); let _ = app.scene_longest(); let _ = app.scene(); let _ = app.scene_mut(); let _ = app.scene_add(None, None); app.scene_del(0); let scene = Scene::default(); let _ = scene.pulses(); let _ = scene.is_playing(&[]); } #[cfg(test)] #[test] fn test_view_clock () { let _ = button_play_pause(true); let mut app = App::default(); let _ = app.view_transport(); let _ = app.view_status(); let _ = app.update_clock(); } #[cfg(test)] #[test] fn test_view_layout () { let _ = button_2("", "", true); let _ = button_2("", "", false); let _ = button_3("", "", "", true); let _ = button_3("", "", "", false); let _ = heading("", "", 0, "", true); let _ = heading("", "", 0, "", false); let _ = wrap(Reset, Reset, ""); } #[cfg(test)] mod test_view_meter { use super::*; use proptest::prelude::*; #[test] fn test_view_meter () { let _ = view_meter("", 0.0); let _ = view_meters(&[0.0, 0.0]); } proptest! { #[test] fn proptest_view_meter ( label in "\\PC*", value in f32::MIN..f32::MAX ) { let _ = view_meter(&label, value); } #[test] fn proptest_view_meters ( value1 in f32::MIN..f32::MAX, value2 in f32::MIN..f32::MAX ) { let _ = view_meters(&[value1, value2]); } } } #[cfg(test)] #[test] fn test_view_iter () { let mut app = App::default(); app.editor = Some(Default::default()); let _: Vec<_> = app.inputs_with_sizes().collect(); let _: Vec<_> = app.outputs_with_sizes().collect(); let _: Vec<_> = app.tracks_with_sizes().collect(); let _: Vec<_> = app.scenes_with_sizes(true, 10, 10).collect(); //let _: Vec<_> = app.scenes_with_colors(true, 10).collect(); //let _: Vec<_> = app.scenes_with_track_colors(true, 10, 10).collect(); } #[cfg(test)] #[test] fn test_view_sizes () { let app = App::default(); let _ = app.w(); let _ = app.w_sidebar(); let _ = app.w_tracks_area(); let _ = app.h(); let _ = app.h_tracks_area(); let _ = app.h_inputs(); let _ = app.h_outputs(); let _ = app.h_scenes(); } #[cfg(test)] #[test] fn test_midi_edit () { let editor = MidiEditor::default(); let mut editor = MidiEditor { mode: PianoHorizontal::new(Some(&Arc::new(RwLock::new(MidiClip::stop_all())))), size: Default::default(), //keys: Default::default(), }; let _ = editor.put_note(true); let _ = editor.put_note(false); let _ = editor.clip_status(); let _ = editor.edit_status(); struct TestEditorHost(Option); has_editor!(|self: TestEditorHost|{ editor = self.0; editor_w = 0; editor_h = 0; is_editing = false; }); let mut host = TestEditorHost(Some(editor)); let _ = host.editor(); let _ = host.editor_mut(); let _ = host.is_editing(); let _ = host.editor_w(); let _ = host.editor_h(); }