1717#[ macro_use]
1818extern crate bencher;
1919
20- use bencher:: { Bencher , black_box } ;
20+ use bencher:: { black_box , Bencher } ;
2121
2222use celma_v0_core:: parser:: and:: AndOperation ;
2323use celma_v0_core:: parser:: char:: { digit, space} ;
2424use celma_v0_core:: parser:: core:: eos;
2525use celma_v0_core:: parser:: literal:: delimited_string;
2626use celma_v0_core:: parser:: response:: Response :: { Reject , Success } ;
2727use celma_v0_core:: parser:: specs:: Parse ;
28- use celma_v0_core:: stream:: char_stream :: CharStream ;
28+ use celma_v0_core:: stream:: array_stream :: ArrayStream ;
2929use celma_v0_core:: stream:: position:: Position ;
3030use celma_v0_core:: stream:: specs:: Stream ;
3131use celma_v0_macro:: parsec_rules;
@@ -59,7 +59,7 @@ fn mk_f64(a: Vec<char>) -> f64 {
5959}
6060
6161parsec_rules ! (
62- let json: { JSON } = S _=( array | object | string | null | boolean | number ) S
62+ let json: { JSON } = S _=( string | number | boolean | null | array | object ) S
6363 let number: { JSON } = f=NUMBER -> { JSON :: Number ( f) }
6464 let string: { JSON } = s=STRING -> { JSON :: String ( s) }
6565 let null: { JSON } = "null" -> { JSON :: Null }
@@ -82,46 +82,58 @@ parsec_rules!(
8282// -------------------------------------------------------------------------------------------------
8383
8484fn json_data ( b : & mut Bencher ) {
85- let data = include_str ! ( "data/data.json" ) ;
85+ let vec = include_str ! ( "data/data.json" )
86+ . chars ( )
87+ . collect :: < Vec < char > > ( ) ;
88+ let data = vec. as_slice ( ) ;
8689 b. bytes = data. len ( ) as u64 ;
8790 parse ( b, data)
8891}
8992
9093// -------------------------------------------------------------------------------------------------
9194
9295fn json_canada_pest ( b : & mut Bencher ) {
93- let data = include_str ! ( "data/canada_pest.json" ) ;
96+ let vec = include_str ! ( "data/canada_pest.json" )
97+ . chars ( )
98+ . collect :: < Vec < char > > ( ) ;
99+ let data = vec. as_slice ( ) ;
94100 b. bytes = data. len ( ) as u64 ;
95101 parse ( b, data)
96102}
97103
98104// -------------------------------------------------------------------------------------------------
99105
100106fn json_canada_nom ( b : & mut Bencher ) {
101- let data = include_str ! ( "data/canada_nom.json" ) ;
107+ let vec = include_str ! ( "data/canada_nom.json" )
108+ . chars ( )
109+ . collect :: < Vec < char > > ( ) ;
110+ let data = vec. as_slice ( ) ;
102111 b. bytes = data. len ( ) as u64 ;
103112 parse ( b, data)
104113}
105114
106115// -------------------------------------------------------------------------------------------------
107116
108117fn json_apache ( b : & mut Bencher ) {
109- let data = include_str ! ( "data/apache_builds.json" ) ;
118+ let vec = include_str ! ( "data/apache_builds.json" )
119+ . chars ( )
120+ . collect :: < Vec < char > > ( ) ;
121+ let data = vec. as_slice ( ) ;
110122 b. bytes = data. len ( ) as u64 ;
111123 parse ( b, data)
112124}
113125
114126// -------------------------------------------------------------------------------------------------
115127
116- fn parse ( b : & mut Bencher , buffer : & str ) {
117- let stream = CharStream :: new_with_position ( buffer, <usize >:: new ( ) ) ;
128+ fn parse ( b : & mut Bencher , buffer : & [ char ] ) {
129+ let stream = ArrayStream :: new_with_position ( buffer, <usize >:: new ( ) ) ;
118130
119131 b. iter ( || {
120132 let response = json ( ) . and_left ( eos ( ) ) . parse ( black_box ( stream. clone ( ) ) ) ;
121133
122134 match response {
123135 Success ( _, _, _) => ( ) ,
124- Reject ( s, _) => panic ! ( "parse error at {:?}" , s. position( ) ) ,
136+ Reject ( s, _) => panic ! ( "parse error for {:?} at {:?}" , s . next ( ) . 0 , s. position( ) ) ,
125137 }
126138 } ) ;
127139}
0 commit comments