From 025755e92dda78de93970f9c333731907e2e0d9b Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Sun, 19 Nov 2023 23:38:59 +1100 Subject: [PATCH 01/53] test scripts --- .github/workflows/check.yml | 41 +++++++++++++++++++-- crates/byondapi-rs-test/tests/test.rs | 1 - test_byond.sh => tools/setup_byond_linux.sh | 0 tools/setup_byond_windows.sh | 24 ++++++++++++ 4 files changed, 62 insertions(+), 4 deletions(-) rename test_byond.sh => tools/setup_byond_linux.sh (100%) create mode 100644 tools/setup_byond_windows.sh diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 72b73c0..9868dd0 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -55,7 +55,7 @@ jobs: command: fmt args: --all -- --check # TODO: write linux tests - run_test: + run_test_windows: name: Run test runs-on: windows-latest steps: @@ -72,10 +72,10 @@ jobs: uses: actions/cache@v3 with: path: ~/BYOND - key: linux-byond + key: windows-byond - name: Set up byond - run: bash ./test_byond.sh + run: bash ./tools/setup_byond_windows.sh - name: Run tests uses: actions-rs/cargo@v1 @@ -83,3 +83,38 @@ jobs: toolchain: stable command: test args: test_byondapi_with_dreamdaemon --target i686-pc-windows-msvc + + run_test_linux: + name: Run test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Toolchains + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: i686-unknown-linux-gnu + + - name: Install g++ multilib + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install build-essential g++-multilib libc6-i386 libstdc++6:i386 + + - name: Restore BYOND cache + uses: actions/cache@v3 + with: + path: ~/BYOND + key: linux-byond + + - name: Set up byond + run: bash ./tools/setup_byond_linux.sh + + - name: Run tests + uses: actions-rs/cargo@v1 + with: + toolchain: stable + command: test + args: test_byondapi_with_dreamdaemon --target i686-unknown-linux-gnu diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 6176193..4aacb3d 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -6,7 +6,6 @@ use std::{ use tempfile::TempDir; #[test] -#[cfg(windows)] fn test_byondapi_with_dreamdaemon() { let dll = build_dylib(); compile(); diff --git a/test_byond.sh b/tools/setup_byond_linux.sh similarity index 100% rename from test_byond.sh rename to tools/setup_byond_linux.sh diff --git a/tools/setup_byond_windows.sh b/tools/setup_byond_windows.sh new file mode 100644 index 0000000..740feb0 --- /dev/null +++ b/tools/setup_byond_windows.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -euo pipefail + +export BYOND_MAJOR=515 +export BYOND_MINOR=1620 + +if [ -d "$HOME/BYOND/byond/bin" ] && grep -Fxq "${BYOND_MAJOR}.${BYOND_MINOR}" $HOME/BYOND/version.txt; +then + echo "Using cached directory." +else + echo "Setting up BYOND." + rm -rf "$HOME/BYOND" + mkdir -p "$HOME/BYOND" + cd "$HOME/BYOND" + curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip + unzip byond.zip + rm byond.zip + cd byond + echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" + cd ~/ +fi +mkdir -p "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" +cp -r "$HOME/BYOND/byond/bin" "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" +echo "Written byond bin to $GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" From afe9b0f5396b4f36347ef6ab1c33f2e31db9fe17 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Sun, 19 Nov 2023 23:43:10 +1100 Subject: [PATCH 02/53] force-check From 5cadf3a5d2f6f11295ab4171d8dfdd614eb63043 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Sun, 19 Nov 2023 23:43:19 +1100 Subject: [PATCH 03/53] fuck --- .github/workflows/check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9868dd0..f675abb 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -56,7 +56,7 @@ jobs: args: --all -- --check # TODO: write linux tests run_test_windows: - name: Run test + name: Run test (Windows) runs-on: windows-latest steps: - name: Checkout @@ -85,7 +85,7 @@ jobs: args: test_byondapi_with_dreamdaemon --target i686-pc-windows-msvc run_test_linux: - name: Run test + name: Run test (Ubuntu) runs-on: ubuntu-latest steps: - name: Checkout From eeba3403c55a73e644fb3c470c214ded69d732cc Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Sun, 19 Nov 2023 23:49:52 +1100 Subject: [PATCH 04/53] oops --- tools/setup_byond_linux.sh | 2 +- tools/setup_byond_windows.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/setup_byond_linux.sh b/tools/setup_byond_linux.sh index 601ab96..740feb0 100644 --- a/tools/setup_byond_linux.sh +++ b/tools/setup_byond_linux.sh @@ -12,7 +12,7 @@ else rm -rf "$HOME/BYOND" mkdir -p "$HOME/BYOND" cd "$HOME/BYOND" - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond.zip" -o byond.zip + curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip unzip byond.zip rm byond.zip cd byond diff --git a/tools/setup_byond_windows.sh b/tools/setup_byond_windows.sh index 740feb0..601ab96 100644 --- a/tools/setup_byond_windows.sh +++ b/tools/setup_byond_windows.sh @@ -12,7 +12,7 @@ else rm -rf "$HOME/BYOND" mkdir -p "$HOME/BYOND" cd "$HOME/BYOND" - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip + curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond.zip" -o byond.zip unzip byond.zip rm byond.zip cd byond From d02860487ab88ab0780b950046c461bc887df2d5 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Sun, 19 Nov 2023 23:59:54 +1100 Subject: [PATCH 05/53] commands --- .github/workflows/check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index f675abb..4483f80 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -82,7 +82,7 @@ jobs: with: toolchain: stable command: test - args: test_byondapi_with_dreamdaemon --target i686-pc-windows-msvc + args: --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture run_test_linux: name: Run test (Ubuntu) @@ -117,4 +117,4 @@ jobs: with: toolchain: stable command: test - args: test_byondapi_with_dreamdaemon --target i686-unknown-linux-gnu + args: --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture From 88800d96df1802f1f7f0fa301f7a08b07d6963dd Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Mon, 20 Nov 2023 19:19:16 +1100 Subject: [PATCH 06/53] tries again --- .github/workflows/check.yml | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 4483f80..7ec42e3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -22,10 +22,10 @@ jobs: uses: actions/checkout@v4 - name: Setup Toolchains - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: ${{ matrix.target_name }} + targets: ${{ matrix.target_name }} - name: Install g++ multilib (Ubuntu) run: | @@ -54,7 +54,7 @@ jobs: toolchain: stable command: fmt args: --all -- --check - # TODO: write linux tests + run_test_windows: name: Run test (Windows) runs-on: windows-latest @@ -63,10 +63,10 @@ jobs: uses: actions/checkout@v4 - name: Setup Toolchains - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: i686-pc-windows-msvc + targets: i686-pc-windows-msvc - name: Restore BYOND cache uses: actions/cache@v3 @@ -78,11 +78,7 @@ jobs: run: bash ./tools/setup_byond_windows.sh - name: Run tests - uses: actions-rs/cargo@v1 - with: - toolchain: stable - command: test - args: --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture + run: cargo test --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture run_test_linux: name: Run test (Ubuntu) @@ -92,10 +88,10 @@ jobs: uses: actions/checkout@v4 - name: Setup Toolchains - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable - target: i686-unknown-linux-gnu + targets: i686-pc-windows-msvc - name: Install g++ multilib run: | @@ -113,8 +109,4 @@ jobs: run: bash ./tools/setup_byond_linux.sh - name: Run tests - uses: actions-rs/cargo@v1 - with: - toolchain: stable - command: test - args: --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture + run: cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture From b254438beba6b6546ea07b81e9fd9f4dfe5ef719 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Mon, 20 Nov 2023 19:22:26 +1100 Subject: [PATCH 07/53] hmmmhmm --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7ec42e3..543e33b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -91,7 +91,7 @@ jobs: uses: dtolnay/rust-toolchain@stable with: toolchain: stable - targets: i686-pc-windows-msvc + targets: i686-unknown-linux-gnu - name: Install g++ multilib run: | From c796390abab953f5abc86a1395ac27ec663b6626 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Mon, 20 Nov 2023 19:50:41 +1100 Subject: [PATCH 08/53] don't use tempfile anymore --- crates/byondapi-rs-test/Cargo.toml | 1 - crates/byondapi-rs-test/tests/test.rs | 28 +++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/crates/byondapi-rs-test/Cargo.toml b/crates/byondapi-rs-test/Cargo.toml index b3af029..66e746d 100644 --- a/crates/byondapi-rs-test/Cargo.toml +++ b/crates/byondapi-rs-test/Cargo.toml @@ -11,5 +11,4 @@ crate-type = ["cdylib"] [dependencies] byondapi = { path = "../byondapi-rs" } byondapi-sys = { path = "../byondapi-sys" } -tempfile = "3.8.1" test-cdylib = "1.1.0" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 4aacb3d..618cd97 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -3,14 +3,15 @@ use std::{ process::Command, }; -use tempfile::TempDir; - #[test] fn test_byondapi_with_dreamdaemon() { let dll = build_dylib(); compile(); - let tempdir = tempfile::tempdir().expect("Failed to create temporary directory"); + let tempdir = PathBuf::from(std::env::var("OUT_DIR").unwrap().to_owned()).join("byond_test"); + _ = std::fs::remove_dir_all(&tempdir); + std::fs::create_dir_all(&tempdir).unwrap(); + copy_to_tmp(&dll, &tempdir); run_dreamdaemon(&tempdir); check_output_rust(&tempdir); @@ -83,25 +84,24 @@ fn compile() { ) } -fn copy_to_tmp(dll: &Path, tempdir: &TempDir) { - let target = tempdir.path(); - +fn copy_to_tmp(dll: &Path, tempdir: &Path) { std::fs::copy( Path::new(env!("CARGO_MANIFEST_DIR")) .join("dm_project") .join("dm_project.dmb"), - target.join("dm_project.dmb"), + tempdir.join("dm_project.dmb"), ) .expect("Failed to copy dm_project.dmb"); - std::fs::copy(dll, target.join("byondapi_test.dll")).expect("Failed to copy byondapi_test.dll"); + std::fs::copy(dll, tempdir.join("byondapi_test.dll")) + .expect("Failed to copy byondapi_test.dll"); } -fn run_dreamdaemon(tempdir: &TempDir) { +fn run_dreamdaemon(tempdir: &Path) { let dream_daemon = find_dd().expect("To run this integration test you must place a copy of BYOND binaries in dm_project/byond/bin"); let _dd_output = Command::new(dream_daemon) - .current_dir(tempdir.path()) + .current_dir(tempdir) .arg("dm_project.dmb") .arg("-trusted") .output() @@ -110,8 +110,8 @@ fn run_dreamdaemon(tempdir: &TempDir) { // println!("{:#?}", _dd_output); } -fn check_output_dd(tempdir: &TempDir) { - let log = tempdir.path().join("dd_log.txt"); +fn check_output_dd(tempdir: &Path) { + let log = tempdir.join("dd_log.txt"); assert!(log.exists(), "The test did not produce any output"); @@ -125,8 +125,8 @@ fn check_output_dd(tempdir: &TempDir) { ); } -fn check_output_rust(tempdir: &TempDir) { - let log = tempdir.path().join("rust_log.txt"); +fn check_output_rust(tempdir: &Path) { + let log = tempdir.join("rust_log.txt"); if log.exists() { let log = std::fs::read_to_string(log).expect("Failed to read log"); From c25857d74a72f4fac68da5e814f94fcff75776ed Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Mon, 20 Nov 2023 19:55:36 +1100 Subject: [PATCH 09/53] Revert "don't use tempfile anymore" This reverts commit c796390abab953f5abc86a1395ac27ec663b6626. --- crates/byondapi-rs-test/Cargo.toml | 1 + crates/byondapi-rs-test/tests/test.rs | 28 +++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/crates/byondapi-rs-test/Cargo.toml b/crates/byondapi-rs-test/Cargo.toml index 66e746d..b3af029 100644 --- a/crates/byondapi-rs-test/Cargo.toml +++ b/crates/byondapi-rs-test/Cargo.toml @@ -11,4 +11,5 @@ crate-type = ["cdylib"] [dependencies] byondapi = { path = "../byondapi-rs" } byondapi-sys = { path = "../byondapi-sys" } +tempfile = "3.8.1" test-cdylib = "1.1.0" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 618cd97..4aacb3d 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -3,15 +3,14 @@ use std::{ process::Command, }; +use tempfile::TempDir; + #[test] fn test_byondapi_with_dreamdaemon() { let dll = build_dylib(); compile(); - let tempdir = PathBuf::from(std::env::var("OUT_DIR").unwrap().to_owned()).join("byond_test"); - _ = std::fs::remove_dir_all(&tempdir); - std::fs::create_dir_all(&tempdir).unwrap(); - + let tempdir = tempfile::tempdir().expect("Failed to create temporary directory"); copy_to_tmp(&dll, &tempdir); run_dreamdaemon(&tempdir); check_output_rust(&tempdir); @@ -84,24 +83,25 @@ fn compile() { ) } -fn copy_to_tmp(dll: &Path, tempdir: &Path) { +fn copy_to_tmp(dll: &Path, tempdir: &TempDir) { + let target = tempdir.path(); + std::fs::copy( Path::new(env!("CARGO_MANIFEST_DIR")) .join("dm_project") .join("dm_project.dmb"), - tempdir.join("dm_project.dmb"), + target.join("dm_project.dmb"), ) .expect("Failed to copy dm_project.dmb"); - std::fs::copy(dll, tempdir.join("byondapi_test.dll")) - .expect("Failed to copy byondapi_test.dll"); + std::fs::copy(dll, target.join("byondapi_test.dll")).expect("Failed to copy byondapi_test.dll"); } -fn run_dreamdaemon(tempdir: &Path) { +fn run_dreamdaemon(tempdir: &TempDir) { let dream_daemon = find_dd().expect("To run this integration test you must place a copy of BYOND binaries in dm_project/byond/bin"); let _dd_output = Command::new(dream_daemon) - .current_dir(tempdir) + .current_dir(tempdir.path()) .arg("dm_project.dmb") .arg("-trusted") .output() @@ -110,8 +110,8 @@ fn run_dreamdaemon(tempdir: &Path) { // println!("{:#?}", _dd_output); } -fn check_output_dd(tempdir: &Path) { - let log = tempdir.join("dd_log.txt"); +fn check_output_dd(tempdir: &TempDir) { + let log = tempdir.path().join("dd_log.txt"); assert!(log.exists(), "The test did not produce any output"); @@ -125,8 +125,8 @@ fn check_output_dd(tempdir: &Path) { ); } -fn check_output_rust(tempdir: &Path) { - let log = tempdir.join("rust_log.txt"); +fn check_output_rust(tempdir: &TempDir) { + let log = tempdir.path().join("rust_log.txt"); if log.exists() { let log = std::fs::read_to_string(log).expect("Failed to read log"); From 5cf92464da23dc0183f9bd6373ae1da12eefb531 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:29:21 +1100 Subject: [PATCH 10/53] rewrite tests completely --- crates/byondapi-rs-test/Cargo.toml | 2 +- crates/byondapi-rs-test/tests/test.rs | 27 +++++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/crates/byondapi-rs-test/Cargo.toml b/crates/byondapi-rs-test/Cargo.toml index b3af029..5f390ad 100644 --- a/crates/byondapi-rs-test/Cargo.toml +++ b/crates/byondapi-rs-test/Cargo.toml @@ -12,4 +12,4 @@ crate-type = ["cdylib"] byondapi = { path = "../byondapi-rs" } byondapi-sys = { path = "../byondapi-sys" } tempfile = "3.8.1" -test-cdylib = "1.1.0" +cargo_metadata = "0.18.1" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 4aacb3d..04cafac 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -1,6 +1,6 @@ use std::{ path::{Path, PathBuf}, - process::Command, + process::{Command, Output}, }; use tempfile::TempDir; @@ -61,7 +61,30 @@ fn project_dir() -> PathBuf { } fn build_dylib() -> PathBuf { - test_cdylib::build_current_project() + let mut cmd = Command::new(option_env!("CARGO").unwrap_or("cargo")); + parse_output( + cmd.arg("build") + .arg("--message-format=json") + .arg("lib") + .stderr(std::process::Stdio::inherit()) + .output() + .unwrap(), + ) +} +fn parse_output(res: Output) -> PathBuf { + let mut artifact = None; + for message in cargo_metadata::Message::parse_stream(res.stdout.as_slice()) { + match message.unwrap() { + cargo_metadata::Message::CompilerMessage(m) => eprintln!("{}", m), + cargo_metadata::Message::CompilerArtifact(a) => artifact = Some(a), + _ => (), + } + } + + if !res.status.success() { + panic!("Failed to build") + } + artifact.unwrap().filenames[0].clone().into() } fn compile() { From 7d139dcf64fb2d39cdd1561963f71491fcd04955 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:32:07 +1100 Subject: [PATCH 11/53] make this a flag --- crates/byondapi-rs-test/tests/test.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 04cafac..d0ddfb7 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -65,7 +65,7 @@ fn build_dylib() -> PathBuf { parse_output( cmd.arg("build") .arg("--message-format=json") - .arg("lib") + .arg("--lib") .stderr(std::process::Stdio::inherit()) .output() .unwrap(), From 54befe2d5dcddaa543f2327dfcc1ef9f601e17f7 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:44:28 +1100 Subject: [PATCH 12/53] do not do this, the user has to set it --- .cargo/config.toml | 2 -- crates/byondapi-rs-test/Cargo.toml | 1 + crates/byondapi-rs-test/tests/test.rs | 17 +++++++++-------- 3 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml deleted file mode 100644 index 9380186..0000000 --- a/.cargo/config.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build] -target = "i686-pc-windows-msvc" diff --git a/crates/byondapi-rs-test/Cargo.toml b/crates/byondapi-rs-test/Cargo.toml index 5f390ad..ef7a4bf 100644 --- a/crates/byondapi-rs-test/Cargo.toml +++ b/crates/byondapi-rs-test/Cargo.toml @@ -12,4 +12,5 @@ crate-type = ["cdylib"] byondapi = { path = "../byondapi-rs" } byondapi-sys = { path = "../byondapi-sys" } tempfile = "3.8.1" +test-cdylib = "1.1.0" cargo_metadata = "0.18.1" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index d0ddfb7..35b2444 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -62,15 +62,16 @@ fn project_dir() -> PathBuf { fn build_dylib() -> PathBuf { let mut cmd = Command::new(option_env!("CARGO").unwrap_or("cargo")); - parse_output( - cmd.arg("build") - .arg("--message-format=json") - .arg("--lib") - .stderr(std::process::Stdio::inherit()) - .output() - .unwrap(), - ) + + cmd.arg("build").arg("--message-format=json").arg("--lib"); + #[cfg(windows)] + cmd.arg("--target i686-windows-pc-msvc"); + #[cfg(unix)] + cmd.arg("--target i686-unknown-linux-gnu"); + cmd.stderr(std::process::Stdio::inherit()); + parse_output(cmd.output().unwrap()) } + fn parse_output(res: Output) -> PathBuf { let mut artifact = None; for message in cargo_metadata::Message::parse_stream(res.stdout.as_slice()) { From 2f3549a115039493818a7189975fdb8555e56f4f Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:46:27 +1100 Subject: [PATCH 13/53] FUCK --- crates/byondapi-rs-test/Cargo.toml | 1 - crates/byondapi-rs-test/tests/test.rs | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/crates/byondapi-rs-test/Cargo.toml b/crates/byondapi-rs-test/Cargo.toml index ef7a4bf..5f390ad 100644 --- a/crates/byondapi-rs-test/Cargo.toml +++ b/crates/byondapi-rs-test/Cargo.toml @@ -12,5 +12,4 @@ crate-type = ["cdylib"] byondapi = { path = "../byondapi-rs" } byondapi-sys = { path = "../byondapi-sys" } tempfile = "3.8.1" -test-cdylib = "1.1.0" cargo_metadata = "0.18.1" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 35b2444..eb5c7cd 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -65,9 +65,9 @@ fn build_dylib() -> PathBuf { cmd.arg("build").arg("--message-format=json").arg("--lib"); #[cfg(windows)] - cmd.arg("--target i686-windows-pc-msvc"); + cmd.arg("--target=i686-windows-pc-msvc"); #[cfg(unix)] - cmd.arg("--target i686-unknown-linux-gnu"); + cmd.arg("--target=i686-unknown-linux-gnu"); cmd.stderr(std::process::Stdio::inherit()); parse_output(cmd.output().unwrap()) } From 1fff8e815ba9cfa6de7641c2ef6f4586e5dc1d56 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:51:30 +1100 Subject: [PATCH 14/53] make here --- tools/setup_byond_linux.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/setup_byond_linux.sh b/tools/setup_byond_linux.sh index 740feb0..1cf092e 100644 --- a/tools/setup_byond_linux.sh +++ b/tools/setup_byond_linux.sh @@ -16,6 +16,7 @@ else unzip byond.zip rm byond.zip cd byond + make here echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" cd ~/ fi From 7db5963b72621d654bf668800c4367bf4d1e434b Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:53:23 +1100 Subject: [PATCH 15/53] wrong version --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 543e33b..449f712 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -82,7 +82,7 @@ jobs: run_test_linux: name: Run test (Ubuntu) - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 steps: - name: Checkout uses: actions/checkout@v4 From 0327c1b1769a2127d3bc3a7c35e9f947e7d96362 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 19:57:33 +1100 Subject: [PATCH 16/53] set it the fuck up --- .github/workflows/check.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 449f712..ab760dc 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -106,7 +106,9 @@ jobs: key: linux-byond - name: Set up byond - run: bash ./tools/setup_byond_linux.sh + run: | + bash ./tools/setup_byond_linux.sh + source $HOME/BYOND/byond/bin/byondsetup - name: Run tests run: cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture From 576ba106e9fc23750b1a961412b31989156a11ba Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:17:01 +1100 Subject: [PATCH 17/53] hmmmhmmmmhmmm --- .github/workflows/check.yml | 1 - crates/byondapi-rs-test/tests/test.rs | 28 +++++++++++++++------------ tools/setup_byond_linux.sh | 5 +---- tools/setup_byond_windows.sh | 4 +--- 4 files changed, 18 insertions(+), 20 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ab760dc..e00d0c3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -108,7 +108,6 @@ jobs: - name: Set up byond run: | bash ./tools/setup_byond_linux.sh - source $HOME/BYOND/byond/bin/byondsetup - name: Run tests run: cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index eb5c7cd..576b71b 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -18,19 +18,25 @@ fn test_byondapi_with_dreamdaemon() { } fn bin_path() -> PathBuf { - Path::new(env!("CARGO_MANIFEST_DIR")) - .join("dm_project") - .join("byond") - .join("bin") + match std::env::var("BYOND_LOCATION") { + Ok(value) => { + println!("Using byond from dir {value}"); + value.into() + } + Err(_) => { + println!("Byond not found, using default location"); + println!("To set a location for byond, set the BYOND_LOCATION environment variable to a path"); + println!("Keep in mind that this path has to point to the /bin folder of byond"); + "C:\\Program Files (x86)\\BYOND\\bin".into() + } + } } fn find_dm() -> Result { - let base_path = bin_path(); - let path = if cfg!(windows) { - base_path.join("dm.exe") + bin_path().join("dm.exe") } else { - base_path.join("DreamMaker") + "DreamMaker".into() }; if path.exists() { @@ -41,12 +47,10 @@ fn find_dm() -> Result { } fn find_dd() -> Result { - let base_path = bin_path(); - let path = if cfg!(windows) { - base_path.join("dd.exe") + bin_path().join("dd.exe") } else { - base_path.join("DreamDaemon") + "DreamDaemon".into() }; if path.exists() { diff --git a/tools/setup_byond_linux.sh b/tools/setup_byond_linux.sh index 1cf092e..81009af 100644 --- a/tools/setup_byond_linux.sh +++ b/tools/setup_byond_linux.sh @@ -19,7 +19,4 @@ else make here echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" cd ~/ -fi -mkdir -p "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" -cp -r "$HOME/BYOND/byond/bin" "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" -echo "Written byond bin to $GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" +fi \ No newline at end of file diff --git a/tools/setup_byond_windows.sh b/tools/setup_byond_windows.sh index 601ab96..e168124 100644 --- a/tools/setup_byond_windows.sh +++ b/tools/setup_byond_windows.sh @@ -19,6 +19,4 @@ else echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" cd ~/ fi -mkdir -p "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" -cp -r "$HOME/BYOND/byond/bin" "$GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" -echo "Written byond bin to $GITHUB_WORKSPACE/crates/byondapi-rs-test/dm_project/byond" +export BYOND_LOCATION="$HOME/BYOND/byond/bin" \ No newline at end of file From 33430b9db7f01d9b99b7eff07df448fa2f7409d7 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:18:10 +1100 Subject: [PATCH 18/53] oops --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e00d0c3..ab760dc 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -108,6 +108,7 @@ jobs: - name: Set up byond run: | bash ./tools/setup_byond_linux.sh + source $HOME/BYOND/byond/bin/byondsetup - name: Run tests run: cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture From 8f6bb043e951da8d4a11ac0afac70f84dd77e775 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:20:16 +1100 Subject: [PATCH 19/53] wrong target --- crates/byondapi-rs-test/tests/test.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 576b71b..678e905 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -69,7 +69,7 @@ fn build_dylib() -> PathBuf { cmd.arg("build").arg("--message-format=json").arg("--lib"); #[cfg(windows)] - cmd.arg("--target=i686-windows-pc-msvc"); + cmd.arg("--target=i686-pc-windows-msvc"); #[cfg(unix)] cmd.arg("--target=i686-unknown-linux-gnu"); cmd.stderr(std::process::Stdio::inherit()); @@ -93,7 +93,8 @@ fn parse_output(res: Output) -> PathBuf { } fn compile() { - let dm_compiler = find_dm().expect("To run this integration test you must place a copy of BYOND binaries in dm_project/byond/bin"); + let dm_compiler = find_dm() + .expect("To run this integration test you must install it the usual way or set BYOND_LOCATION to it's /bin folder to override it"); let output = Command::new(dm_compiler) .current_dir(project_dir()) From 32d8e537b96527ef88bfe384cdb9bd18595b9b5d Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:28:17 +1100 Subject: [PATCH 20/53] hmm --- crates/byondapi-rs-test/tests/test.rs | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 678e905..fdb8171 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -32,31 +32,19 @@ fn bin_path() -> PathBuf { } } -fn find_dm() -> Result { - let path = if cfg!(windows) { +fn find_dm() -> PathBuf { + if cfg!(windows) { bin_path().join("dm.exe") } else { "DreamMaker".into() - }; - - if path.exists() { - Ok(path) - } else { - Err(()) } } -fn find_dd() -> Result { - let path = if cfg!(windows) { +fn find_dd() -> PathBuf { + if cfg!(windows) { bin_path().join("dd.exe") } else { "DreamDaemon".into() - }; - - if path.exists() { - Ok(path) - } else { - Err(()) } } @@ -93,8 +81,7 @@ fn parse_output(res: Output) -> PathBuf { } fn compile() { - let dm_compiler = find_dm() - .expect("To run this integration test you must install it the usual way or set BYOND_LOCATION to it's /bin folder to override it"); + let dm_compiler = find_dm(); let output = Command::new(dm_compiler) .current_dir(project_dir()) @@ -127,7 +114,7 @@ fn copy_to_tmp(dll: &Path, tempdir: &TempDir) { } fn run_dreamdaemon(tempdir: &TempDir) { - let dream_daemon = find_dd().expect("To run this integration test you must place a copy of BYOND binaries in dm_project/byond/bin"); + let dream_daemon = find_dd(); let _dd_output = Command::new(dream_daemon) .current_dir(tempdir.path()) From 95118af3b7b5c2bfd0302b1a4e4e6e3b56e2bfb4 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:39:34 +1100 Subject: [PATCH 21/53] try again --- .github/workflows/check.yml | 4 +++- tools/setup_byond_linux.sh | 6 +++--- tools/setup_byond_windows.sh | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ab760dc..cbbca7c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -75,7 +75,9 @@ jobs: key: windows-byond - name: Set up byond - run: bash ./tools/setup_byond_windows.sh + run: | + bash ./tools/setup_byond_windows.sh + powershell $Env:BYOND_LOCATION = "$HOME\BYOND\byond\bin" - name: Run tests run: cargo test --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture diff --git a/tools/setup_byond_linux.sh b/tools/setup_byond_linux.sh index 81009af..b634912 100644 --- a/tools/setup_byond_linux.sh +++ b/tools/setup_byond_linux.sh @@ -1,8 +1,8 @@ #!/bin/bash set -euo pipefail -export BYOND_MAJOR=515 -export BYOND_MINOR=1620 +BYOND_MAJOR=515 +BYOND_MINOR=1620 if [ -d "$HOME/BYOND/byond/bin" ] && grep -Fxq "${BYOND_MAJOR}.${BYOND_MINOR}" $HOME/BYOND/version.txt; then @@ -19,4 +19,4 @@ else make here echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" cd ~/ -fi \ No newline at end of file +fi diff --git a/tools/setup_byond_windows.sh b/tools/setup_byond_windows.sh index e168124..4c24384 100644 --- a/tools/setup_byond_windows.sh +++ b/tools/setup_byond_windows.sh @@ -18,5 +18,4 @@ else cd byond echo "$BYOND_MAJOR.$BYOND_MINOR" > "$HOME/BYOND/version.txt" cd ~/ -fi -export BYOND_LOCATION="$HOME/BYOND/byond/bin" \ No newline at end of file +fi \ No newline at end of file From 80186dc42b655ab987c08a76563a42cc6e9a90e7 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:44:48 +1100 Subject: [PATCH 22/53] ehhh --- .github/workflows/check.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index cbbca7c..0f5f3a3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -74,13 +74,11 @@ jobs: path: ~/BYOND key: windows-byond - - name: Set up byond + - name: Run tests run: | bash ./tools/setup_byond_windows.sh - powershell $Env:BYOND_LOCATION = "$HOME\BYOND\byond\bin" - - - name: Run tests - run: cargo test --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture + $Env:BYOND_LOCATION = "$HOME\BYOND\byond\bin" + cargo test --package byondapi-test --target i686-pc-windows-msvc --test test -- test_byondapi_with_dreamdaemon --exact --nocapture run_test_linux: name: Run test (Ubuntu) @@ -107,10 +105,8 @@ jobs: path: ~/BYOND key: linux-byond - - name: Set up byond + - name: Run tests run: | bash ./tools/setup_byond_linux.sh source $HOME/BYOND/byond/bin/byondsetup - - - name: Run tests - run: cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture + cargo test --package byondapi-test --target i686-unknown-linux-gnu --test test -- test_byondapi_with_dreamdaemon --exact --nocapture From 431a7a210e51c231c98d906d3459f29c05ced14d Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:55:30 +1100 Subject: [PATCH 23/53] print dd out --- crates/byondapi-rs-test/tests/test.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index fdb8171..ab4f736 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -116,14 +116,14 @@ fn copy_to_tmp(dll: &Path, tempdir: &TempDir) { fn run_dreamdaemon(tempdir: &TempDir) { let dream_daemon = find_dd(); - let _dd_output = Command::new(dream_daemon) + let dd_output = Command::new(dream_daemon) .current_dir(tempdir.path()) .arg("dm_project.dmb") .arg("-trusted") .output() .expect("DreamDaemon crashed"); - // println!("{:#?}", _dd_output); + println!("{:#?}", dd_output); } fn check_output_dd(tempdir: &TempDir) { From 9a8db0bde78a7546d36895f41763df7d9387c603 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 20:56:57 +1100 Subject: [PATCH 24/53] force-check From 7bf82e9063f398c09b2bdb50b653404a289c301b Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:02:49 +1100 Subject: [PATCH 25/53] ignore that file --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 6985cf1..448d64d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,6 @@ Cargo.lock # MSVC Windows builds of rustc generate these, which store debugging information *.pdb + +# Must be defined by users, since they may be on linux +.cargo/ \ No newline at end of file From d7daf0831810f8abcca3c1b6dfec082bad42b795 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:36:00 +1100 Subject: [PATCH 26/53] rewrite this --- .../dm_project/dm_project.dme | 5 +++++ crates/byondapi-rs-test/src/lib.rs | 20 +++++++++++++++++++ crates/byondapi-rs/src/list.rs | 12 +++++------ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index abbda4b..b546d2c 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -136,6 +136,11 @@ if(L["parrot"] != 14) throw EXCEPTION("list modification by key failed") + +/test/proc/test_list_read() + var/list/L = list("cat" = 0, "dog" = 1, "parrot" = 5) + call_ext("byondapi_test.dll", "byond:test_list_read")(L) + // BEGIN_INTERNALS // END_INTERNALS // BEGIN_FILE_DIR diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index faefdf3..8d1dce8 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -310,3 +310,23 @@ pub unsafe extern "C" fn test_non_assoc_list( ByondValue::new() } + +#[no_mangle] +pub unsafe extern "C" fn test_list_read( + argc: byondapi_sys::u4c, + argv: *mut ByondValue, +) -> ByondValue { + setup_panic_handler(); + let args = parse_args(argc, argv); + let list = args.get(0).unwrap(); + + let map = list.get_list().unwrap(); + let map = map + .into_iter() + .map(|value| value.get_number().unwrap() as usize) + .collect::>(); + + assert_eq!(map, vec![0, 1, 5]); + + ByondValue::new() +} diff --git a/crates/byondapi-rs/src/list.rs b/crates/byondapi-rs/src/list.rs index 866bbc6..82c3ded 100644 --- a/crates/byondapi-rs/src/list.rs +++ b/crates/byondapi-rs/src/list.rs @@ -103,9 +103,7 @@ impl ByondValue { if !self.is_list() { return Err(Error::NotAList); } - let mut list_copy = self.get_list()?; - list_copy.push(value); - self.write_list(&list_copy)?; + self.call("Add", &[value])?; Ok(()) } @@ -114,9 +112,9 @@ impl ByondValue { if !self.is_list() { return Err(Error::NotAList); } - let mut list_copy = self.get_list()?; - let value = list_copy.pop(); - self.write_list(&list_copy)?; - Ok(value) + if self.builtin_length()?.get_number()? as usize == 0 { + return Ok(None); + } + Ok(Some(self.call("Remove", &[])?)) } } From af78d47e5b30fdb52d8978a152d1150de6ff4686 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:39:22 +1100 Subject: [PATCH 27/53] hmm --- crates/byondapi-rs/src/list.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs/src/list.rs b/crates/byondapi-rs/src/list.rs index 82c3ded..a735d73 100644 --- a/crates/byondapi-rs/src/list.rs +++ b/crates/byondapi-rs/src/list.rs @@ -112,9 +112,11 @@ impl ByondValue { if !self.is_list() { return Err(Error::NotAList); } - if self.builtin_length()?.get_number()? as usize == 0 { + let len = self.builtin_length()?.get_number()? as usize; + if len == 0 { return Ok(None); } - Ok(Some(self.call("Remove", &[])?)) + let value = self.read_list_index(len as f32)?; + Ok(Some(self.call("Remove", &[value])?)) } } From 879441d09a7d6185c1027dccafd9fe8a7326c1ec Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:45:15 +1100 Subject: [PATCH 28/53] it works like this --- crates/byondapi-rs/src/list.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs/src/list.rs b/crates/byondapi-rs/src/list.rs index a735d73..6187600 100644 --- a/crates/byondapi-rs/src/list.rs +++ b/crates/byondapi-rs/src/list.rs @@ -117,6 +117,7 @@ impl ByondValue { return Ok(None); } let value = self.read_list_index(len as f32)?; - Ok(Some(self.call("Remove", &[value])?)) + self.call("Remove", &[value])?; + Ok(Some(value)) } } From 22cc3fb480931635243b4b4a60b41fbff2a95a5d Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:47:13 +1100 Subject: [PATCH 29/53] hnggg --- crates/byondapi-rs-test/src/lib.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index 8d1dce8..8998176 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -323,7 +323,13 @@ pub unsafe extern "C" fn test_list_read( let map = list.get_list().unwrap(); let map = map .into_iter() - .map(|value| value.get_number().unwrap() as usize) + .map(|value| { + if !value.is_num() { + let string = value.get_string().unwrap(); + eprintln!("Value is not a num, is actually {string}"); + } + value.get_number().unwrap() as usize + }) .collect::>(); assert_eq!(map, vec![0, 1, 5]); From d57296f5380454ffbb034990d856291f8d850b2f Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:51:17 +1100 Subject: [PATCH 30/53] try and catch it --- crates/byondapi-rs-test/dm_project/dm_project.dme | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index b546d2c..d99b914 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -9,8 +9,11 @@ world.log = file("dd_log.txt") for(var/func in typesof(/test/proc)) - world.log << "[func] [copytext("------------------------------------------------------------------------", length("[func]"))]" - call(new /test, func)() + try + world.log << "[func] [copytext("------------------------------------------------------------------------", length("[func]"))]" + call(new /test, func)() + catch(var/exception/e) + world.log << "ERROR: [e]" del(src) From af74f415d312de28fc37baa2ccb324d13dbdab00 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 21:52:14 +1100 Subject: [PATCH 31/53] comment out test_block --- crates/byondapi-rs-test/dm_project/dm_project.dme | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index d99b914..e8a1afb 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -9,11 +9,8 @@ world.log = file("dd_log.txt") for(var/func in typesof(/test/proc)) - try - world.log << "[func] [copytext("------------------------------------------------------------------------", length("[func]"))]" - call(new /test, func)() - catch(var/exception/e) - world.log << "ERROR: [e]" + world.log << "[func] [copytext("------------------------------------------------------------------------", length("[func]"))]" + call(new /test, func)() del(src) @@ -104,7 +101,7 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") - +/* /test/proc/test_block() world.maxz = 1 world.maxx = 2 @@ -118,6 +115,7 @@ world.maxz = 0 world.maxx = 0 world.maxy = 0 +*/ /test/proc/test_length_with_str() var/str = "meowman" From c3c8ebf0057ee4766a2d71d4f5284ec1cd32bcf6 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:03:22 +1100 Subject: [PATCH 32/53] fuckin lists --- .../dm_project/dm_project.dme | 3 +-- crates/byondapi-rs-test/src/lib.rs | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index e8a1afb..b546d2c 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -101,7 +101,7 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") -/* + /test/proc/test_block() world.maxz = 1 world.maxx = 2 @@ -115,7 +115,6 @@ world.maxz = 0 world.maxx = 0 world.maxy = 0 -*/ /test/proc/test_length_with_str() var/str = "meowman" diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index 8998176..5bd85fe 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -321,18 +321,24 @@ pub unsafe extern "C" fn test_list_read( let list = args.get(0).unwrap(); let map = list.get_list().unwrap(); - let map = map + let (num, string): (Vec<_>, Vec<_>) = + map.into_iter() + .partition(|value| if value.is_num() { true } else { false }); + let num = num .into_iter() - .map(|value| { - if !value.is_num() { - let string = value.get_string().unwrap(); - eprintln!("Value is not a num, is actually {string}"); - } - value.get_number().unwrap() as usize - }) + .map(|value| value.get_number().unwrap() as usize) + .collect::>(); + let string = string + .into_iter() + .map(|value| value.get_string().unwrap()) .collect::>(); - assert_eq!(map, vec![0, 1, 5]); + assert_eq!(num, vec![0, 1, 5]); + + assert_eq!( + string, + vec!["cat".to_owned(), "dog".to_owned(), "parrot".to_owned()] + ); ByondValue::new() } From f3eb82b514b2525d4fdede2e545961e80158b08a Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:03:59 +1100 Subject: [PATCH 33/53] disable block for now --- crates/byondapi-rs-test/dm_project/dm_project.dme | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index b546d2c..e8a1afb 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -101,7 +101,7 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") - +/* /test/proc/test_block() world.maxz = 1 world.maxx = 2 @@ -115,6 +115,7 @@ world.maxz = 0 world.maxx = 0 world.maxy = 0 +*/ /test/proc/test_length_with_str() var/str = "meowman" From 397ea64707977690d93f8443f03ef695371df50e Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:05:18 +1100 Subject: [PATCH 34/53] frick --- crates/byondapi-rs-test/src/lib.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index 5bd85fe..f130aec 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -321,9 +321,7 @@ pub unsafe extern "C" fn test_list_read( let list = args.get(0).unwrap(); let map = list.get_list().unwrap(); - let (num, string): (Vec<_>, Vec<_>) = - map.into_iter() - .partition(|value| if value.is_num() { true } else { false }); + let (num, string): (Vec<_>, Vec<_>) = map.into_iter().partition(|value| value.is_num()); let num = num .into_iter() .map(|value| value.get_number().unwrap() as usize) From b7fbc2cea86f11d68264a24892ed7b8fddb31a02 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:07:11 +1100 Subject: [PATCH 35/53] print it out then --- crates/byondapi-rs-test/src/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index f130aec..7364676 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -321,7 +321,10 @@ pub unsafe extern "C" fn test_list_read( let list = args.get(0).unwrap(); let map = list.get_list().unwrap(); + map.into_iter().for_each(|item| println!("{item:#?}")); + /* let (num, string): (Vec<_>, Vec<_>) = map.into_iter().partition(|value| value.is_num()); + let num = num .into_iter() .map(|value| value.get_number().unwrap() as usize) @@ -337,6 +340,7 @@ pub unsafe extern "C" fn test_list_read( string, vec!["cat".to_owned(), "dog".to_owned(), "parrot".to_owned()] ); + */ ByondValue::new() } From c3a34959b813ca2ff722f7af22e6600533b9c8f2 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:13:23 +1100 Subject: [PATCH 36/53] mhm --- crates/byondapi-rs-test/tests/test.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index ab4f736..924ceee 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -122,8 +122,14 @@ fn run_dreamdaemon(tempdir: &TempDir) { .arg("-trusted") .output() .expect("DreamDaemon crashed"); - - println!("{:#?}", dd_output); + let stdout = std::str::from_utf8(&dd_output.stdout).unwrap(); + let stderr = std::str::from_utf8(&dd_output.stderr).unwrap(); + + println!("-----------------------"); + println!("Stdout:\n{stdout}"); + println!("-----------------------"); + println!("Stderr:\n{stderr}"); + println!("-----------------------"); } fn check_output_dd(tempdir: &TempDir) { From 578fa746418d322dce1b96deba45337e0b9dca94 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:20:39 +1100 Subject: [PATCH 37/53] fix this test already --- crates/byondapi-rs-test/src/lib.rs | 17 +++-------------- crates/byondapi-rs-test/tests/test.rs | 10 +++++----- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/crates/byondapi-rs-test/src/lib.rs b/crates/byondapi-rs-test/src/lib.rs index 7364676..f82b05e 100644 --- a/crates/byondapi-rs-test/src/lib.rs +++ b/crates/byondapi-rs-test/src/lib.rs @@ -321,26 +321,15 @@ pub unsafe extern "C" fn test_list_read( let list = args.get(0).unwrap(); let map = list.get_list().unwrap(); - map.into_iter().for_each(|item| println!("{item:#?}")); - /* - let (num, string): (Vec<_>, Vec<_>) = map.into_iter().partition(|value| value.is_num()); - - let num = num - .into_iter() - .map(|value| value.get_number().unwrap() as usize) - .collect::>(); - let string = string + let values = map .into_iter() - .map(|value| value.get_string().unwrap()) + .map(|item| item.get_string().unwrap()) .collect::>(); - assert_eq!(num, vec![0, 1, 5]); - assert_eq!( - string, + values, vec!["cat".to_owned(), "dog".to_owned(), "parrot".to_owned()] ); - */ ByondValue::new() } diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 924ceee..e412916 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -125,11 +125,11 @@ fn run_dreamdaemon(tempdir: &TempDir) { let stdout = std::str::from_utf8(&dd_output.stdout).unwrap(); let stderr = std::str::from_utf8(&dd_output.stderr).unwrap(); - println!("-----------------------"); - println!("Stdout:\n{stdout}"); - println!("-----------------------"); - println!("Stderr:\n{stderr}"); - println!("-----------------------"); + println!("Stdout:-----------------------------------------------------------------"); + println!("{stdout}"); + println!("Stderr:-----------------------------------------------------------------"); + println!("{stderr}"); + println!("------------------------------------------------------------------------"); } fn check_output_dd(tempdir: &TempDir) { From 7c427495ef07984e9b5c13c5acfd9a1a99ba093c Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:22:28 +1100 Subject: [PATCH 38/53] minor stuff --- crates/byondapi-rs-test/dm_project/dm_project.dme | 3 +-- crates/byondapi-rs-test/tests/test.rs | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index e8a1afb..b546d2c 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -101,7 +101,7 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") -/* + /test/proc/test_block() world.maxz = 1 world.maxx = 2 @@ -115,7 +115,6 @@ world.maxz = 0 world.maxx = 0 world.maxy = 0 -*/ /test/proc/test_length_with_str() var/str = "meowman" diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index e412916..f99ef26 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -125,11 +125,11 @@ fn run_dreamdaemon(tempdir: &TempDir) { let stdout = std::str::from_utf8(&dd_output.stdout).unwrap(); let stderr = std::str::from_utf8(&dd_output.stderr).unwrap(); - println!("Stdout:-----------------------------------------------------------------"); + println!("Stdout:-------------------------------------------------------------------"); println!("{stdout}"); - println!("Stderr:-----------------------------------------------------------------"); + println!("Stderr:-------------------------------------------------------------------"); println!("{stderr}"); - println!("------------------------------------------------------------------------"); + println!("--------------------------------------------------------------------------"); } fn check_output_dd(tempdir: &TempDir) { From 91c232048cf6e8d08686b74e30a01a831471ffcf Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:25:10 +1100 Subject: [PATCH 39/53] assumptions --- crates/byondapi-rs-test/tests/test.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index f99ef26..90c3bdf 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -130,6 +130,9 @@ fn run_dreamdaemon(tempdir: &TempDir) { println!("Stderr:-------------------------------------------------------------------"); println!("{stderr}"); println!("--------------------------------------------------------------------------"); + if stderr.lines().count() > 3 { + panic!("Stderr contains more than 3 lines, an error message might be printed!") + } } fn check_output_dd(tempdir: &TempDir) { From 7531935134966891082584e91bc2ff5876977efb Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:31:29 +1100 Subject: [PATCH 40/53] now it does stuff correctly --- crates/byondapi-rs-test/tests/test.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 90c3bdf..81a8a45 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -11,10 +11,17 @@ fn test_byondapi_with_dreamdaemon() { compile(); let tempdir = tempfile::tempdir().expect("Failed to create temporary directory"); + copy_to_tmp(&dll, &tempdir); - run_dreamdaemon(&tempdir); + + let stderr = run_dreamdaemon(&tempdir); + check_output_rust(&tempdir); check_output_dd(&tempdir); + + if stderr.lines().count() > 3 { + panic!("Stderr contains more than 3 lines, an error message might be printed!") + } } fn bin_path() -> PathBuf { @@ -113,7 +120,7 @@ fn copy_to_tmp(dll: &Path, tempdir: &TempDir) { std::fs::copy(dll, target.join("byondapi_test.dll")).expect("Failed to copy byondapi_test.dll"); } -fn run_dreamdaemon(tempdir: &TempDir) { +fn run_dreamdaemon(tempdir: &TempDir) -> String { let dream_daemon = find_dd(); let dd_output = Command::new(dream_daemon) @@ -130,9 +137,7 @@ fn run_dreamdaemon(tempdir: &TempDir) { println!("Stderr:-------------------------------------------------------------------"); println!("{stderr}"); println!("--------------------------------------------------------------------------"); - if stderr.lines().count() > 3 { - panic!("Stderr contains more than 3 lines, an error message might be printed!") - } + stderr.to_owned() } fn check_output_dd(tempdir: &TempDir) { From b6716782b930746e3b8a45ed4c8bf4d8b8b3039e Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:35:27 +1100 Subject: [PATCH 41/53] better --- crates/byondapi-rs-test/tests/test.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index 81a8a45..ef1b16c 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -131,12 +131,15 @@ fn run_dreamdaemon(tempdir: &TempDir) -> String { .expect("DreamDaemon crashed"); let stdout = std::str::from_utf8(&dd_output.stdout).unwrap(); let stderr = std::str::from_utf8(&dd_output.stderr).unwrap(); + if !stdout.is_empty() { + eprintln!("Stdout:-------------------------------------------------------------------"); + eprintln!("{stdout}"); + } - println!("Stdout:-------------------------------------------------------------------"); - println!("{stdout}"); - println!("Stderr:-------------------------------------------------------------------"); - println!("{stderr}"); - println!("--------------------------------------------------------------------------"); + if !stderr.is_empty() { + eprintln!("Stderr:-------------------------------------------------------------------"); + eprintln!("{stderr}"); + } stderr.to_owned() } @@ -147,6 +150,7 @@ fn check_output_dd(tempdir: &TempDir) { let log = std::fs::read_to_string(log).expect("Failed to read log"); + eprintln!("DDlogs:-------------------------------------------------------------------"); eprintln!("{}", log); assert!( @@ -160,6 +164,7 @@ fn check_output_rust(tempdir: &TempDir) { if log.exists() { let log = std::fs::read_to_string(log).expect("Failed to read log"); + eprintln!("Rustlogs:-----------------------------------------------------------------"); eprintln!("{}", log); panic!("Rust error log was produced!"); } From dbdf2f0a4a6ee9a8616ac71243e86df3f96f1155 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:36:26 +1100 Subject: [PATCH 42/53] try again --- crates/byondapi-rs-test/dm_project/dm_project.dme | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index b546d2c..e8a1afb 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -101,7 +101,7 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") - +/* /test/proc/test_block() world.maxz = 1 world.maxx = 2 @@ -115,6 +115,7 @@ world.maxz = 0 world.maxx = 0 world.maxy = 0 +*/ /test/proc/test_length_with_str() var/str = "meowman" From 3ebcee32d22cba90ef65d7e2064c48d5a83c12c1 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Tue, 21 Nov 2023 22:40:33 +1100 Subject: [PATCH 43/53] fix windows --- crates/byondapi-rs-test/tests/test.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs-test/tests/test.rs b/crates/byondapi-rs-test/tests/test.rs index ef1b16c..fb3f71d 100644 --- a/crates/byondapi-rs-test/tests/test.rs +++ b/crates/byondapi-rs-test/tests/test.rs @@ -19,7 +19,12 @@ fn test_byondapi_with_dreamdaemon() { check_output_rust(&tempdir); check_output_dd(&tempdir); - if stderr.lines().count() > 3 { + #[cfg(unix)] + const LINE_COUNT: usize = 3; + #[cfg(windows)] + const LINE_COUNT: usize = 5; + + if stderr.lines().count() > LINE_COUNT { panic!("Stderr contains more than 3 lines, an error message might be printed!") } } From 5fc129adea10f9b9ae00ba7ac77e0a7341f3c3ce Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 07:24:09 +1100 Subject: [PATCH 44/53] try this --- .../dm_project/dm_project.dme | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index e8a1afb..d7d4e12 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -14,6 +14,20 @@ del(src) +/test/proc/test_block() + world.maxz = 1 + world.maxx = 2 + world.maxy = 2 + + var/ret = call_ext("byondapi_test.dll", "byond:test_block")() + + if(ret != 4) + throw EXCEPTION("Block failed [json_encode(ret)]") + + world.maxz = 0 + world.maxx = 0 + world.maxy = 0 + /test/proc/test_connection() var/ret = call_ext("byondapi_test.dll", "byond:test_connection")() if (ret != 69) @@ -101,21 +115,6 @@ if(ret != 5) throw EXCEPTION("List length failed [json_encode(ret)]") -/* -/test/proc/test_block() - world.maxz = 1 - world.maxx = 2 - world.maxy = 2 - - var/ret = call_ext("byondapi_test.dll", "byond:test_block")() - - if(ret != 4) - throw EXCEPTION("Block failed [json_encode(ret)]") - - world.maxz = 0 - world.maxx = 0 - world.maxy = 0 -*/ /test/proc/test_length_with_str() var/str = "meowman" From b6d7af14a67fe9810de01c613e5b34161ca004b4 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:28:16 +1100 Subject: [PATCH 45/53] fuckin try this --- crates/byondapi-rs/src/map.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index f146f1b..ee6b8fc 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -32,7 +32,7 @@ impl Default for ByondXYZ { /// Gets a list of turfs in a square zone between the two provided corners. pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result, Error> { use std::cell::RefCell; - + /* thread_local! { static BUFFER: RefCell> = RefCell::new(Vec::with_capacity(1)); } @@ -67,6 +67,11 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result Err(Error::get_last_byond_error()), } }) + */ + let mut buffer = [ByondValue::new(); 4]; + let mut len = buffer.len() as u32; + unsafe { byond().Byond_Block(&corner1.0, &corner2.0, buffer.as_mut_ptr().cast(), &mut len) }; + Ok(buffer.to_vec()) } /// Corresponds to [`dm::length`](https://www.byond.com/docs/ref/#/proc/length) From 45f97be320edc217c17c5a662420e0a453b800b5 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:32:48 +1100 Subject: [PATCH 46/53] fuck --- crates/byondapi-rs-test/dm_project/dm_project.dme | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index d7d4e12..4841115 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -42,8 +42,14 @@ throw EXCEPTION("Object did not make it through FFI") /test/proc/test_ref() + world.maxz = 1 + world.maxx = 1 + world.maxy = 1 var/turf/T = locate(1,1,1) var/ret = call_ext("byondapi_test.dll", "byond:test_ref")(T) + world.maxz = 0 + world.maxx = 0 + world.maxy = 0 /test/proc/test_ptr() var/x = "meow" From 759b61c44c055f9acbd94c2054c5b42615118ccb Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:37:03 +1100 Subject: [PATCH 47/53] print shit --- crates/byondapi-rs/src/map.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index ee6b8fc..16bd537 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -32,20 +32,25 @@ impl Default for ByondXYZ { /// Gets a list of turfs in a square zone between the two provided corners. pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result, Error> { use std::cell::RefCell; - /* + thread_local! { static BUFFER: RefCell> = RefCell::new(Vec::with_capacity(1)); } BUFFER.with_borrow_mut(|buff| -> Result, Error> { let mut len = buff.capacity() as u32; + println!("init len is {len}"); // Safety: buffer capacity is passed to byond, which makes sure it writes in-bound let initial_res = unsafe { byond().Byond_Block(&corner1.0, &corner2.0, buff.as_mut_ptr().cast(), &mut len) }; + println!("len after first block is {len}"); match (initial_res, len) { (false, 1..) => { buff.reserve_exact(len as usize - buff.capacity()); + let capacitor = buff.capacity(); + println!("buffer capacity is {capacitor}"); + // Safety: buffer capacity is passed to byond, which makes sure it writes in-bound unsafe { map_byond_error!(byond().Byond_Block( @@ -55,6 +60,8 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result Result Err(Error::get_last_byond_error()), } }) - */ - let mut buffer = [ByondValue::new(); 4]; - let mut len = buffer.len() as u32; - unsafe { byond().Byond_Block(&corner1.0, &corner2.0, buffer.as_mut_ptr().cast(), &mut len) }; - Ok(buffer.to_vec()) } /// Corresponds to [`dm::length`](https://www.byond.com/docs/ref/#/proc/length) From 0f097a8801284fd53789579655f218d0a6740ff6 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:38:12 +1100 Subject: [PATCH 48/53] eee --- crates/byondapi-rs/src/map.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index 16bd537..5a47429 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -47,6 +47,8 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result { + let calc_cap = len as usize - buff.capacity(); + println!("calc capacity is {calc_cap}"); buff.reserve_exact(len as usize - buff.capacity()); let capacitor = buff.capacity(); println!("buffer capacity is {capacitor}"); From 0813dc3a7c7ff311ea26f8edb138411cc4e0174c Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:39:44 +1100 Subject: [PATCH 49/53] fuck off --- crates/byondapi-rs/src/map.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index 5a47429..75ab108 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -47,8 +47,8 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result { - let calc_cap = len as usize - buff.capacity(); - println!("calc capacity is {calc_cap}"); + let before_cap = buff.capacity(); + println!("before capacity is {before_cap}"); buff.reserve_exact(len as usize - buff.capacity()); let capacitor = buff.capacity(); println!("buffer capacity is {capacitor}"); From 748c853090858b1df023e6e4b25f09897417d919 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:43:14 +1100 Subject: [PATCH 50/53] just allocate the whole thing then --- crates/byondapi-rs/src/map.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index 75ab108..04fedf7 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -49,7 +49,7 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result { let before_cap = buff.capacity(); println!("before capacity is {before_cap}"); - buff.reserve_exact(len as usize - buff.capacity()); + buff.reserve_exact(len as usize); let capacitor = buff.capacity(); println!("buffer capacity is {capacitor}"); From 69be7873b6e2a5940f7a3603538494b1734ad647 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:48:25 +1100 Subject: [PATCH 51/53] oopsie --- crates/byondapi-rs/src/list.rs | 2 +- crates/byondapi-rs/src/map.rs | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/crates/byondapi-rs/src/list.rs b/crates/byondapi-rs/src/list.rs index 6187600..7f84761 100644 --- a/crates/byondapi-rs/src/list.rs +++ b/crates/byondapi-rs/src/list.rs @@ -20,7 +20,7 @@ impl ByondValue { unsafe { byond().Byond_ReadList(&self.0, buff.as_mut_ptr().cast(), &mut len) }; match (initial_res, len) { (false, 1..) => { - buff.reserve_exact(len as usize - buff.capacity()); + buff.reserve_exact(len as usize); // Safety: buffer capacity is passed to byond, which makes sure it writes in-bound unsafe { map_byond_error!(byond().Byond_ReadList( diff --git a/crates/byondapi-rs/src/map.rs b/crates/byondapi-rs/src/map.rs index 04fedf7..c2fd384 100644 --- a/crates/byondapi-rs/src/map.rs +++ b/crates/byondapi-rs/src/map.rs @@ -39,20 +39,13 @@ pub fn byond_block(corner1: ByondXYZ, corner2: ByondXYZ) -> Result Result, Error> { let mut len = buff.capacity() as u32; - println!("init len is {len}"); // Safety: buffer capacity is passed to byond, which makes sure it writes in-bound let initial_res = unsafe { byond().Byond_Block(&corner1.0, &corner2.0, buff.as_mut_ptr().cast(), &mut len) }; - println!("len after first block is {len}"); match (initial_res, len) { (false, 1..) => { - let before_cap = buff.capacity(); - println!("before capacity is {before_cap}"); buff.reserve_exact(len as usize); - let capacitor = buff.capacity(); - println!("buffer capacity is {capacitor}"); - // Safety: buffer capacity is passed to byond, which makes sure it writes in-bound unsafe { map_byond_error!(byond().Byond_Block( From 8187b0ed92c2d5216a6015101fce8783989fdb27 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:49:31 +1100 Subject: [PATCH 52/53] rearrange it a bit --- .../dm_project/dm_project.dme | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/crates/byondapi-rs-test/dm_project/dm_project.dme b/crates/byondapi-rs-test/dm_project/dm_project.dme index 4841115..bd57742 100644 --- a/crates/byondapi-rs-test/dm_project/dm_project.dme +++ b/crates/byondapi-rs-test/dm_project/dm_project.dme @@ -14,20 +14,6 @@ del(src) -/test/proc/test_block() - world.maxz = 1 - world.maxx = 2 - world.maxy = 2 - - var/ret = call_ext("byondapi_test.dll", "byond:test_block")() - - if(ret != 4) - throw EXCEPTION("Block failed [json_encode(ret)]") - - world.maxz = 0 - world.maxx = 0 - world.maxy = 0 - /test/proc/test_connection() var/ret = call_ext("byondapi_test.dll", "byond:test_connection")() if (ret != 69) @@ -45,8 +31,10 @@ world.maxz = 1 world.maxx = 1 world.maxy = 1 + var/turf/T = locate(1,1,1) var/ret = call_ext("byondapi_test.dll", "byond:test_ref")(T) + world.maxz = 0 world.maxx = 0 world.maxy = 0 @@ -75,6 +63,20 @@ /datum/data var/name = "test name" +/test/proc/test_block() + world.maxz = 1 + world.maxx = 2 + world.maxy = 2 + + var/ret = call_ext("byondapi_test.dll", "byond:test_block")() + + if(ret != 4) + throw EXCEPTION("Block failed [json_encode(ret)]") + + world.maxz = 0 + world.maxx = 0 + world.maxy = 0 + /test/proc/test_readwrite_var() var/datum/data/stub = new() From 02773bf00c60045c624c8272caa865eeb1dd6060 Mon Sep 17 00:00:00 2001 From: Katherine Kiefer Date: Wed, 22 Nov 2023 09:59:40 +1100 Subject: [PATCH 53/53] don't need to export that --- tools/setup_byond_windows.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/setup_byond_windows.sh b/tools/setup_byond_windows.sh index 4c24384..a087016 100644 --- a/tools/setup_byond_windows.sh +++ b/tools/setup_byond_windows.sh @@ -1,8 +1,8 @@ #!/bin/bash set -euo pipefail -export BYOND_MAJOR=515 -export BYOND_MINOR=1620 +BYOND_MAJOR=515 +BYOND_MINOR=1620 if [ -d "$HOME/BYOND/byond/bin" ] && grep -Fxq "${BYOND_MAJOR}.${BYOND_MINOR}" $HOME/BYOND/version.txt; then