1 #![feature(test)] 2 3 extern crate test; 4 extern crate unicode_normalization; 5 6 use std::fs; 7 use test::Bencher; 8 use unicode_normalization::UnicodeNormalization; 9 10 const ASCII: &'static str = "all types of normalized"; 11 const NFC: &'static str = "Introducci\u{00f3}n a Unicode.pdf"; 12 const NFD: &'static str = "Introduccio\u{0301}n a Unicode.pdf"; 13 14 #[bench] bench_is_nfc_ascii(b: &mut Bencher)15fn bench_is_nfc_ascii(b: &mut Bencher) { 16 b.iter(|| unicode_normalization::is_nfc(ASCII)); 17 } 18 19 #[bench] bench_is_nfc_normalized(b: &mut Bencher)20fn bench_is_nfc_normalized(b: &mut Bencher) { 21 b.iter(|| unicode_normalization::is_nfc(NFC)); 22 } 23 24 #[bench] bench_is_nfc_not_normalized(b: &mut Bencher)25fn bench_is_nfc_not_normalized(b: &mut Bencher) { 26 b.iter(|| unicode_normalization::is_nfc(NFD)); 27 } 28 29 #[bench] bench_is_nfd_ascii(b: &mut Bencher)30fn bench_is_nfd_ascii(b: &mut Bencher) { 31 b.iter(|| unicode_normalization::is_nfd(ASCII)); 32 } 33 34 #[bench] bench_is_nfd_normalized(b: &mut Bencher)35fn bench_is_nfd_normalized(b: &mut Bencher) { 36 b.iter(|| unicode_normalization::is_nfd(NFD)); 37 } 38 39 #[bench] bench_is_nfd_not_normalized(b: &mut Bencher)40fn bench_is_nfd_not_normalized(b: &mut Bencher) { 41 b.iter(|| unicode_normalization::is_nfd(NFC)); 42 } 43 44 #[bench] bench_is_nfc_stream_safe_ascii(b: &mut Bencher)45fn bench_is_nfc_stream_safe_ascii(b: &mut Bencher) { 46 b.iter(|| unicode_normalization::is_nfc_stream_safe(ASCII)); 47 } 48 49 #[bench] bench_is_nfc_stream_safe_normalized(b: &mut Bencher)50fn bench_is_nfc_stream_safe_normalized(b: &mut Bencher) { 51 b.iter(|| unicode_normalization::is_nfc_stream_safe(NFC)); 52 } 53 54 #[bench] bench_is_nfc_stream_safe_not_normalized(b: &mut Bencher)55fn bench_is_nfc_stream_safe_not_normalized(b: &mut Bencher) { 56 b.iter(|| unicode_normalization::is_nfc_stream_safe(NFD)); 57 } 58 59 #[bench] bench_is_nfd_stream_safe_ascii(b: &mut Bencher)60fn bench_is_nfd_stream_safe_ascii(b: &mut Bencher) { 61 b.iter(|| unicode_normalization::is_nfd_stream_safe(ASCII)); 62 } 63 64 #[bench] bench_is_nfd_stream_safe_normalized(b: &mut Bencher)65fn bench_is_nfd_stream_safe_normalized(b: &mut Bencher) { 66 b.iter(|| unicode_normalization::is_nfd_stream_safe(NFD)); 67 } 68 69 #[bench] bench_is_nfd_stream_safe_not_normalized(b: &mut Bencher)70fn bench_is_nfd_stream_safe_not_normalized(b: &mut Bencher) { 71 b.iter(|| unicode_normalization::is_nfd_stream_safe(NFC)); 72 } 73 74 #[bench] bench_nfc_ascii(b: &mut Bencher)75fn bench_nfc_ascii(b: &mut Bencher) { 76 b.iter(|| ASCII.nfc().count()); 77 } 78 79 #[bench] bench_nfd_ascii(b: &mut Bencher)80fn bench_nfd_ascii(b: &mut Bencher) { 81 b.iter(|| ASCII.nfd().count()); 82 } 83 84 #[bench] bench_nfc_long(b: &mut Bencher)85fn bench_nfc_long(b: &mut Bencher) { 86 let long = fs::read_to_string("benches/long.txt").unwrap(); 87 b.iter(|| long.nfc().count()); 88 } 89 90 #[bench] bench_nfd_long(b: &mut Bencher)91fn bench_nfd_long(b: &mut Bencher) { 92 let long = fs::read_to_string("benches/long.txt").unwrap(); 93 b.iter(|| long.nfd().count()); 94 } 95 96 #[bench] bench_nfkc_ascii(b: &mut Bencher)97fn bench_nfkc_ascii(b: &mut Bencher) { 98 b.iter(|| ASCII.nfkc().count()); 99 } 100 101 #[bench] bench_nfkd_ascii(b: &mut Bencher)102fn bench_nfkd_ascii(b: &mut Bencher) { 103 b.iter(|| ASCII.nfkd().count()); 104 } 105 106 #[bench] bench_nfkc_long(b: &mut Bencher)107fn bench_nfkc_long(b: &mut Bencher) { 108 let long = fs::read_to_string("benches/long.txt").unwrap(); 109 b.iter(|| long.nfkc().count()); 110 } 111 112 #[bench] bench_nfkd_long(b: &mut Bencher)113fn bench_nfkd_long(b: &mut Bencher) { 114 let long = fs::read_to_string("benches/long.txt").unwrap(); 115 b.iter(|| long.nfkd().count()); 116 } 117 118 #[bench] bench_streamsafe_ascii(b: &mut Bencher)119fn bench_streamsafe_ascii(b: &mut Bencher) { 120 b.iter(|| ASCII.stream_safe().count()); 121 } 122 123 #[bench] bench_streamsafe_adversarial(b: &mut Bencher)124fn bench_streamsafe_adversarial(b: &mut Bencher) { 125 let s = "bo\u{0300}\u{0301}\u{0302}\u{0303}\u{0304}\u{0305}\u{0306}\u{0307}\u{0308}\u{0309}\u{030a}\u{030b}\u{030c}\u{030d}\u{030e}\u{030f}\u{0310}\u{0311}\u{0312}\u{0313}\u{0314}\u{0315}\u{0316}\u{0317}\u{0318}\u{0319}\u{031a}\u{031b}\u{031c}\u{031d}\u{032e}oom"; 126 b.iter(|| s.stream_safe().count()); 127 } 128