Guest User

Untitled

a guest
Dec 14th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. #![feature(test)]
  2. extern crate test;
  3. use test::Bencher;
  4.  
  5. pub fn bounds() {
  6. let mut pos = 0;
  7. let data = vec![1,2,3,4,5,6,7,8,9,10];
  8.  
  9. loop {
  10. let stuff = data[pos];
  11. if stuff == 10 { break }
  12. pos += 3;
  13. while pos >= data.len() { pos -= data.len() }
  14. }
  15. }
  16.  
  17. pub fn nobounds() {
  18. let mut pos = 0;
  19. let data = vec![1,2,3,4,5,6,7,8,9,10];
  20.  
  21. loop {
  22. while pos >= data.len() { pos -= data.len() }
  23. let stuff = data[pos];
  24. if stuff == 10 { break }
  25. pos += 3;
  26. }
  27. }
  28.  
  29. pub fn noboundsunsafe() {
  30. let mut pos = 0;
  31. let data = vec![1,2,3,4,5,6,7,8,9,10];
  32.  
  33. loop {
  34. while pos >= data.len() { pos -= data.len() }
  35. let stuff = unsafe { *data.get_unchecked(pos) };
  36. if stuff == 10 { break }
  37. pos += 3;
  38. }
  39. }
  40.  
  41. fn main() {
  42. println!("Hello, world!");
  43. }
  44.  
  45. #[bench]
  46. fn bench_bounds(b: &mut Bencher) {
  47. b.iter(|| {
  48. bounds()
  49. });
  50. }
  51. #[bench]
  52. fn bench_nobounds(b: &mut Bencher) {
  53. b.iter(|| {
  54. nobounds()
  55. });
  56. }
  57. #[bench]
  58. fn bench_noboundsunsafe(b: &mut Bencher) {
  59. b.iter(|| {
  60. noboundsunsafe()
  61. });
  62. }
  63.  
  64. /*
  65. running 3 tests
  66. test bench_bounds ... bench: 85 ns/iter (+/- 4)
  67. test bench_nobounds ... bench: 76 ns/iter (+/- 6)
  68. test bench_noboundsunsafe ... bench: 77 ns/iter (+/- 11)
  69.  
  70. test result: ok. 0 passed; 0 failed; 0 ignored; 3 measured; 0 filtered out
  71. */
Add Comment
Please, Sign In to add comment