Parsing automata in Haskell (small project)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

901 lines
203 KiB

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>criterion report</title>
<script language="javascript" type="text/javascript">
/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"num
},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new
},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.par
</script>
<script language="javascript" type="text/javascript">
/* Javascript plotting library for jQuery, version 0.8.3.
Copyright (c) 2007-2014 IOLA and Ole Laursen.
Licensed under the MIT license.
*/
(function($){$.color={};$.color.make=function(r,g,b,a){var o={};o.r=r||0;o.g=g||0;o.b=b||0;o.a=a!=null?a:1;o.add=function(c,d){for(var i=0;i<c.length;++i)o[c.charAt(i)]+=d;return o.normalize()};o.scale=function(c,f){for(var i=0;i<c.length;++i)o[c.charAt(i)]*=f;return o.normalize()};o.toString=function(){if(o.a>=1){return"rgb("+[o.r,o.g,o.b].join(",")+")"}else{return"rgba("+[o.r,o.g,o.b,o.a].join(",")+")"}};o.normalize=function(){function clamp(min,value,max){return value<min?min:value>max?max:value}o.r=clamp(0,parseInt(o.r),255);o.g=clamp(0,parseInt(o.g),255);o.b=clamp(0,parseInt(o.b),255);o.a=clamp(0,o.a,1);return o};o.clone=function(){return $.color.make(o.r,o.b,o.g,o.a)};return o.normalize()};$.color.extract=function(elem,css){var c;do{c=elem.css(css).toLowerCase();if(c!=""&&c!="transparent")break;elem=elem.parent()}while(elem.length&&!$.nodeName(elem.get(0),"body"));if(c=="rgba(0, 0, 0, 0)")c="transparent";return $.color.parse(c)};$.color.parse=function(str){var res,m=$.color.make;if(res=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10));if(res=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseInt(res[1],10),parseInt(res[2],10),parseInt(res[3],10),parseFloat(res[4]));if(res=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55);if(res=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(str))return m(parseFloat(res[1])*2.55,parseFloat(res[2])*2.55,parseFloat(res[3])*2.55,parseFloat(res[4]));if(res=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(str))return m(parseInt(res[1],16),parseInt(res[2],16),parseInt(res[3],16));if(res=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(str))return m(parseInt(res[1]+res[1],16),parseInt(res[2]+res[2],16),parseInt(res[3]+res[3],16));var name=$.trim(str).toLowerCase();if(name=="transparent")return m(255,255,255,0);else{res=lookupColors[name]||[0,0,0];return m(res[0],res[1],res[2])}};var lookupColors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);(function($){var hasOwnProperty=Object.prototype.hasOwnProperty;if(!$.fn.detach){$.fn.detach=function(){return this.each(function(){if(this.parentNode){this.parentNode.removeChild(this)}})}}function Canvas(cls,container){var element=container.children("."+cls)[0];if(element==null){element=document.createElement("canvas");element.className=cls;$(element).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(container);if(!element.getContext){if(window.G_vmlCanvasManager){element=window.G_vmlCanvasManager.initElement(element)}else{throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.")}}}this.element=element;var context=this.context=element.getContext("2d");var devicePixelRatio=window.devicePixelRatio||1,backingStoreRatio=context.webkitBackingStorePixelRatio||context.mozBackingSto
if(yrange.from==null)yrange.from=yrange.axis.min;if(yrange.to==null)yrange.to=yrange.axis.max;if(xrange.to<xrange.axis.min||xrange.from>xrange.axis.max||yrange.to<yrange.axis.min||yrange.from>yrange.axis.max)continue;xrange.from=Math.max(xrange.from,xrange.axis.min);xrange.to=Math.min(xrange.to,xrange.axis.max);yrange.from=Math.max(yrange.from,yrange.axis.min);yrange.to=Math.min(yrange.to,yrange.axis.max);var xequal=xrange.from===xrange.to,yequal=yrange.from===yrange.to;if(xequal&&yequal){continue}xrange.from=Math.floor(xrange.axis.p2c(xrange.from));xrange.to=Math.floor(xrange.axis.p2c(xrange.to));yrange.from=Math.floor(yrange.axis.p2c(yrange.from));yrange.to=Math.floor(yrange.axis.p2c(yrange.to));if(xequal||yequal){var lineWidth=m.lineWidth||options.grid.markingsLineWidth,subPixel=lineWidth%2?.5:0;ctx.beginPath();ctx.strokeStyle=m.color||options.grid.markingsColor;ctx.lineWidth=lineWidth;if(xequal){ctx.moveTo(xrange.to+subPixel,yrange.from);ctx.lineTo(xrange.to+subPixel,yrange.to)}else{ctx.moveTo(xrange.from,yrange.to+subPixel);ctx.lineTo(xrange.to,yrange.to+subPixel)}ctx.stroke()}else{ctx.fillStyle=m.color||options.grid.markingsColor;ctx.fillRect(xrange.from,yrange.to,xrange.to-xrange.from,yrange.from-yrange.to)}}}axes=allAxes();bw=options.grid.borderWidth;for(var j=0;j<axes.length;++j){var axis=axes[j],box=axis.box,t=axis.tickLength,x,y,xoff,yoff;if(!axis.show||axis.ticks.length==0)continue;ctx.lineWidth=1;if(axis.direction=="x"){x=0;if(t=="full")y=axis.position=="top"?0:plotHeight;else y=box.top-plotOffset.top+(axis.position=="top"?box.height:0)}else{y=0;if(t=="full")x=axis.position=="left"?0:plotWidth;else x=box.left-plotOffset.left+(axis.position=="left"?box.width:0)}if(!axis.innermost){ctx.strokeStyle=axis.options.color;ctx.beginPath();xoff=yoff=0;if(axis.direction=="x")xoff=plotWidth+1;else yoff=plotHeight+1;if(ctx.lineWidth==1){if(axis.direction=="x"){y=Math.floor(y)+.5}else{x=Math.floor(x)+.5}}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff);ctx.stroke()}ctx.strokeStyle=axis.options.tickColor;ctx.beginPath();for(i=0;i<axis.ticks.length;++i){var v=axis.ticks[i].v;xoff=yoff=0;if(isNaN(v)||v<axis.min||v>axis.max||t=="full"&&(typeof bw=="object"&&bw[axis.position]>0||bw>0)&&(v==axis.min||v==axis.max))continue;if(axis.direction=="x"){x=axis.p2c(v);yoff=t=="full"?-plotHeight:t;if(axis.position=="top")yoff=-yoff}else{y=axis.p2c(v);xoff=t=="full"?-plotWidth:t;if(axis.position=="left")xoff=-xoff}if(ctx.lineWidth==1){if(axis.direction=="x")x=Math.floor(x)+.5;else y=Math.floor(y)+.5}ctx.moveTo(x,y);ctx.lineTo(x+xoff,y+yoff)}ctx.stroke()}if(bw){bc=options.grid.borderColor;if(typeof bw=="object"||typeof bc=="object"){if(typeof bw!=="object"){bw={top:bw,right:bw,bottom:bw,left:bw}}if(typeof bc!=="object"){bc={top:bc,right:bc,bottom:bc,left:bc}}if(bw.top>0){ctx.strokeStyle=bc.top;ctx.lineWidth=bw.top;ctx.beginPath();ctx.moveTo(0-bw.left,0-bw.top/2);ctx.lineTo(plotWidth,0-bw.top/2);ctx.stroke()}if(bw.right>0){ctx.strokeStyle=bc.right;ctx.lineWidth=bw.right;ctx.beginPath();ctx.moveTo(plotWidth+bw.right/2,0-bw.top);ctx.lineTo(plotWidth+bw.right/2,plotHeight);ctx.stroke()}if(bw.bottom>0){ctx.strokeStyle=bc.bottom;ctx.lineWidth=bw.bottom;ctx.beginPath();ctx.moveTo(plotWidth+bw.right,plotHeight+bw.bottom/2);ctx.lineTo(0,plotHeight+bw.bottom/2);ctx.stroke()}if(bw.left>0){ctx.strokeStyle=bc.left;ctx.lineWidth=bw.left;ctx.beginPath();ctx.moveTo(0-bw.left/2,plotHeight+bw.bottom);ctx.lineTo(0-bw.left/2,0);ctx.stroke()}}else{ctx.lineWidth=bw;ctx.strokeStyle=options.grid.borderColor;ctx.strokeRect(-bw/2,-bw/2,plotWidth+bw,plotHeight+bw)}}ctx.restore()}function drawAxisLabels(){$.each(allAxes(),function(_,axis){var box=axis.box,legacyStyles=axis.direction+"Axis "+axis.direction+axis.n+"Axis",layer="flot-"+axis.direction+"-axis flot-"+axis.direction+axis.n+"-axis "+legacyStyles,font=axis.options.font||"flot-tick-label tickLabel",tick,x,y,halign,valign;surface.removeText(layer);if(!axis.show||axis.ticks.length==0)return;for(var i=0;i<axis.ticks.length;++i){tick=axis.ticks[i];if(!tick.label||tick.v<axis.min||tick.v>axis.max)continue;if(axis.directi
</script>
<script language="javascript" type="text/javascript">
(function ($) {
$.zip = function(a,b) {
var x = Math.min(a.length,b.length);
var c = new Array(x);
for (var i = 0; i < x; i++)
c[i] = [a[i],b[i]];
return c;
};
$.mean = function(ary) {
var m = 0, i = 0;
while (i < ary.length) {
var j = i++;
m += (ary[j] - m) / i;
}
return m;
};
$.timeUnits = function(secs) {
if (secs < 0) return $.timeUnits(-secs);
else if (secs >= 1e9) return [1e-9, "Gs"];
else if (secs >= 1e6) return [1e-6, "Ms"];
else if (secs >= 1) return [1, "s"];
else if (secs >= 1e-3) return [1e3, "ms"];
else if (secs >= 1e-6) return [1e6, "\u03bcs"];
else if (secs >= 1e-9) return [1e9, "ns"];
else if (secs >= 1e-12) return [1e12, "ps"];
return [1, "s"];
};
$.scaleTimes = function(ary) {
var s = $.timeUnits($.mean(ary));
return [$.scaleBy(s[0], ary), s[0]];
};
$.prepareTime = function(secs) {
var units = $.timeUnits(secs);
var scaled = secs * units[0];
var s = scaled.toPrecision(3);
var t = scaled.toString();
return [t.length < s.length ? t : s, units[1]];
};
$.scaleBy = function(x, ary) {
var nary = new Array(ary.length);
for (var i = 0; i < ary.length; i++)
nary[i] = ary[i] * x;
return nary;
};
$.renderTime = function(secs) {
var x = $.prepareTime(secs);
return x[0] + ' ' + x[1];
};
$.unitFormatter = function(scale) {
var labelname;
return function(secs,axis) {
var x = $.prepareTime(secs / scale);
if (labelname === x[1])
return x[0];
else {
labelname = x[1];
return x[0] + ' ' + x[1];
}
};
};
$.addTooltip = function(name, renderText) {
function showTooltip(x, y, contents) {
$('<div id="tooltip">' + contents + '</div>').css( {
position: 'absolute',
display: 'none',
top: y + 5,
left: x + 5,
border: '1px solid #fdd',
padding: '2px',
'background-color': '#fee',
opacity: 0.80
}).appendTo("body").fadeIn(200);
};
var pp = null;
$(name).bind("plothover", function (event, pos, item) {
$("#x").text(pos.x.toFixed(2));
$("#y").text(pos.y.toFixed(2));
if (item) {
if (pp != item.dataIndex) {
pp = item.dataIndex;
$("#tooltip").remove();
var x = item.datapoint[0],
y = item.datapoint[1];
showTooltip(item.pageX, item.pageY, renderText(x,y));
}
}
else {
$("#tooltip").remove();
pp = null;
}
});
};
})(jQuery);
</script>
<style type="text/css">
html, body {
height: 100%;
margin: 0;
}
#wrap {
min-height: 100%;
}
#main {
overflow: auto;
padding-bottom: 180px; /* must be same height as the footer */
}
#footer {
position: relative;
margin-top: -180px; /* negative value of footer height */
height: 180px;
clear: both;
background: #888;
margin: 40px 0 0;
color: white;
font-size: larger;
font-weight: 300;
}
body:before {
/* Opera fix */
content: "";
height: 100%;
float: left;
width: 0;
margin-top: -32767px;
}
body {
font: 14px Helvetica Neue;
text-rendering: optimizeLegibility;
margin-top: 1em;
}
a:link {
color: steelblue;
text-decoration: none;
}
a:visited {
color: #4a743b;
text-decoration: none;
}
#footer a {
color: white;
text-decoration: underline;
}
.hover {
color: steelblue;
text-decoration: none;
}
.body {
width: 960px;
margin: auto;
}
.footfirst {
position: relative;
top: 30px;
}
th {
font-weight: 500;
opacity: 0.8;
}
th.cibound {
opacity: 0.4;
}
.confinterval {
opacity: 0.5;
}
h1 {
font-size: 36px;
font-weight: 300;
margin-bottom: .3em;
}
h2 {
font-size: 30px;
font-weight: 300;
margin-bottom: .3em;
}
.meanlegend {
color: #404040;
background-color: #ffffff;
opacity: 0.6;
font-size: smaller;
}
</style>
<!--[if !IE 7]>
<style type="text/css">
#wrap {display:table;height:100%}
</style>
<![endif]-->
</head>
<body>
<div id="wrap">
<div id="main" class="body">
<h1>criterion performance measurements</h1>
<h2>overview</h2>
<p><a href="#grokularation">want to understand this report?</a></p>
<div id="overview" class="ovchart" style="width:900px;height:100px;"></div>
<h2><a name="b0">hashMap</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde0" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time0" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle0" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb0">xxx</span></td>
<td><span class="olstimept0">xxx</span></td>
<td><span class="confinterval olstimeub0">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb0">xxx</span></td>
<td><span class="olsr2pt0">xxx</span></td>
<td><span class="confinterval olsr2ub0">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">1.1079337686668929</span></td>
<td><span class="time">1.1118317350581899</span></td>
<td><span class="confinterval citime">1.1155279756712846</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">6.2347239582959705e-3</span></td>
<td><span class="confinterval citime">6.402076538879691e-3</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.1875</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b1">lazyHashMap</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde1" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time1" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle1" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb1">xxx</span></td>
<td><span class="olstimept1">xxx</span></td>
<td><span class="confinterval olstimeub1">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb1">xxx</span></td>
<td><span class="olsr2pt1">xxx</span></td>
<td><span class="confinterval olsr2ub1">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.6050280515104536</span></td>
<td><span class="time">0.648151868254354</span></td>
<td><span class="confinterval citime">0.6811688430845001</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">5.07514985589225e-2</span></td>
<td><span class="confinterval citime">5.718707791803603e-2</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.2101804941984909</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b2">treeMap</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde2" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time2" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle2" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb2">xxx</span></td>
<td><span class="olstimept2">xxx</span></td>
<td><span class="confinterval olstimeub2">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb2">xxx</span></td>
<td><span class="olsr2pt2">xxx</span></td>
<td><span class="confinterval olsr2ub2">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.6176181022485254</span></td>
<td><span class="time">0.6234788088583932</span></td>
<td><span class="confinterval citime">0.6346098493319007</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">9.644282322289024e-3</span></td>
<td><span class="confinterval citime">9.81018975258874e-3</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.1875</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b3">lazyTreeMap</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde3" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time3" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle3" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb3">xxx</span></td>
<td><span class="olstimept3">xxx</span></td>
<td><span class="confinterval olstimeub3">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb3">xxx</span></td>
<td><span class="olsr2pt3">xxx</span></td>
<td><span class="confinterval olsr2ub3">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.7115394046646545</span></td>
<td><span class="time">0.7382926173071612</span></td>
<td><span class="confinterval citime">0.7615077150888588</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">3.752284661345008e-2</span></td>
<td><span class="confinterval citime">4.020972886057987e-2</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.1875</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b4">trieMap</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde4" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time4" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle4" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb4">xxx</span></td>
<td><span class="olstimept4">xxx</span></td>
<td><span class="confinterval olstimeub4">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb4">xxx</span></td>
<td><span class="olsr2pt4">xxx</span></td>
<td><span class="confinterval olsr2ub4">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.9874362552538516</span></td>
<td><span class="time">1.016644161750123</span></td>
<td><span class="confinterval citime">1.0402545899961197</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">3.701183160024759e-2</span></td>
<td><span class="confinterval citime">4.089446131052591e-2</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.1875</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b5">group . sort</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde5" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time5" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle5" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb5">xxx</span></td>
<td><span class="olstimept5">xxx</span></td>
<td><span class="confinterval olstimeub5">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb5">xxx</span></td>
<td><span class="olsr2pt5">xxx</span></td>
<td><span class="confinterval olsr2ub5">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">0.38601253600209046</span></td>
<td><span class="time">0.398264101588575</span></td>
<td><span class="confinterval citime">0.4043930002590062</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">1.0610171151690466e-2</span></td>
<td><span class="confinterval citime">1.0615563891628281e-2</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.18749999999999994</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="b6">nub</a></h2>
<table width="100%">
<tbody>
<tr>
<td><div id="kde6" class="kdechart"
style="width:450px;height:278px;"></div></td>
<td><div id="time6" class="timechart"
style="width:450px;height:278px;"></div></td>
<!--
<td><div id="cycle6" class="cyclechart"
style="width:300px;height:278px;"></div></td>
-->
</tr>
</tbody>
</table>
<table>
<thead class="analysis">
<th></th>
<th class="cibound"
title="0.95 confidence level">lower bound</th>
<th>estimate</th>
<th class="cibound"
title="0.95 confidence level">upper bound</th>
</thead>
<tbody>
<tr>
<td>OLS regression</td>
<td><span class="confinterval olstimelb6">xxx</span></td>
<td><span class="olstimept6">xxx</span></td>
<td><span class="confinterval olstimeub6">xxx</span></td>
</tr>
<tr>
<td>R&#xb2; goodness-of-fit</td>
<td><span class="confinterval olsr2lb6">xxx</span></td>
<td><span class="olsr2pt6">xxx</span></td>
<td><span class="confinterval olsr2ub6">xxx</span></td>
</tr>
<tr>
<td>Mean execution time</td>
<td><span class="confinterval citime">2.146072198999658</span></td>
<td><span class="time">2.1540133390033995</span></td>
<td><span class="confinterval citime">2.159312120340474</span></td>
</tr>
<tr>
<td>Standard deviation</td>
<td><span class="confinterval citime">0.0</span></td>
<td><span class="time">7.94818133776119e-3</span></td>
<td><span class="confinterval citime">9.177758494010351e-3</span></td>
</tr>
</tbody>
</table>
<span class="outliers">
<p>Outlying measurements have moderate
(<span class="percent">0.18749999999999997</span>%)
effect on estimated standard deviation.</p>
</span>
<h2><a name="grokularation">understanding this report</a></h2>
<p>In this report, each function benchmarked by criterion is assigned
a section of its own. The charts in each section are active; if
you hover your mouse over data points and annotations, you will see
more details.</p>
<ul>
<li>The chart on the left is a
<a href="http://en.wikipedia.org/wiki/Kernel_density_estimation">kernel
density estimate</a> (also known as a KDE) of time
measurements. This graphs the probability of any given time
measurement occurring. A spike indicates that a measurement of a
particular time occurred; its height indicates how often that
measurement was repeated.</li>
<li>The chart on the right is the raw data from which the kernel
density estimate is built. The <i>x</i> axis indicates the
number of loop iterations, while the <i>y</i> axis shows measured
execution time for the given number of loop iterations. The
line behind the values is the linear regression prediction of
execution time for a given number of iterations. Ideally, all
measurements will be on (or very near) this line.</li>
</ul>
<p>Under the charts is a small table.
The first two rows are the results of a linear regression run
on the measurements displayed in the right-hand chart.</p>
<ul>
<li><i>OLS regression</i> indicates the
time estimated for a single loop iteration using an ordinary
least-squares regression model. This number is more accurate
than the <i>mean</i> estimate below it, as it more effectively
eliminates measurement overhead and other constant factors.</li>
<li><i>R&#xb2; goodness-of-fit</i> is a measure of how
accurately the linear regression model fits the observed
measurements. If the measurements are not too noisy, R&#xb2;
should lie between 0.99 and 1, indicating an excellent fit. If
the number is below 0.99, something is confounding the accuracy
of the linear model.</li>
<li><i>Mean execution time</i> and <i>standard deviation</i> are
statistics calculated from execution time
divided by number of iterations.</li>
</ul>
<p>We use a statistical technique called
the <a href="http://en.wikipedia.org/wiki/Bootstrapping_(statistics)">bootstrap</a>
to provide confidence intervals on our estimates. The
bootstrap-derived upper and lower bounds on estimates let you see
how accurate we believe those estimates to be. (Hover the mouse
over the table headers to see the confidence levels.)</p>
<p>A noisy benchmarking environment can cause some or many
measurements to fall far from the mean. These outlying
measurements can have a significant inflationary effect on the
estimate of the standard deviation. We calculate and display an
estimate of the extent to which the standard deviation has been
inflated by outliers.</p>
<script type="text/javascript">
$(function () {
function mangulate(rpt) {
var measured = function(key) {
var idx = rpt.reportKeys.indexOf(key);
return rpt.reportMeasured.map(function(r) { return r[idx]; });
};
var number = rpt.reportNumber;
var name = rpt.reportName;
var mean = rpt.reportAnalysis.anMean.estPoint;
var iters = measured("iters");
var times = measured("time");
var kdetimes = rpt.reportKDEs[0].kdeValues;
var kdepdf = rpt.reportKDEs[0].kdePDF;
var meanSecs = mean;
var units = $.timeUnits(mean);
var rgrs = rpt.reportAnalysis.anRegress[0];
var scale = units[0];
var olsTime = rgrs.regCoeffs.iters;
$(".olstimept" + number).text(function() {
return $.renderTime(olsTime.estPoint);
});
$(".olstimelb" + number).text(function() {
return $.renderTime(olsTime.estLowerBound);
});
$(".olstimeub" + number).text(function() {
return $.renderTime(olsTime.estUpperBound);
});
$(".olsr2pt" + number).text(function() {
return rgrs.regRSquare.estPoint.toFixed(3);
});
$(".olsr2lb" + number).text(function() {
return rgrs.regRSquare.estLowerBound.toFixed(3);
});
$(".olsr2ub" + number).text(function() {
return rgrs.regRSquare.estUpperBound.toFixed(3);
});
mean *= scale;
kdetimes = $.scaleBy(scale, kdetimes);
var kq = $("#kde" + number);
var k = $.plot(kq,
[{ label: name + " time densities",
data: $.zip(kdetimes, kdepdf),
}],
{ xaxis: { tickFormatter: $.unitFormatter(scale) },
yaxis: { ticks: false },
grid: { borderColor: "#777",
hoverable: true, markings: [ { color: '#6fd3fb',
lineWidth: 1.5, xaxis: { from: mean, to: mean } } ] },
});
var o = k.pointOffset({ x: mean, y: 0});
kq.append('<div class="meanlegend" title="' + $.renderTime(meanSecs) +
'" style="position:absolute;left:' + (o.left + 4) +
'px;bottom:139px;">mean</div>');
$.addTooltip("#kde" + number,
function(secs) { return $.renderTime(secs / scale); });
var timepairs = new Array(times.length);
var lastiter = iters[iters.length-1];
var olspairs = [[0,0], [lastiter, lastiter * scale * olsTime.estPoint]];
for (var i = 0; i < times.length; i++)
timepairs[i] = [iters[i],times[i]*scale];
iterFormatter = function() {
var denom = 0;
return function(iters) {
if (iters == 0)
return '';
if (denom > 0)
return (iters / denom).toFixed();
var power;
if (iters >= 1e9) {
denom = '1e9'; power = '&#x2079;';
}
if (iters >= 1e6) {
denom = '1e6'; power = '&#x2076;';
}
else if (iters >= 1e3) {
denom = '1e3'; power = '&#xb3;';
}
else denom = 1;
if (denom > 1) {
iters = (iters / denom).toFixed();
iters += '&times;10' + power + ' iters';
} else {
iters += ' iters';
}
return iters;
};
};
$.plot($("#time" + number),
[{ label: "regression", data: olspairs,
lines: { show: true } },
{ label: name + " times", data: timepairs,
points: { show: true } }],
{ grid: { borderColor: "#777", hoverable: true },
xaxis: { tickFormatter: iterFormatter() },
yaxis: { tickFormatter: $.unitFormatter(scale) } });
$.addTooltip("#time" + number,
function(iters,secs) {
return ($.renderTime(secs / scale) + ' / ' +
iters.toLocaleString() + ' iters');
});
if (0) {
var cyclepairs = new Array(cycles.length);
for (var i = 0; i < cycles.length; i++)
cyclepairs[i] = [cycles[i],i];
$.plot($("#cycle" + number),
[{ label: name + " cycles",
data: cyclepairs }],
{ points: { show: true },
grid: { borderColor: "#777", hoverable: true },
xaxis: { tickFormatter:
function(cycles,axis) { return cycles + ' cycles'; }},
yaxis: { ticks: false },
});
$.addTooltip("#cycles" + number, function(x,y) { return x + ' cycles'; });
}
};
var reports = [{"reportAnalysis":{"anMean":{"estUpperBound":1.1155279756712846,"estLowerBound":1.1079337686668929,"estPoint":1.1118317350581899,"estConfidenceLevel":0.95},"anRegress":[{"regRSquare":{"estUpperBound":1,"estLowerBound":0.9997786792960229,"estPoint":0.9999386837928972,"estConfidenceLevel":0.95},"regResponder":"time","regCoeffs":{"y":{"estUpperBound":6.653379503403775e-2,"estLowerBound":-2.681357902474545e-2,"estPoint":7.5610314961556315e-3,"estConfidenceLevel":0.95},"iters":{"estUpperBound":1.1324300120177206,"estLowerBound":1.0857563249883266,"estPoint":1.1071378770022409,"estConfidenceLevel":0.95}}}],"anStdDev":{"estUpperBound":6.402076538879691e-3,"estLowerBound":0.0,"estPoint":6.2347239582959705e-3,"estConfidenceLevel":0.95},"anOutlierVar":{"ovFraction":0.1875,"ovDesc":"moderate","ovEffect":"Moderate"},"anOverhead":2.9279966824394523e-6},"reportKDEs":[{"kdeValues":[1.1068248964829643,1.10692967180743,1.1070344471318958,1.1071392224563614,1.107243997780827,1.1073487731052927,1.1074535484297585,1.1075583237542241,1.1076630990786898,1.1077678744031554,1.1078726497276212,1.1079774250520869,1.1080822003765525,1.108186975701018,1.108291751025484,1.1083965263499496,1.1085013016744152,1.1086060769988808,1.1087108523233467,1.1088156276478123,1.108920402972278,1.1090251782967435,1.1091299536212094,1.109234728945675,1.1093395042701406,1.1094442795946062,1.109549054919072,1.1096538302435377,1.1097586055680033,1.1098633808924692,1.1099681562169348,1.1100729315414004,1.110177706865866,1.1102824821903319,1.1103872575147975,1.1104920328392631,1.1105968081637287,1.1107015834881946,1.1108063588126602,1.1109111341371258,1.1110159094615915,1.1111206847860573,1.111225460110523,1.1113302354349885,1.1114350107594542,1.11153978608392,1.1116445614083856,1.1117493367328513,1.1118541120573169,1.1119588873817827,1.1120636627062483,1.112168438030714,1.1122732133551798,1.1123779886796454,1.112482764004111,1.1125875393285767,1.1126923146530425,1.1127970899775081,1.1129018653019738,1.1130066406264394,1.1131114159509052,1.1132161912753709,1.1133209665998365,1.113425741924302,1.113530517248768,1.1136352925732336,1.1137400678976992,1.1138448432221648,1.1139496185466307,1.1140543938710963,1.114159169195562,1.1142639445200275,1.1143687198444934,1.114473495168959,1.1145782704934246,1.1146830458178902,1.114787821142356,1.1148925964668217,1.1149973717912873,1.1151021471157532,1.1152069224402188,1.1153116977646844,1.11541647308915,1.1155212484136159,1.1156260237380815,1.1157307990625471,1.1158355743870128,1.1159403497114786,1.1160451250359442,1.1161499003604098,1.1162546756848755,1.1163594510093413,1.116464226333807,1.1165690016582726,1.1166737769827382,1.116778552307204,1.1168833276316696,1.1169881029561353,1.1170928782806009,1.1171976536050667,1.1173024289295324,1.117407204253998,1.1175119795784636,1.1176167549029294,1.117721530227395,1.1178263055518607,1.1179310808763265,1.1180358562007922,1.1181406315252578,1.1182454068497234,1.1183501821741892,1.1184549574986549,1.1185597328231205,1.1186645081475861,1.118769283472052,1.1188740587965176,1.1189788341209832,1.1190836094454488,1.1191883847699147,1.1192931600943803,1.119397935418846,1.1195027107433115,1.1196074860677774,1.119712261392243,1.1198170367167086,1.1199218120411742,1.12002658736564,1.1201313626901057],"kdeType":"time","kdePDF":[97.51403166934188,97.49429008089271,97.4548339892288,97.39571751142739,97.31702168974974,97.21885433196252,97.10134979901136,96.96466874053908,96.80899777886378,96.63454914215033,96.44156024762684,96.23029323581353,96.00103445684388,95.75409391006852,95.48980463824066,95.20852207768398,94.91062336594706,94.59650660854311,94.26659010646864,93.92131154628139,93.56112715460432,93.18651081900036,92.7979531772381,92.39596067703891,91.9810546084597,91.55377011112549,91.11465515857982,90.66426952206898,90.20318371611873,89.7319779282996,89.25124093560669,88.76156900990588,88.2635648149171,87.75783629721795,87.24499557375859,86.72565781837959,86.20044014981872,85.6699605236832,85.13483663084467,84.59568480469417,84.05311893966218,83.50774942337843,82.96018208480211,
reports.map(mangulate);
var benches = ["hashMap","lazyHashMap","treeMap","lazyTreeMap","trieMap","group . sort","nub",];
var ylabels = [[-0,'<a href="#b0">hashMap</a>'],[-1,'<a href="#b1">lazyHashMap</a>'],[-2,'<a href="#b2">treeMap</a>'],[-3,'<a href="#b3">lazyTreeMap</a>'],[-4,'<a href="#b4">trieMap</a>'],[-5,'<a href="#b5">group . sort</a>'],[-6,'<a href="#b6">nub</a>'],];
var means = $.scaleTimes([1.1118317350581899,0.648151868254354,0.6234788088583932,0.7382926173071612,1.016644161750123,0.398264101588575,2.1540133390033995,]);
var xs = [];
var prev = null;
for (var i = 0; i < means[0].length; i++) {
var name = benches[i].split(/\//);
name.pop();
name = name.join('/');
if (name != prev) {
xs.push({ label: name, data: [[means[0][i], -i]]});
prev = name;
}
else
xs[xs.length-1].data.push([means[0][i],-i]);
}
var oq = $("#overview");
o = $.plot(oq, xs, { bars: { show: true, horizontal: true,
barWidth: 0.75, align: "center" },
grid: { borderColor: "#777", hoverable: true },
legend: { show: xs.length > 1 },
xaxis: { max: Math.max.apply(undefined,means[0]) * 1.02 },
yaxis: { ticks: ylabels, tickColor: '#ffffff' } });
if (benches.length > 3)
o.getPlaceholder().height(28*benches.length);
o.resize();
o.setupGrid();
o.draw();
$.addTooltip("#overview", function(x,y) { return $.renderTime(x / means[1]); });
});
$(document).ready(function () {
$(".time").text(function(_, text) {
return $.renderTime(text);
});
$(".citime").text(function(_, text) {
return $.renderTime(text);
});
$(".percent").text(function(_, text) {
return (text*100).toFixed(1);
});
});
</script>
</div>
</div>
<div id="footer">
<div class="body">
<div class="footfirst">
<h2>colophon</h2>
<p>This report was created using the
<a href="http://hackage.haskell.org/package/criterion">criterion</a>
benchmark execution and performance analysis tool.</p>
<p>Criterion is developed and maintained
by <a href="http://www.serpentine.com/blog/">Bryan O'Sullivan</a>.</p>
</div>
</div>
</div>
</body>
</html>