diff --git a/Cargo.lock b/Cargo.lock index d0576a262f6..55a28869e85 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7497,6 +7497,7 @@ dependencies = [ "anymap", "byte-unit", "clap 4.5.50", + "convert_case 0.6.0", "criterion", "foldhash 0.2.0", "futures", diff --git a/crates/bench/Cargo.toml b/crates/bench/Cargo.toml index 5a77113c435..115eb115022 100644 --- a/crates/bench/Cargo.toml +++ b/crates/bench/Cargo.toml @@ -55,6 +55,7 @@ spacetimedb-testing = { path = "../testing" } ahash.workspace = true anyhow.workspace = true +convert_case.workspace = true anymap.workspace = true byte-unit.workspace = true clap.workspace = true diff --git a/crates/bench/src/lib.rs b/crates/bench/src/lib.rs index 718a36a14a6..ce56b2e12e8 100644 --- a/crates/bench/src/lib.rs +++ b/crates/bench/src/lib.rs @@ -16,6 +16,7 @@ mod tests { sqlite::SQLite, ResultBench, }; + use serial_test::serial; use spacetimedb_testing::modules::{Csharp, Rust}; use std::{io, path::Path, sync::Once}; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -102,7 +103,6 @@ mod tests { Ok(()) } - #[allow(dead_code)] fn test_basic_invariants() -> ResultBench<()> { basic_invariants::(IndexStrategy::Unique0, true)?; basic_invariants::(IndexStrategy::Unique0, true)?; @@ -111,13 +111,13 @@ mod tests { Ok(()) } - // #[test] - fn _test_basic_invariants_sqlite() -> ResultBench<()> { + #[test] + fn test_basic_invariants_sqlite() -> ResultBench<()> { test_basic_invariants::() } - // #[test] - fn _test_basic_invariants_spacetime_raw() -> ResultBench<()> { + #[test] + fn test_basic_invariants_spacetime_raw() -> ResultBench<()> { test_basic_invariants::() } @@ -125,15 +125,15 @@ mod tests { // #[test]s run concurrently and they fight over lockfiles. // so, run the sub-tests here in sequence. - // #[test] - // #[serial] - fn _test_basic_invariants_spacetime_module_rust() -> ResultBench<()> { + #[test] + #[serial] + fn test_basic_invariants_spacetime_module_rust() -> ResultBench<()> { test_basic_invariants::>() } - // #[test] - // #[serial] - fn _test_basic_invariants_spacetime_module_csharp() -> ResultBench<()> { + #[test] + #[serial] + fn test_basic_invariants_spacetime_module_csharp() -> ResultBench<()> { test_basic_invariants::>() } } diff --git a/crates/bench/src/spacetime_module.rs b/crates/bench/src/spacetime_module.rs index 3aefcbdc5d1..7775b58e8fd 100644 --- a/crates/bench/src/spacetime_module.rs +++ b/crates/bench/src/spacetime_module.rs @@ -1,5 +1,6 @@ use std::{marker::PhantomData, path::Path}; +use convert_case::{Case, Casing}; use spacetimedb::db::{Config, Storage}; use spacetimedb_lib::{ sats::{product, ArrayValue}, @@ -89,9 +90,14 @@ impl BenchDatabase for SpacetimeModule { table_style: crate::schemas::IndexStrategy, ) -> ResultBench { // Noop. All tables are built into the "benchmarks" module. + // The module's default CaseConversionPolicy is SnakeCase, which + // inserts underscores at letter-digit boundaries (e.g. u32 -> u_32). + // We must match that here so reducer/table lookups succeed. + let raw = table_name::(table_style); + let converted = raw.as_ref().to_case(Case::Snake); Ok(TableId { - pascal_case: table_name::(table_style), - snake_case: table_name::(table_style), + pascal_case: TableName::for_test(&converted), + snake_case: TableName::for_test(&converted), }) }