@@ -255,4 +255,78 @@ mod tests {
255255 hash : Field :: BackReference ( 0 , 0 ) ,
256256 } ) ) . unwrap ( ) ;
257257 }
258+
259+ #[ test]
260+ fn batch_tx_index_backreference ( ) {
261+ let mut builder = Builder :: default ( ) ;
262+ builder. push ( Request :: HeaderProof ( IncompleteHeaderProofRequest {
263+ num : 100 . into ( ) , // header proof puts hash at output 0.
264+ } ) ) . unwrap ( ) ;
265+ builder. push ( Request :: TransactionIndex ( IncompleteTransactionIndexRequest {
266+ hash : Field :: BackReference ( 0 , 0 ) ,
267+ } ) ) . unwrap ( ) ;
268+
269+ let mut batch = builder. build ( ) ;
270+ batch. requests [ 1 ] . fill ( |_req_idx, _out_idx| Ok ( Output :: Hash ( 42 . into ( ) ) ) ) ;
271+
272+ assert ! ( batch. next_complete( ) . is_some( ) ) ;
273+ batch. answered += 1 ;
274+ assert ! ( batch. next_complete( ) . is_some( ) ) ;
275+ }
276+
277+ #[ test]
278+ #[ should_panic]
279+ fn batch_tx_index_backreference_wrong_output ( ) {
280+ let mut builder = Builder :: default ( ) ;
281+ builder. push ( Request :: HeaderProof ( IncompleteHeaderProofRequest {
282+ num : 100 . into ( ) , // header proof puts hash at output 0.
283+ } ) ) . unwrap ( ) ;
284+ builder. push ( Request :: TransactionIndex ( IncompleteTransactionIndexRequest {
285+ hash : Field :: BackReference ( 0 , 0 ) ,
286+ } ) ) . unwrap ( ) ;
287+
288+ let mut batch = builder. build ( ) ;
289+ batch. requests [ 1 ] . fill ( |_req_idx, _out_idx| Ok ( Output :: Number ( 42 ) ) ) ;
290+
291+ batch. next_complete ( ) ;
292+ batch. answered += 1 ;
293+ batch. next_complete ( ) ;
294+ }
295+
296+ #[ test]
297+ fn batch_receipts_backreference ( ) {
298+ let mut builder = Builder :: default ( ) ;
299+ builder. push ( Request :: HeaderProof ( IncompleteHeaderProofRequest {
300+ num : 100 . into ( ) , // header proof puts hash at output 0.
301+ } ) ) . unwrap ( ) ;
302+ builder. push ( Request :: Receipts ( IncompleteReceiptsRequest {
303+ hash : Field :: BackReference ( 0 , 0 ) ,
304+ } ) ) . unwrap ( ) ;
305+
306+ let mut batch = builder. build ( ) ;
307+ batch. requests [ 1 ] . fill ( |_req_idx, _out_idx| Ok ( Output :: Hash ( 42 . into ( ) ) ) ) ;
308+
309+ assert ! ( batch. next_complete( ) . is_some( ) ) ;
310+ batch. answered += 1 ;
311+ assert ! ( batch. next_complete( ) . is_some( ) ) ;
312+ }
313+
314+ #[ test]
315+ #[ should_panic]
316+ fn batch_receipts_backreference_wrong_output ( ) {
317+ let mut builder = Builder :: default ( ) ;
318+ builder. push ( Request :: HeaderProof ( IncompleteHeaderProofRequest {
319+ num : 100 . into ( ) , // header proof puts hash at output 0.
320+ } ) ) . unwrap ( ) ;
321+ builder. push ( Request :: Receipts ( IncompleteReceiptsRequest {
322+ hash : Field :: BackReference ( 0 , 0 ) ,
323+ } ) ) . unwrap ( ) ;
324+
325+ let mut batch = builder. build ( ) ;
326+ batch. requests [ 1 ] . fill ( |_req_idx, _out_idx| Ok ( Output :: Number ( 42 ) ) ) ;
327+
328+ batch. next_complete ( ) ;
329+ batch. answered += 1 ;
330+ batch. next_complete ( ) ;
331+ }
258332}
0 commit comments