@@ -215,14 +215,35 @@ pub fn get_witness_from_env_or_builder(
215215
216216/// preset examples for single task
217217pub fn preset_chunk ( ) -> ChunkTaskGenerator {
218- let ( version, block_range) = match testing_hardfork ( ) {
218+ let ( version, mut block_range) = match testing_hardfork ( ) {
219219 ForkName :: EuclidV1 => ( Version :: euclid_v1 ( ) , 12508460u64 ..=12508463u64 ) ,
220220 ForkName :: EuclidV2 => ( Version :: euclid_v2 ( ) , 1u64 ..=4u64 ) ,
221221 ForkName :: Feynman => ( Version :: feynman ( ) , 16525000u64 ..=16525003u64 ) ,
222222 ForkName :: Galileo => ( Version :: galileo ( ) , 20239156 ..=20239235 ) ,
223223 ForkName :: GalileoV2 => ( Version :: galileo_v2 ( ) , 20239240 ..=20239245 ) ,
224224 } ;
225225
226+ // If the BLOCK_RANGE env var is set, use that instead.
227+ if let Ok ( r) = std:: env:: var ( "BLOCK_RANGE" ) {
228+ if r. contains ( "..=" ) {
229+ let parts: Vec < & str > = r. split ( "..=" ) . collect ( ) ;
230+ if parts. len ( ) != 2 {
231+ panic ! ( "invalid BLOCK_RANGE, expect start..=end, found = {r}" ) ;
232+ }
233+ let start = parts[ 0 ]
234+ . trim ( )
235+ . parse :: < u64 > ( )
236+ . expect ( "BLOCK_RANGE start not a number" ) ;
237+ let end = parts[ 1 ]
238+ . trim ( )
239+ . parse :: < u64 > ( )
240+ . expect ( "BLOCK_RANGE end not a number" ) ;
241+ block_range = start..=end;
242+ } else {
243+ panic ! ( "invalid BLOCK_RANGE, expect start..=end, found = {r}" ) ;
244+ }
245+ }
246+
226247 ChunkTaskGenerator {
227248 version,
228249 block_range : block_range. collect ( ) ,
@@ -257,52 +278,66 @@ pub fn create_canonical_tasks(
257278
258279/// preset examples for multiple task
259280pub fn preset_chunk_multiple ( ) -> Vec < ChunkTaskGenerator > {
260- static PRESET_RESULT : std:: sync:: OnceLock < Vec < ChunkTaskGenerator > > = std:: sync:: OnceLock :: new ( ) ;
261-
262- PRESET_RESULT
263- . get_or_init ( || {
264- let ( block_range, version) = match testing_hardfork ( ) {
265- ForkName :: EuclidV1 => (
266- vec ! [
267- 12508460u64 ..=12508460u64 ,
268- 12508461u64 ..=12508461u64 ,
269- 12508462u64 ..=12508463u64 ,
270- ] ,
271- Version :: euclid_v1 ( ) ,
272- ) ,
273- ForkName :: EuclidV2 => (
274- vec ! [ 1u64 ..=1u64 , 2u64 ..=2u64 , 3u64 ..=4u64 ] ,
275- Version :: euclid_v2 ( ) ,
276- ) ,
277- ForkName :: Feynman => (
278- vec ! [
279- 16525000u64 ..=16525000u64 ,
280- 16525001u64 ..=16525001u64 ,
281- 16525002u64 ..=16525003u64 ,
282- ] ,
283- Version :: feynman ( ) ,
284- ) ,
285- ForkName :: Galileo => (
286- vec ! [
287- 20239220 ..=20239220 ,
288- 20239221 ..=20239221 ,
289- 20239222 ..=20239222 ,
290- ] ,
291- Version :: galileo ( ) ,
292- ) ,
293- ForkName :: GalileoV2 => (
294- vec ! [
295- 20239240 ..=20239240 ,
296- 20239241 ..=20239241 ,
297- 20239242 ..=20239242 ,
298- ] ,
299- Version :: galileo_v2 ( ) ,
300- ) ,
301- } ;
302- create_canonical_tasks ( version, block_range. into_iter ( ) )
303- . expect ( "must success for preset collections" )
304- } )
305- . clone ( )
281+ let ( mut block_range, version) = match testing_hardfork ( ) {
282+ ForkName :: EuclidV1 => (
283+ vec ! [
284+ 12508460u64 ..=12508460u64 ,
285+ 12508461u64 ..=12508461u64 ,
286+ 12508462u64 ..=12508463u64 ,
287+ ] ,
288+ Version :: euclid_v1 ( ) ,
289+ ) ,
290+ ForkName :: EuclidV2 => (
291+ vec ! [ 1u64 ..=1u64 , 2u64 ..=2u64 , 3u64 ..=4u64 ] ,
292+ Version :: euclid_v2 ( ) ,
293+ ) ,
294+ ForkName :: Feynman => (
295+ vec ! [
296+ 16525000u64 ..=16525000u64 ,
297+ 16525001u64 ..=16525001u64 ,
298+ 16525002u64 ..=16525003u64 ,
299+ ] ,
300+ Version :: feynman ( ) ,
301+ ) ,
302+ ForkName :: Galileo => (
303+ vec ! [
304+ 20239220 ..=20239220 ,
305+ 20239221 ..=20239221 ,
306+ 20239222 ..=20239222 ,
307+ ] ,
308+ Version :: galileo ( ) ,
309+ ) ,
310+ ForkName :: GalileoV2 => (
311+ vec ! [
312+ 20239240 ..=20239240 ,
313+ 20239241 ..=20239241 ,
314+ 20239242 ..=20239242 ,
315+ ] ,
316+ Version :: galileo_v2 ( ) ,
317+ ) ,
318+ } ;
319+ // If the BLOCK_RANGE env var has been set, use that instead.
320+ if let Ok ( r) = std:: env:: var ( "BLOCK_RANGE" ) {
321+ block_range = r
322+ . split ( "," )
323+ . map ( |part| {
324+ let p = part. trim ( ) ;
325+ if let Some ( idx) = p. find ( "..=" ) {
326+ let start = & p[ ..idx] . trim ( ) ;
327+ let end = & p[ idx + 3 ..] . trim ( ) ;
328+ let a = start
329+ . parse :: < u64 > ( )
330+ . expect ( "BLOCK_RANGE start not a number" ) ;
331+ let b = end. parse :: < u64 > ( ) . expect ( "BLOCK_RANGE end not a number" ) ;
332+ a..=b
333+ } else {
334+ panic ! ( "invalid range syntax: {}" , p) ;
335+ }
336+ } )
337+ . collect ( ) ;
338+ }
339+ create_canonical_tasks ( version, block_range. into_iter ( ) )
340+ . expect ( "must success for preset collections" )
306341}
307342
308343pub fn preset_chunk_validium ( ) -> Vec < ChunkTaskGenerator > {
@@ -348,3 +383,54 @@ pub fn execute_multi(
348383 )
349384 }
350385}
386+
387+ #[ cfg( test) ]
388+ mod tests {
389+ use crate :: testers:: chunk:: { preset_chunk, preset_chunk_multiple} ;
390+
391+ #[ test]
392+ fn test_presets ( ) {
393+ let single = preset_chunk ( ) ;
394+ assert_eq ! (
395+ single. block_range,
396+ ( 20239240u64 ..=20239245 ) . collect:: <Vec <u64 >>( ) ,
397+ ) ;
398+ let multiple = preset_chunk_multiple ( ) ;
399+ assert_eq ! (
400+ multiple[ 0 ] . block_range,
401+ ( 20239240 ..=20239240 ) . collect:: <Vec <u64 >>( ) ,
402+ ) ;
403+ assert_eq ! (
404+ multiple[ 1 ] . block_range,
405+ ( 20239241 ..=20239241 ) . collect:: <Vec <u64 >>( ) ,
406+ ) ;
407+ assert_eq ! (
408+ multiple[ 2 ] . block_range,
409+ ( 20239242 ..=20239242 ) . collect:: <Vec <u64 >>( ) ,
410+ ) ;
411+
412+ // After setting env var.
413+ std:: env:: set_var ( "BLOCK_RANGE" , "123..=321" ) ;
414+ assert_eq ! (
415+ preset_chunk( ) . block_range,
416+ ( 123 ..=321 ) . collect:: <Vec <u64 >>( )
417+ ) ;
418+ std:: env:: set_var (
419+ "BLOCK_RANGE" ,
420+ "20239240..=20239241,20239242..=20239243,20239244..=20239245" ,
421+ ) ;
422+ let multiple = preset_chunk_multiple ( ) ;
423+ assert_eq ! (
424+ multiple[ 0 ] . block_range,
425+ ( 20239240u64 ..=20239241u64 ) . collect:: <Vec <u64 >>( )
426+ ) ;
427+ assert_eq ! (
428+ multiple[ 1 ] . block_range,
429+ ( 20239242u64 ..=20239243u64 ) . collect:: <Vec <u64 >>( )
430+ ) ;
431+ assert_eq ! (
432+ multiple[ 2 ] . block_range,
433+ ( 20239244u64 ..=20239245u64 ) . collect:: <Vec <u64 >>( )
434+ ) ;
435+ }
436+ }
0 commit comments