suture_driver/
strategy.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum MergeStrategy {
5 FullSemantic,
7 KeyPathOnly,
9 SectionBased,
11}
12
13pub fn optimal_merge_strategy(file_size: usize) -> MergeStrategy {
25 if file_size < 1024 {
26 MergeStrategy::FullSemantic
27 } else if file_size < 100_000 {
28 MergeStrategy::KeyPathOnly
29 } else {
30 MergeStrategy::SectionBased
31 }
32}
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn test_small_file() {
40 assert_eq!(optimal_merge_strategy(512), MergeStrategy::FullSemantic);
41 }
42
43 #[test]
44 fn test_boundary_small() {
45 assert_eq!(optimal_merge_strategy(1023), MergeStrategy::FullSemantic);
46 }
47
48 #[test]
49 fn test_medium_file() {
50 assert_eq!(optimal_merge_strategy(2048), MergeStrategy::KeyPathOnly);
51 }
52
53 #[test]
54 fn test_boundary_medium() {
55 assert_eq!(optimal_merge_strategy(99_999), MergeStrategy::KeyPathOnly);
56 }
57
58 #[test]
59 fn test_large_file() {
60 assert_eq!(optimal_merge_strategy(100_000), MergeStrategy::SectionBased);
61 }
62
63 #[test]
64 fn test_very_large_file() {
65 assert_eq!(optimal_merge_strategy(10_000_000), MergeStrategy::SectionBased);
66 }
67
68 #[test]
69 fn test_zero_size() {
70 assert_eq!(optimal_merge_strategy(0), MergeStrategy::FullSemantic);
71 }
72}