From: Graydon Hoare Date: Mon, 22 Jul 2013 23:50:36 +0000 (-0700) Subject: std: various additional language benchmarks in util. X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=d9c0634536c8ac6cd6309221b1bbd93517686aba;p=rust.git std: various additional language benchmarks in util. --- diff --git a/src/libstd/util.rs b/src/libstd/util.rs index 5ae45b74dd8..8fcfa083cb6 100644 --- a/src/libstd/util.rs +++ b/src/libstd/util.rs @@ -195,3 +195,68 @@ fn drop(&self) { unsafe { assert_eq!(did_run, true); } } } + +/// Completely miscellaneous language-construct benchmarks. +#[cfg(test)] +mod bench { + + use extra::test::BenchHarness; + use option::{Some,None}; + + // Static/dynamic method dispatch + + struct Struct { + field: int + } + + trait Trait { + fn method(&self) -> int; + } + + impl Trait for Struct { + fn method(&self) -> int { + self.field + } + } + + #[bench] + fn trait_vtable_method_call(bh: &mut BenchHarness) { + let s = Struct { field: 10 }; + let t = &s as &Trait; + do bh.iter { + t.method(); + } + } + + #[bench] + fn trait_static_method_call(bh: &mut BenchHarness) { + let s = Struct { field: 10 }; + do bh.iter { + s.method(); + } + } + + // Overhead of various match forms + + #[bench] + fn match_option_some(bh: &mut BenchHarness) { + let x = Some(10); + do bh.iter { + let _q = match x { + Some(y) => y, + None => 11 + }; + } + } + + #[bench] + fn match_vec_pattern(bh: &mut BenchHarness) { + let x = [1,2,3,4,5,6]; + do bh.iter { + let _q = match x { + [1,2,3,.._] => 10, + _ => 11 + }; + } + } +}