Skip to content

Commit fc82691

Browse files
committed
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.
1 parent 7691266 commit fc82691

1 file changed

Lines changed: 89 additions & 0 deletions

File tree

test/performance/perf_test.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ class TestFullDecoding(BsonDecodingTest, unittest.TestCase):
278278

279279

280280
# RUST COMPARISON MICRO-BENCHMARKS
281+
# These tests compare C vs Rust implementations for the same BSON operations
281282
class RustComparisonTest(PerformanceTest):
282283
"""Base class for tests that compare C vs Rust implementations."""
283284

@@ -423,6 +424,94 @@ class TestRustListEncodingRust(RustListEncodingTest, unittest.TestCase):
423424
implementation = "rust"
424425

425426

427+
# Rust comparison versions of standard BSON benchmarks
428+
# These use the same test data as the standard benchmarks but compare C vs Rust
429+
430+
431+
class RustFlatEncodingTest(RustComparisonTest, BsonEncodingTest):
432+
"""Rust comparison for flat BSON encoding."""
433+
434+
dataset = "flat_bson.json"
435+
436+
437+
class TestRustFlatEncodingC(RustFlatEncodingTest, unittest.TestCase):
438+
implementation = "c"
439+
440+
441+
class TestRustFlatEncodingRust(RustFlatEncodingTest, unittest.TestCase):
442+
implementation = "rust"
443+
444+
445+
class RustFlatDecodingTest(RustComparisonTest, BsonDecodingTest):
446+
"""Rust comparison for flat BSON decoding."""
447+
448+
dataset = "flat_bson.json"
449+
450+
451+
class TestRustFlatDecodingC(RustFlatDecodingTest, unittest.TestCase):
452+
implementation = "c"
453+
454+
455+
class TestRustFlatDecodingRust(RustFlatDecodingTest, unittest.TestCase):
456+
implementation = "rust"
457+
458+
459+
class RustDeepEncodingTest(RustComparisonTest, BsonEncodingTest):
460+
"""Rust comparison for deep BSON encoding."""
461+
462+
dataset = "deep_bson.json"
463+
464+
465+
class TestRustDeepEncodingC(RustDeepEncodingTest, unittest.TestCase):
466+
implementation = "c"
467+
468+
469+
class TestRustDeepEncodingRust(RustDeepEncodingTest, unittest.TestCase):
470+
implementation = "rust"
471+
472+
473+
class RustDeepDecodingTest(RustComparisonTest, BsonDecodingTest):
474+
"""Rust comparison for deep BSON decoding."""
475+
476+
dataset = "deep_bson.json"
477+
478+
479+
class TestRustDeepDecodingC(RustDeepDecodingTest, unittest.TestCase):
480+
implementation = "c"
481+
482+
483+
class TestRustDeepDecodingRust(RustDeepDecodingTest, unittest.TestCase):
484+
implementation = "rust"
485+
486+
487+
class RustFullEncodingTest(RustComparisonTest, BsonEncodingTest):
488+
"""Rust comparison for full BSON encoding."""
489+
490+
dataset = "full_bson.json"
491+
492+
493+
class TestRustFullEncodingC(RustFullEncodingTest, unittest.TestCase):
494+
implementation = "c"
495+
496+
497+
class TestRustFullEncodingRust(RustFullEncodingTest, unittest.TestCase):
498+
implementation = "rust"
499+
500+
501+
class RustFullDecodingTest(RustComparisonTest, BsonDecodingTest):
502+
"""Rust comparison for full BSON decoding."""
503+
504+
dataset = "full_bson.json"
505+
506+
507+
class TestRustFullDecodingC(RustFullDecodingTest, unittest.TestCase):
508+
implementation = "c"
509+
510+
511+
class TestRustFullDecodingRust(RustFullDecodingTest, unittest.TestCase):
512+
implementation = "rust"
513+
514+
426515
# JSON MICRO-BENCHMARKS
427516
class JsonEncodingTest(MicroTest):
428517
def setUp(self):

0 commit comments

Comments
 (0)