about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCarl-Anton Ingmarsson <mail@carlanton.se>2014-01-02 19:48:30 +0100
committerCarl-Anton Ingmarsson <mail@carlanton.se>2014-01-02 23:22:47 +0100
commit3250e655007a2140898d46c04df0f48c2f149dd2 (patch)
tree75331804ad966fffbe66cf12f0b00c3bc60ce99e
parent0df9b850ac1ed3abd0ff5abfbb716af83501dd5a (diff)
downloadrust-3250e655007a2140898d46c04df0f48c2f149dd2.tar.gz
rust-3250e655007a2140898d46c04df0f48c2f149dd2.zip
libextra: Add benchmarks for ebml::reader::vuint_at()
-rw-r--r--src/libextra/ebml.rs84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/libextra/ebml.rs b/src/libextra/ebml.rs
index b63f7e495b9..4a47af46afe 100644
--- a/src/libextra/ebml.rs
+++ b/src/libextra/ebml.rs
@@ -960,3 +960,87 @@ mod tests {
         test_v(Some(3));
     }
 }
+
+#[cfg(test)]
+mod bench {
+    use ebml::reader;
+    use test::BenchHarness;
+
+    #[bench]
+    pub fn vuint_at_A_aligned(bh: &mut BenchHarness) {
+        use std::vec;
+        let data = vec::from_fn(4*100, |i| {
+            match (i % 2) {
+              0 => 0x80u8,
+              _ => i as u8,
+            }
+        });
+        let mut sum = 0u;
+        bh.iter(|| {
+            let mut i = 0;
+            while (i < data.len()) {
+                sum += reader::vuint_at(data, i).val;
+                i += 4;
+            }
+        });
+    }
+
+    #[bench]
+    pub fn vuint_at_A_unaligned(bh: &mut BenchHarness) {
+        use std::vec;
+        let data = vec::from_fn(4*100+1, |i| {
+            match (i % 2) {
+              1 => 0x80u8,
+              _ => i as u8
+            }
+        });
+        let mut sum = 0u;
+        bh.iter(|| {
+            let mut i = 1;
+            while (i < data.len()) {
+                sum += reader::vuint_at(data, i).val;
+                i += 4;
+            }
+        });
+    }
+
+    #[bench]
+    pub fn vuint_at_D_aligned(bh: &mut BenchHarness) {
+        use std::vec;
+        let data = vec::from_fn(4*100, |i| {
+            match (i % 4) {
+              0 => 0x10u8,
+              3 => i as u8,
+              _ => 0u8
+            }
+        });
+        let mut sum = 0u;
+        bh.iter(|| {
+            let mut i = 0;
+            while (i < data.len()) {
+                sum += reader::vuint_at(data, i).val;
+                i += 4;
+            }
+        });
+    }
+
+    #[bench]
+    pub fn vuint_at_D_unaligned(bh: &mut BenchHarness) {
+        use std::vec;
+        let data = vec::from_fn(4*100+1, |i| {
+            match (i % 4) {
+              1 => 0x10u8,
+              0 => i as u8,
+              _ => 0u8
+            }
+        });
+        let mut sum = 0u;
+        bh.iter(|| {
+            let mut i = 1;
+            while (i < data.len()) {
+                sum += reader::vuint_at(data, i).val;
+                i += 4;
+            }
+        });
+    }
+}