44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
(library
 | 
						|
  (era-xml)
 | 
						|
  (export generate-xml)
 | 
						|
  (import (rnrs)
 | 
						|
          (list-utils)
 | 
						|
          (fmt fmt)
 | 
						|
          (generators)
 | 
						|
          (xml)
 | 
						|
          (srfi s27 random-bits)
 | 
						|
          (only (srfi s1 lists) iota))
 | 
						|
 | 
						|
  (define (rand-percent pc)
 | 
						|
    (if (< (random-integer 100) pc)
 | 
						|
        "true"
 | 
						|
        "false"))
 | 
						|
 | 
						|
  (define (generate-writeset era nr-bits)
 | 
						|
    (tag 'writeset `((era . ,era)
 | 
						|
                     (nr-bits . , nr-bits))
 | 
						|
         (vcat
 | 
						|
           (map (lambda (bit)
 | 
						|
                  (tag 'bit `((block . ,bit)
 | 
						|
                              (value . ,(rand-percent 10)))))
 | 
						|
                (iota nr-bits)))))
 | 
						|
 | 
						|
  (define (generate-xml block-size nr-blocks current-era nr-writesets)
 | 
						|
    (tag 'superblock `((uuid . "")
 | 
						|
                       (block-size . ,block-size)
 | 
						|
                       (nr-blocks . ,nr-blocks)
 | 
						|
                       (current-era . ,current-era))
 | 
						|
           (cat
 | 
						|
             (vcat
 | 
						|
               (map (lambda (ws)
 | 
						|
                      (generate-writeset (- current-era ws) nr-blocks))
 | 
						|
                    (iota nr-writesets)))
 | 
						|
             nl
 | 
						|
             (tag 'era-array '()
 | 
						|
                  (vcat
 | 
						|
                    (map (lambda (n)
 | 
						|
                           (tag 'era `((block . ,n)
 | 
						|
                                       (era . ,(random-integer current-era)))))
 | 
						|
                         (iota nr-blocks)))))))
 | 
						|
  )
 |