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.
This commit is contained in:
Jeffrey A. Clark 2026-02-17 11:01:26 -05:00 committed by Jeffrey 'Alex' Clark
parent 5dc88359d2
commit c4cdf2c186

View File

@ -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):