From 974f88e5aeee56188d76658aa8a528072d59c380 Mon Sep 17 00:00:00 2001 From: ARCJ137442 <61109168+ARCJ137442@users.noreply.github.com> Date: Thu, 13 Jun 2024 00:27:24 +0800 Subject: [PATCH] =?UTF-8?q?test:=20:white=5Fcheck=5Fmark:=20=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E3=80=8C=E8=BE=93=E5=85=A5=E8=BD=AC=E8=AF=91=E5=99=A8?= =?UTF-8?q?=E3=80=8D=E4=BB=A5=E9=80=9A=E8=BF=87=E6=B5=8B=E8=AF=95=EF=BC=88?= =?UTF-8?q?CXinNARS=E3=80=81ONA=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为 CXinNARS 与 ONA 增加对指令 `EXI` 的输入转译:CXinNARS→特殊命令`/q`,ONA→无效输入(强制shell退出) --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/bin/babelnar_cli/config_launcher.rs | 15 ++++++++------- src/bin/babelnar_cli/vm_config.rs | 9 +++++++-- src/cin_implements/cxin_js/translators.rs | 2 ++ src/cin_implements/ona/translators.rs | 2 ++ 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7730324..5538f8f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -74,7 +74,7 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "babel_nar" -version = "0.24.2" +version = "0.24.3" dependencies = [ "anyhow", "clap", diff --git a/Cargo.toml b/Cargo.toml index 0eb7a3e..ebead8d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "babel_nar" -version = "0.24.2" +version = "0.24.3" edition = "2021" description = """ Implementation and application supports of the NAVM model diff --git a/src/bin/babelnar_cli/config_launcher.rs b/src/bin/babelnar_cli/config_launcher.rs index a754a9c..d47876c 100644 --- a/src/bin/babelnar_cli/config_launcher.rs +++ b/src/bin/babelnar_cli/config_launcher.rs @@ -116,6 +116,9 @@ pub fn launch_by_config( Ok((runtime, config)) } +/// 根据「运行时启动参数」启动虚拟机 +/// * 🚩生成、配置、启动虚拟机 +/// * 🎯在「初次启动」与「二次重启」中共用代码 pub fn launch_by_runtime_config(config: &RuntimeConfig) -> Result { // 生成虚拟机 let config_command = &config.command; @@ -196,6 +199,7 @@ pub type TranslatorDict<'a> = &'a [( fn(Cmd) -> Result, fn(String) -> Result, )]; + /// 输入转译器的索引字典 /// * 🚩静态存储映射,后续遍历可有序可无序 pub const TRANSLATOR_DICT: TranslatorDict = &[ @@ -229,6 +233,7 @@ pub const TRANSLATOR_DICT: TranslatorDict = &[ ), ]; +/// 根据名字查找「输入转译器」 pub fn get_input_translator_by_name(cin_name: &str) -> Result> { // 根据「匹配度」的最大值选取 let translator = TRANSLATOR_DICT @@ -239,6 +244,7 @@ pub fn get_input_translator_by_name(cin_name: &str) -> Result Result> { // 根据「匹配度」的最大值选取 let translator = TRANSLATOR_DICT @@ -255,16 +261,11 @@ mod tests { use super::*; use nar_dev_utils::{asserts, f_parallel}; - #[test] - fn t() { - dbg!(format!("{:p}", opennars::input_translate as fn(_) -> _)); - } - - /// 测试 + /// 测试「根据名字查找转译器」 /// * 🚩仅能测试「是否查找成功」,无法具体地比较函数是否相同 /// * 📝函数在被装进[`Box`]后,对原先结构的完整引用就丧失了 #[test] - fn test() { + fn get_translator_by_name() { fn t(name: &str) { asserts! { get_input_translator_by_name(name).is_ok() diff --git a/src/bin/babelnar_cli/vm_config.rs b/src/bin/babelnar_cli/vm_config.rs index 3beeae0..b5d993d 100644 --- a/src/bin/babelnar_cli/vm_config.rs +++ b/src/bin/babelnar_cli/vm_config.rs @@ -774,10 +774,15 @@ pub mod tests { /// * 🎯被重定向到`./executables`,以便启动其下的`.jar`文件 #[test] fn test_read() { - // 使用OpenNARS配置文件的路径作测试 + // * 🚩使用OpenNARS配置文件的路径作测试 let path: PathBuf = config_paths::OPENNARS.into(); let launch_config = read_config_extern(&path).expect("路径读取失败"); - let expected_path = "./executables".into(); + // * 🚩构造预期路径 + let root_path = PathBuf::from("."); + let mut expected_path: PathBuf = "./executables".into(); + LaunchConfig::rebase_relative_path(&root_path, &mut expected_path) + .expect("【2024-06-12 23:53:59】现在应该是绝对路径"); + // * 🚩测试&比对 asserts! { // * 🎯启动命令中的「当前目录」应该被追加到配置自身的路径上 // * ✅即便拼接后路径是`"./src/tests/cli/config\\root/nars/test"`,也和上边的路径相等 diff --git a/src/cin_implements/cxin_js/translators.rs b/src/cin_implements/cxin_js/translators.rs index 3185a70..68a7ea4 100644 --- a/src/cin_implements/cxin_js/translators.rs +++ b/src/cin_implements/cxin_js/translators.rs @@ -39,6 +39,8 @@ pub fn input_translate(cmd: Cmd) -> Result { Cmd::CYC(n) => n.to_string(), // 注释 ⇒ 忽略 | ❓【2024-04-02 22:43:05】可能需要打印,但这样却没法统一IO(到处print的习惯不好) Cmd::REM { .. } => String::new(), + // 退出 ⇒ 特殊命令 | // * 🚩【2024-06-13 00:16:38】最新版本行为 + Cmd::EXI { .. } => "/q".into(), // 其它类型 // * 📌【2024-03-24 22:57:18】基本足够支持 _ => return Err(TranslateError::UnsupportedInput(cmd).into()), diff --git a/src/cin_implements/ona/translators.rs b/src/cin_implements/ona/translators.rs index 961d6d0..8343ee4 100644 --- a/src/cin_implements/ona/translators.rs +++ b/src/cin_implements/ona/translators.rs @@ -76,6 +76,8 @@ pub fn input_translate(cmd: Cmd) -> Result { }, // 注释 ⇒ 忽略 | ❓【2024-04-02 22:43:05】可能需要打印,但这样却没法统一IO(到处print的习惯不好) Cmd::REM { .. } => String::new(), + // 退出 ⇒ 无效输入 | // ! 🚩故意使用ONA中会「报错退出」的输入,强制ONA shell退出(其后不会再接收输入) + Cmd::EXI { .. } => "*quit".into(), // 其它类型 // * 📌【2024-03-24 22:57:18】基本足够支持 _ => return Err(TranslateError::UnsupportedInput(cmd).into()),