From c4cdf2c186098bbf0e329271deb7ae74b9f6b1d5 Mon Sep 17 00:00:00 2001 From: "Jeffrey A. Clark" Date: Tue, 17 Feb 2026 11:01:26 -0500 Subject: [PATCH] Add Rust comparison tests for standard BSON benchmarks Added Rust vs C comparison versions for all standard BSON micro-benchmarks: - Flat encoding/decoding (TestRustFlat*) - Deep encoding/decoding (TestRustDeep*) - Full encoding/decoding (TestRustFull*) These tests use the same test data as the standard benchmarks but explicitly compare C vs Rust implementations. Each benchmark has two versions: - *C: Uses C extension (implementation = 'c') - *Rust: Uses Rust extension (implementation = 'rust') The RustComparisonTest base class handles switching between implementations by setting/unsetting PYMONGO_USE_RUST environment variable and reloading the bson module. This provides comprehensive performance comparison data between the C and Rust BSON implementations across all standard benchmark datasets. --- test/performance/perf_test.py | 89 +++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/test/performance/perf_test.py b/test/performance/perf_test.py index 6a06509f0..59653f5b2 100644 --- a/test/performance/perf_test.py +++ b/test/performance/perf_test.py @@ -278,6 +278,7 @@ class TestFullDecoding(BsonDecodingTest, unittest.TestCase): # RUST COMPARISON MICRO-BENCHMARKS +# These tests compare C vs Rust implementations for the same BSON operations class RustComparisonTest(PerformanceTest): """Base class for tests that compare C vs Rust implementations.""" @@ -423,6 +424,94 @@ class TestRustListEncodingRust(RustListEncodingTest, unittest.TestCase): implementation = "rust" +# Rust comparison versions of standard BSON benchmarks +# These use the same test data as the standard benchmarks but compare C vs Rust + + +class RustFlatEncodingTest(RustComparisonTest, BsonEncodingTest): + """Rust comparison for flat BSON encoding.""" + + dataset = "flat_bson.json" + + +class TestRustFlatEncodingC(RustFlatEncodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustFlatEncodingRust(RustFlatEncodingTest, unittest.TestCase): + implementation = "rust" + + +class RustFlatDecodingTest(RustComparisonTest, BsonDecodingTest): + """Rust comparison for flat BSON decoding.""" + + dataset = "flat_bson.json" + + +class TestRustFlatDecodingC(RustFlatDecodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustFlatDecodingRust(RustFlatDecodingTest, unittest.TestCase): + implementation = "rust" + + +class RustDeepEncodingTest(RustComparisonTest, BsonEncodingTest): + """Rust comparison for deep BSON encoding.""" + + dataset = "deep_bson.json" + + +class TestRustDeepEncodingC(RustDeepEncodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustDeepEncodingRust(RustDeepEncodingTest, unittest.TestCase): + implementation = "rust" + + +class RustDeepDecodingTest(RustComparisonTest, BsonDecodingTest): + """Rust comparison for deep BSON decoding.""" + + dataset = "deep_bson.json" + + +class TestRustDeepDecodingC(RustDeepDecodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustDeepDecodingRust(RustDeepDecodingTest, unittest.TestCase): + implementation = "rust" + + +class RustFullEncodingTest(RustComparisonTest, BsonEncodingTest): + """Rust comparison for full BSON encoding.""" + + dataset = "full_bson.json" + + +class TestRustFullEncodingC(RustFullEncodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustFullEncodingRust(RustFullEncodingTest, unittest.TestCase): + implementation = "rust" + + +class RustFullDecodingTest(RustComparisonTest, BsonDecodingTest): + """Rust comparison for full BSON decoding.""" + + dataset = "full_bson.json" + + +class TestRustFullDecodingC(RustFullDecodingTest, unittest.TestCase): + implementation = "c" + + +class TestRustFullDecodingRust(RustFullDecodingTest, unittest.TestCase): + implementation = "rust" + + # JSON MICRO-BENCHMARKS class JsonEncodingTest(MicroTest): def setUp(self):