Skip to content

Commit 8afcc57

Browse files
huitseekerbitwalker
authored andcommitted
feat: This implements a serde_test macro that can generate round-trip serialization tests pegged on an implementation of proptest::prelude::Arbitrary. This macro:
- supports generic arguments passed as attributes, - uses bincode as the test serializer (I expect this will be replaced by #2130) => no more boilerplate tests! (and future tests are easier to define)
1 parent aedea70 commit 8afcc57

10 files changed

Lines changed: 318 additions & 47 deletions

File tree

Cargo.lock

Lines changed: 62 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ miden-core = { path = "./core", version = "0.18", default-features = false }
4646
miden-debug-types = { path = "./crates/debug/types", version = "0.18", default-features = false }
4747
miden-mast-package = { path = "./package", version = "0.18", default-features = false }
4848
miden-processor = { path = "./processor", version = "0.18", default-features = false }
49+
miden-serde-test-macros = { path = "./crates/utils/serde-test-macros", version = "0.1.0", default-features = false }
4950
miden-prover = { path = "./prover", version = "0.18", default-features = false }
5051
miden-stdlib = { path = "./stdlib", version = "0.18", default-features = false }
5152
miden-utils-diagnostics = { path = "./crates/utils/diagnostics", version = "0.18", default-features = false }
@@ -59,6 +60,8 @@ miden-formatting = { version = "0.1", default-features = false }
5960
midenc-hir-type = { version = "0.1", default-features = false }
6061

6162
# Third-party crates
63+
# used in miden-serde-test macros, should be replaced with miden-bite
64+
bincode = { version = "1.3" }
6265
insta = { version = "1.43", default-features = false, features = [
6366
"colors",
6467
] }

assembly-syntax/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ std = [
2222
"miden-debug-types/std",
2323
"miden-utils-diagnostics/std",
2424
"thiserror/std",
25+
"proptest/std",
2526
]
2627
serde = [
2728
"dep:serde",
@@ -31,7 +32,7 @@ serde = [
3132
"semver/serde",
3233
"smallvec/serde",
3334
]
34-
arbitrary = ["dep:proptest", "dep:proptest-derive"]
35+
arbitrary = ["dep:proptest", "dep:proptest-derive", "miden-core/arbitrary"]
3536
testing = ["arbitrary", "logging"]
3637
logging = ["dep:env_logger"]
3738

@@ -44,6 +45,7 @@ miden-core.workspace = true
4445
miden-debug-types.workspace = true
4546
miden-utils-diagnostics.workspace = true
4647
midenc-hir-type.workspace = true
48+
miden-serde-test-macros = { workspace = true }
4749
proptest = { workspace = true, optional = true }
4850
proptest-derive = { workspace = true, optional = true }
4951
regex = { version = "1.10", default-features = false, features = [
@@ -57,6 +59,7 @@ smallvec.workspace = true
5759
thiserror.workspace = true
5860

5961
[dev-dependencies]
62+
bincode.workspace = true
6063
env_logger = "0.11"
6164
proptest.workspace = true
6265
pretty_assertions = "1.4"

assembly-syntax/src/ast/procedure/name.rs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ use crate::{
3131
/// to an imported
3232
#[derive(Clone)]
3333
#[cfg_attr(feature = "arbitrary", derive(proptest_derive::Arbitrary))]
34+
#[cfg_attr(
35+
all(feature = "serde", feature = "arbitrary"),
36+
miden_serde_test_macros::serde_test
37+
)]
3438
pub struct QualifiedProcedureName {
3539
/// The source span associated with this identifier.
3640
#[cfg_attr(feature = "arbitrary", proptest(value = "SourceSpan::default()"))]
@@ -297,6 +301,10 @@ impl<'de> serde::Deserialize<'de> for QualifiedProcedureName {
297301
#[derive(Debug, Clone)]
298302
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
299303
#[cfg_attr(feature = "serde", serde(transparent))]
304+
#[cfg_attr(
305+
all(feature = "serde", feature = "arbitrary"),
306+
miden_serde_test_macros::serde_test
307+
)]
300308
pub struct ProcedureName(Ident);
301309

302310
impl ProcedureName {
@@ -518,24 +526,3 @@ impl proptest::prelude::Arbitrary for ProcedureName {
518526

519527
type Strategy = proptest::prelude::BoxedStrategy<Self>;
520528
}
521-
522-
// TESTS
523-
// ================================================================================================
524-
525-
/// Tests
526-
#[cfg(test)]
527-
mod tests {
528-
use miden_core::utils::{Deserializable, Serializable};
529-
use proptest::prelude::*;
530-
531-
use super::ProcedureName;
532-
533-
proptest! {
534-
#[test]
535-
fn procedure_name_serialization_roundtrip(path in any::<ProcedureName>()) {
536-
let bytes = path.to_bytes();
537-
let deserialized = ProcedureName::read_from_bytes(&bytes).unwrap();
538-
assert_eq!(path, deserialized);
539-
}
540-
}
541-
}

0 commit comments

Comments
 (0)