#!/usr/bin/perl -w # generate_random_line_edits.pl - Don Yang (uguu.org) # # Generate event log with focus on inserting/deleting lines. # # 06/28/11 use strict; use constant FILE_SIZE => 128; my @lines = (); for(my $frame = 0; $frame < 1000; $frame++) { # Apply edits my $current_size = scalar @lines; if( $current_size == 0 ) { # Append lines if file is currently empty my $target_size = int(rand(FILE_SIZE) + FILE_SIZE / 2); print "Init $target_size\n"; for(my $i = 0; $i < $target_size; $i++) { push @lines, int(rand(2)); } } elsif( $current_size < FILE_SIZE ) { # Insert lines if current file is too small for(my $insert_size = int(rand(FILE_SIZE * 1.5 - $current_size + 1) + 2); $insert_size > 0; $insert_size--) { my $offset = int(rand(scalar @lines)); print "Insert $offset\n"; my @tail = splice @lines, $offset; push @lines, int(rand(2)), @tail; } } else { # Delete lines if current file is too large do { my $length = int(rand($current_size)) + 1; my $offset = int(rand($current_size - $length)); print "Delete $offset, $length\n"; splice @lines, $offset, $length; $current_size -= $length; } while( $current_size > FILE_SIZE ); } # Output snapshot print "Y1X1F${frame}T${frame}\n"; for(my $i = 0; $i <= $#lines; $i++) { print "L", $i + 1, "E", (scalar @lines), "=", $lines[$i], "\n"; } }