library("mosaic") library("dplyr") library("foreach") library("doParallel") #setup parallel backend to use many processors cores=detectCores() cl <- makeCluster(cores[1]-1) #not to overload your computer registerDoParallel(cl) args = commandArgs(trailingOnly=TRUE) if (length(args)==0) { runtype="timedump_253048_1873f6_all/timedump" target="waters_int" outputpath="~/code/FRET/LibAFL/fuzzers/FRET/benchmark/" #MY_SELECTION <- c('state', 'afl', 'graph', 'random') SAVE_FILE=TRUE } else { runtype=args[1] target=args[2] outputpath=args[3] MY_SELECTION <- args[4:length(args)] SAVE_FILE=TRUE } worst_cases <- list(waters=0, waters_int=0, tmr=405669, micro_longint=0) worst_case <- worst_cases[[target]] if (is.null(worst_case)) { worst_case = 0 } #MY_COLORS=c("green","blue","red", "orange", "pink", "black") MY_COLORS <- c("green", "blue", "red", "magenta", "orange", "cyan", "pink", "gray", "orange", "black", "yellow","brown") BENCHDIR=sprintf("~/code/FRET/LibAFL/fuzzers/FRET/benchmark/%s",runtype) BASENAMES=Filter(function(x) x!="" && substr(x,1,1)!='.',list.dirs(BENCHDIR,full.names=FALSE)) PATTERNS="%s.[0-9]*$" #RIBBON='sd' #RIBBON='span' RIBBON='both' DRAW_WC = worst_case > 0 LEGEND_POS="topright" #LEGEND_POS="bottomright" CONTINUE_LINE_TO_END=FALSE # https://www.r-bloggers.com/2013/04/how-to-change-the-alpha-value-of-colours-in-r/ alpha <- function(col, alpha=1){ if(missing(col)) stop("Please provide a vector of colours.") apply(sapply(col, col2rgb)/255, 2, function(x) rgb(x[1], x[2], x[3], alpha=alpha)) } # Trimm a list of data frames to common length trim_data <- function(input,len=NULL) { if (is.null(len)) { len <- min(sapply(input, function(v) dim(v)[1])) } return(lapply(input, function(d) slice_head(d,n=len))) } length_of_data <- function(input) { min(sapply(input, function(v) dim(v)[1])) } # Takes a flat list trace2maxline <- function(tr) { maxline = tr for (var in seq_len(length(maxline))[2:length(maxline)]) { #if (maxline[var]>1000000000) { # maxline[var]=maxline[var-1] #} else { maxline[var] = max(maxline[var],maxline[var-1]) #} } #plot(seq_len(length(maxline)),maxline,"l",xlab="Index",ylab="WOET") return(maxline) } # Take a list of data frames, output same form but maxlines data2maxlines <- function(tr) { min_length <- min(sapply(tr, function(v) dim(v)[1])) maxline <- tr for (var in seq_len(length(tr))) { maxline[[var]][[1]]=trace2maxline(tr[[var]][[1]]) } return(maxline) } # Take a multi-column data frame, output same form but maxlines frame2maxlines <- function(tr) { for (var in seq_len(length(tr))) { tr[[var]]=trace2maxline(tr[[var]]) } return(tr) } trace2maxpoints <- function(tr) { minval = tr[1,1] collect = tr[1,] for (i in seq_len(dim(tr)[1])) { if (minval < tr[i,1]) { collect = rbind(collect,tr[i,]) minval = tr[i,1] } } tmp = tr[dim(tr)[1],] tmp[1] = minval[1] collect = rbind(collect,tmp) return(collect) } sample_maxpoints <- function(tr,po) { index = 1 collect=NULL endpoint = dim(tr)[1] for (p in po) { if (p<=tr[1,2]) { tmp = tr[index,] tmp[2] = p collect = rbind(collect, tmp) } else if (p>=tr[endpoint,2]) { tmp = tr[endpoint,] tmp[2] = p collect = rbind(collect, tmp) } else { for (i in seq(index,endpoint)-1) { if (p >= tr[i,2] && p