Running "browserify" task
>> Bundle lib/p5.js created.

Running "browserify:min" (browserify) task
>> Bundle lib/p5.pre-min.js created.

Running "uglify:dist" (uglify) task
>> Destination lib/modules/p5Custom.min.js not written because src files were empty.
>> 1 files created 4.4 MB → 822.18 kB

Running "browserify:test" (browserify) task
>> Bundle lib/p5-test.js created.

Running "connect:server" (connect) task
Started connect web server on http://localhost:9001

Running "mochaChrome:yui" (mochaChrome) task
 * Tone.js r10 * 


[0m[0m
[0m  src/accessibility/describe.js[0m
[0m    describe documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (65ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    describeElement documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/accessibility/outputs.js[0m
[0m    textOutput documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    gridOutput documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/color/creating_reading.js[0m
[0m    alpha documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    blue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    brightness documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    color documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
    [32m  ✓[0m[90m example #7 works[0m
    [32m  ✓[0m[90m example #8 works[0m
[0m    green documentation[0m
75
    [32m  ✓[0m[90m example #1 works[0m
[0m    hue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    lerpColor documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    lightness documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    red documentation[0m
255
    [32m  ✓[0m[90m example #1 works[0m
0.4980392156862745
    [32m  ✓[0m[90m example #2 works[0m
[0m    saturation documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/color/p5.Color.js[0m
[0m    toString documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    setRed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setGreen documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setBlue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setAlpha documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/color/setting.js[0m
[0m    background documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
    [32m  ✓[0m[90m example #7 works[0m
    [32m  ✓[0m[90m example #8 works[0m
    [32m  ✓[0m[90m example #9 works[0m
    [32m  ✓[0m[90m example #10 works[0m
    [32m  ✓[0m[90m example #11 works[0m
[0m    clear documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    colorMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (215ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (121ms)[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
[0m    fill documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
    [32m  ✓[0m[90m example #7 works[0m
    [32m  ✓[0m[90m example #8 works[0m
    [32m  ✓[0m[90m example #9 works[0m
    [32m  ✓[0m[90m example #10 works[0m
    [32m  ✓[0m[90m example #11 works[0m
[0m    noFill documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[33m (66ms)[0m
[0m    noStroke documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[33m (59ms)[0m
[0m    stroke documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
    [32m  ✓[0m[90m example #7 works[0m
    [32m  ✓[0m[90m example #8 works[0m
    [32m  ✓[0m[90m example #9 works[0m
    [32m  ✓[0m[90m example #10 works[0m
    [32m  ✓[0m[90m example #11 works[0m
[0m    erase documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (164ms)[0m
[0m    noErase documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/shape/2d_primitives.js[0m
[0m    arc documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
[0m    ellipse documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    circle documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    line documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    point documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    quad documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rect documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    square documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    triangle documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/shape/attributes.js[0m
[0m    ellipseMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    noSmooth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rectMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    smooth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    strokeCap documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    strokeJoin documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    strokeWeight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/core/shape/curves.js[0m
[0m    bezier documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    bezierDetail documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (93ms)[0m
[0m    bezierPoint documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    bezierTangent documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    curve documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    curveDetail documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (252ms)[0m
[0m    curveTightness documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    curvePoint documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    curveTangent documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/shape/vertex.js[0m
[0m    beginContour documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    beginShape documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
    [32m  ✓[0m[90m example #7 works[0m
    [32m  ✓[0m[90m example #8 works[0m
    [32m  ✓[0m[90m example #9 works[0m
    [32m  ✓[0m[90m example #10 works[0m
    [32m  ✓[0m[90m example #11 works[0m
[0m    bezierVertex documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (275ms)[0m
[0m    curveVertex documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    endContour documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    endShape documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    quadraticVertex documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    vertex documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (253ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (248ms)[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m[31m (267ms)[0m
[0m    normal documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (52ms)[0m
[0m  src/core/constants.js[0m
[0m    HALF_PI documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    PI documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    QUARTER_PI documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    TAU documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    TWO_PI documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    DEGREES documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    RADIANS documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/environment.js[0m
[0m    print documentation[0m
The value of x is 10
    [32m  ✓[0m[90m example #1 works[0m
[0m    frameCount documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    deltaTime documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (45ms)[0m
[0m    focused documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    cursor documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    frameRate documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    noCursor documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    displayWidth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    displayHeight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    windowWidth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    windowHeight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (40ms)[0m
[0m    windowResized documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    fullscreen documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (143ms)[0m
[0m    pixelDensity documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (64ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    displayDensity documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    getURL documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    getURLPath documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/main.js[0m
[0m    preload documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setup documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    draw documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    remove documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/p5.Element.js[0m
[0m    elt documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    parent documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    id documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    class documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mousePressed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    doubleClicked documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseWheel documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseReleased documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseClicked documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseMoved documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseOver documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseOut documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    touchStarted documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    touchMoved documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    touchEnded documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    dragOver documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    dragLeave documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/p5.Graphics.js[0m
[0m    reset documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (199ms)[0m
[0m    remove documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/core/reference.js[0m
[0m    let documentation[0m
2
1
    [32m  ✓[0m[90m example #1 works[0m
[0m    const documentation[0m
my favorite number is: 7
    [32m  ✓[0m[90m example #1 works[0m
[ 'lion', 'tiger', 'panther', 'leopard' ]
    [32m  ✓[0m[90m example #2 works[0m
{ hello: 2, bye: 1 }
    [32m  ✓[0m[90m example #3 works[0m
[0m    === documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    > documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    >= documentation[0m
true
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    < documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    <= documentation[0m
true
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    if-else documentation[0m
positive
    [32m  ✓[0m[90m example #1 works[0m
[0m    function documentation[0m
Hello Hridi!
    [32m  ✓[0m[90m example #1 works[0m
25
    [32m  ✓[0m[90m example #2 works[0m
[0m    return documentation[0m
16
    [32m  ✓[0m[90m example #1 works[0m
[0m    boolean documentation[0m
boolean
    [32m  ✓[0m[90m example #1 works[0m
[0m    string documentation[0m
string
    [32m  ✓[0m[90m example #1 works[0m
[0m    number documentation[0m
number
    [32m  ✓[0m[90m example #1 works[0m
[0m    object documentation[0m
Ursula K Le Guin
    [32m  ✓[0m[90m example #1 works[0m
[0m    class documentation[0m
1
    [32m  ✓[0m[90m example #1 works[0m
[0m    for documentation[0m
0
1
2
3
4
5
6
7
8
    [32m  ✓[0m[90m example #1 works[0m
[0m    while documentation[0m
4
3
2
1
0
    [32m  ✓[0m[90m example #1 works[0m
[0m    stringify documentation[0m
{"x":5,"y":6}
string
    [32m  ✓[0m[90m example #1 works[0m
[0m    log documentation[0m
5
17
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/rendering.js[0m
[0m    createCanvas documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    resizeCanvas documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    noCanvas documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createGraphics documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    blendMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    drawingContext documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/structure.js[0m
[0m    noLoop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    loop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    isLooping documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    push documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    pop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    redraw documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    p5 documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/core/transform.js[0m
[0m    applyMatrix documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (97ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (98ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (98ms)[0m
    [32m  ✓[0m[90m example #4 works[0m[31m (97ms)[0m
    [32m  ✓[0m[90m example #5 works[0m[33m (56ms)[0m
    [32m  ✓[0m[90m example #6 works[0m
[0m    resetMatrix documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rotate documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rotateX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (253ms)[0m
[0m    rotateY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (220ms)[0m
[0m    rotateZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (218ms)[0m
[0m    scale documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    shearX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    shearY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    translate documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m  src/data/local_storage.js[0m
[0m    storeItem documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    getItem documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    clearStorage documentation[0m
10
false
null
null
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeItem documentation[0m
10
null
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/data/p5.TypedDict.js[0m
[0m    createStringDict documentation[0m
true
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    createNumberDict documentation[0m
true
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    size documentation[0m
3
    [32m  ✓[0m[90m example #1 works[0m
[0m    hasKey documentation[0m
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    get documentation[0m
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    set documentation[0m
key:p5 value:JS
    [32m  ✓[0m[90m example #1 works[0m
[0m    create documentation[0m
key:p5 value:js
key:happy value:coding
    [32m  ✓[0m[90m example #1 works[0m
[0m    clear documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    remove documentation[0m
key:p5 value:js
key:happy value:coding
key:happy value:coding
    [32m  ✓[0m[90m example #1 works[0m
[0m    print documentation[0m
key:p5 value:js
key:happy value:coding
    [32m  ✓[0m[90m example #1 works[0m
[0m    saveTable documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    saveJSON documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    add documentation[0m
7
    [32m  ✓[0m[90m example #1 works[0m
[0m    sub documentation[0m
3
    [32m  ✓[0m[90m example #1 works[0m
[0m    mult documentation[0m
8
    [32m  ✓[0m[90m example #1 works[0m
[0m    div documentation[0m
4
    [32m  ✓[0m[90m example #1 works[0m
[0m    minValue documentation[0m
-10
    [32m  ✓[0m[90m example #1 works[0m
[0m    maxValue documentation[0m
3
    [32m  ✓[0m[90m example #1 works[0m
[0m    minKey documentation[0m
1.2
    [32m  ✓[0m[90m example #1 works[0m
[0m    maxKey documentation[0m
4
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/dom/dom.js[0m
[0m    select documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    selectAll documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[]
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeElements documentation[0m
[0m    changed documentation[0m
[0m    input documentation[0m
[0m    createDiv documentation[0m
[0m    createP documentation[0m
[0m    createSpan documentation[0m
[0m    createImg documentation[0m
[0m    createA documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createSlider documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    createButton documentation[0m
    [32m  ✓[0m[90m example #1 works[0m

[0m    createCheckbox documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createSelect documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    createRadio documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    createColorPicker documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    createInput documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createFileInput documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createVideo documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createAudio documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createElement documentation[0m
    [32m  ✓[0m[90m example #1 works[0m

🌸 p5.js says: The media that tried to play (with 'http://localhost:9001/docs/reference/assets/small.mp4') wasn't allowed to by this browser, most likely due to the browser's autoplay policy.

+ More info: https://developer.mozilla.org/docs/Web/Media/Autoplay_guide
[0m    addClass documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeClass documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    hasClass documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    toggleClass documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    child documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    center documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    html documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    position documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    style documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    attribute documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeAttribute documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    value documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    show documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    hide documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    size documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    remove documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    drop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    src documentation[0m

🌸 p5.js says: The media that tried to play (with 'http://localhost:9001/docs/reference/assets/beat.mp3') wasn't allowed to by this browser, most likely due to the browser's autoplay policy.

+ More info: https://developer.mozilla.org/docs/Web/Media/Autoplay_guide
    [32m  ✓[0m[90m example #1 works[0m
[0m    play documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    stop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pause documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    loop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    noLoop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    autoplay documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    volume documentation[0m
    [32m  ✓[0m[90m example #1 works[0m

🌸 p5.js says: The media that tried to play (with 'http://localhost:9001/docs/reference/assets/lucky_dragons.mp3') wasn't allowed to by this browser, most likely due to the browser's autoplay policy.

+ More info: https://developer.mozilla.org/docs/Web/Media/Autoplay_guide
    [32m  ✓[0m[90m example #2 works[0m
[0m    time documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    duration documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    onended documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    showControls documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    hideControls documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (43ms)[0m
[0m    addCue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeCue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    clearCues documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/events/acceleration.js[0m
[0m    accelerationX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    accelerationY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    accelerationZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rotationX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (259ms)[0m
[0m    rotationY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (251ms)[0m
[0m    rotationZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (248ms)[0m
[0m    pRotationX documentation[0m
clockwise
    [32m  ✓[0m[90m example #1 works[0m
[0m    pRotationY documentation[0m
clockwise
    [32m  ✓[0m[90m example #1 works[0m
[0m    pRotationZ documentation[0m
clockwise
    [32m  ✓[0m[90m example #1 works[0m
[0m    turnAxis documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setMoveThreshold documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setShakeThreshold documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    deviceMoved documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    deviceTurned documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    deviceShaken documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/events/keyboard.js[0m
[0m    keyIsPressed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    key documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    keyCode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    keyPressed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    keyReleased documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    keyTyped documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    keyIsDown documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/events/mouse.js[0m
[0m    mouseX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pmouseX documentation[0m
0 -> 0
    [32m  ✓[0m[90m example #1 works[0m[31m (98ms)[0m
[0m    pmouseY documentation[0m
0 -> 0
    [32m  ✓[0m[90m example #1 works[0m
[0m    winMouseX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    winMouseY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pwinMouseX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pwinMouseY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseButton documentation[0m
0
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseIsPressed documentation[0m
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    mouseMoved documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    mouseDragged documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    mousePressed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    mouseReleased documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    mouseClicked documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    doubleClicked documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    mouseWheel documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/events/touch.js[0m
[0m    touches documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    touchStarted documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    touchMoved documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    touchEnded documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m  src/image/image.js[0m
[0m    createImage documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (68ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    saveFrames documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/image/loading_displaying.js[0m
[0m    loadImage documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    image documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
[0m    tint documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    noTint documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    imageMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m  src/image/p5.Image.js[0m
[0m    width documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    height documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (127ms)[0m
[0m    loadPixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m    updatePixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    get documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    set documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    resize documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    copy documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    mask documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    filter documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    blend documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    save documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    reset documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (98ms)[0m
[0m    getCurrentFrame documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (131ms)[0m
[0m    setFrame documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (219ms)[0m
[0m    numFrames documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (138ms)[0m
[0m    play documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (172ms)[0m
[0m    pause documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (42ms)[0m
[0m    delay documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (297ms)[0m
[0m    p5.Image documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m  src/image/pixels.js[0m
[0m    pixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (113ms)[0m
[0m    blend documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    copy documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    filter documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m[33m (64ms)[0m
    [32m  ✓[0m[90m example #7 works[0m[33m (63ms)[0m
    [32m  ✓[0m[90m example #8 works[0m[33m (64ms)[0m
[0m    get documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    loadPixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (49ms)[0m
[0m    set documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    updatePixels documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (49ms)[0m
[0m  src/io/files.js[0m
[0m    loadJSON documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (158ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    loadStrings documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    loadTable documentation[0m
3 total rows in table
3 total columns in table
0
Capra hircus
Goat
1
Panthera pardus
Leopard
2
Equus zebra
Zebra
[ 'Goat', 'Leopard', 'Zebra' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    loadXML documentation[0m
0, Capra hircus, Goat
1, Panthera pardus, Leopard
2, Equus zebra, Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    loadBytes documentation[0m
3c
3f
78
6d
6c
    [32m  ✓[0m[90m example #1 works[0m
[0m    httpGet documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    httpPost documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    httpDo documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    createWriter documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    write documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    clear documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    save documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m[33m (75ms)[0m
    [32m  ✓[0m[90m example #4 works[0m[33m (50ms)[0m
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
[0m    saveJSON documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    saveStrings documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    saveTable documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/io/p5.Table.js[0m
[0m    columns documentation[0m
column 0 is named id
column 1 is named species
column 2 is named name
    [32m  ✓[0m[90m example #1 works[0m
[0m    addRow documentation[0m
0
Capra hircus
Goat
1
Panthera pardus
Leopard
2
Equus zebra
Zebra
3
Canis Lupus
Wolf
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeRow documentation[0m
1
Panthera pardus
Leopard
2
Equus zebra
Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    getRow documentation[0m
1
Panthera pardus
Leopard
    [32m  ✓[0m[90m example #1 works[0m
[0m    getRows documentation[0m
0
Capra hircus
Unicorn
1
Panthera pardus
Unicorn
2
Equus zebra
Unicorn
    [32m  ✓[0m[90m example #1 works[0m
[0m    findRow documentation[0m
Equus zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    findRows documentation[0m
2 Goats found
    [32m  ✓[0m[90m example #1 works[0m
[0m    matchRow documentation[0m
Panthera pardus
    [32m  ✓[0m[90m example #1 works[0m
[0m    matchRows documentation[0m
Snake: Reptile
Lizard: Reptile
    [32m  ✓[0m[90m example #1 works[0m
[0m    getColumn documentation[0m
[ 'Capra hircus', 'Panthera pardus', 'Equus zebra' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    clearRows documentation[0m
0 total rows in table
3 total columns in table
    [32m  ✓[0m[90m example #1 works[0m
[0m    addColumn documentation[0m
0
Capra hircus
Goat
no
1
Panthera pardus
Leopard
yes
2
Equus zebra
Zebra
no
    [32m  ✓[0m[90m example #1 works[0m
[0m    getColumnCount documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    getRowCount documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeTokens documentation[0m
[ [ 'Lion', 'Mammal' ], [ 'Snake', 'Reptile' ] ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    trim documentation[0m
[ [ 'Lion,', 'Mammal' ], [ 'Snake', 'Reptile' ] ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeColumn documentation[0m
2
    [32m  ✓[0m[90m example #1 works[0m
[0m    set documentation[0m
0
Canis Lupus
Wolf
1
Panthera pardus
Leopard
2
Equus zebra
Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    setNum documentation[0m
[ '0', 1, '2' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    setString documentation[0m
[
  [ '0', 'Capra hircus', 'Goat' ],
  [ '1', 'Panthera pardus', 'Leopard' ],
  [ '2', 'Equus zebra', 'Zebra' ],
  [ '3', 'Canis Lupus', 'Wolf' ]
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    get documentation[0m
Capra hircus
Capra hircus
    [32m  ✓[0m[90m example #1 works[0m
[0m    getNum documentation[0m
101
    [32m  ✓[0m[90m example #1 works[0m
[0m    getString documentation[0m
0
Capra hircus
Goat
1
Panthera pardus
Leopard
2
Equus zebra
Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    getObject documentation[0m
{
  '0': { id: '0', species: 'Capra hircus', name: 'Goat' },
  '1': { id: '1', species: 'Panthera pardus', name: 'Leopard' },
  '2': { id: '2', species: 'Equus zebra', name: 'Zebra' }
}
    [32m  ✓[0m[90m example #1 works[0m
[0m    getArray documentation[0m
[ '0', 'Capra hircus', 'Goat' ]
[ '1', 'Panthera pardus', 'Leopard' ]
[ '2', 'Equus zebra', 'Zebra' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/io/p5.TableRow.js[0m
[0m    set documentation[0m
[
  [ '0', 'Capra hircus', 'Unicorn' ],
  [ '1', 'Panthera pardus', 'Unicorn' ],
  [ '2', 'Equus zebra', 'Unicorn' ]
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    setNum documentation[0m
[
  [ 10, 'Capra hircus', 'Goat' ],
  [ 11, 'Panthera pardus', 'Leopard' ],
  [ 12, 'Equus zebra', 'Zebra' ]
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    setString documentation[0m
[
  [ '0', 'Capra hircus', 'A Goat named George' ],
  [ '1', 'Panthera pardus', 'A Leopard named George' ],
  [ '2', 'Equus zebra', 'A Zebra named George' ]
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    get documentation[0m
[ 'Goat', 'Leopard', 'Zebra' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    getNum documentation[0m
minimum id = 0, maximum id = -Infinity
    [32m  ✓[0m[90m example #1 works[0m
[0m    getString documentation[0m
longest: Panthera pardus
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/io/p5.XML.js[0m
[0m    getParent documentation[0m
mammals
    [32m  ✓[0m[90m example #1 works[0m
[0m    getName documentation[0m
mammals
    [32m  ✓[0m[90m example #1 works[0m
[0m    setName documentation[0m
mammals
fish
    [32m  ✓[0m[90m example #1 works[0m
[0m    hasChildren documentation[0m
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    listChildren documentation[0m
[
  '#text', 'animal',
  '#text', 'animal',
  '#text', 'animal',
  '#text'
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    getChildren documentation[0m
Goat
Leopard
Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    getChild documentation[0m
Goat
    [32m  ✓[0m[90m example #1 works[0m
Leopard
    [32m  ✓[0m[90m example #2 works[0m
[0m    addChild documentation[0m
Platypus
    [32m  ✓[0m[90m example #1 works[0m
[0m    removeChild documentation[0m
Leopard
Zebra
    [32m  ✓[0m[90m example #1 works[0m
Goat
Zebra
    [32m  ✓[0m[90m example #2 works[0m
[0m    getAttributeCount documentation[0m
2
    [32m  ✓[0m[90m example #1 works[0m
[0m    listAttributes documentation[0m
[ 'id', 'species' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    hasAttribute documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
[0m    getNum documentation[0m
0
    [32m  ✓[0m[90m example #1 works[0m
[0m    getString documentation[0m
Capra hircus
    [32m  ✓[0m[90m example #1 works[0m
[0m    setAttribute documentation[0m
Capra hircus
Jamides zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m    getContent documentation[0m
Goat
    [32m  ✓[0m[90m example #1 works[0m
[0m    setContent documentation[0m
Goat
Mountain Goat
    [32m  ✓[0m[90m example #1 works[0m
[0m    serialize documentation[0m
<mammals>
  <animal id="0" species="Capra hircus">Goat</animal>
  <animal id="1" species="Panthera pardus">Leopard</animal>
  <animal id="2" species="Equus zebra">Zebra</animal>
</mammals>
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.XML documentation[0m
0, Capra hircus, Goat
1, Panthera pardus, Leopard
2, Equus zebra, Zebra
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/math/calculation.js[0m
[0m    abs documentation[0m
-3
3
    [32m  ✓[0m[90m example #1 works[0m
[0m    ceil documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    constrain documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    dist documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    exp documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    floor documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    lerp documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    log documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    mag documentation[0m
36.05551275463989
85.44003745317531
72.80109889280519
106.3014581273465
    [32m  ✓[0m[90m example #1 works[0m
[0m    map documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    max documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    min documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    norm documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    pow documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    round documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    sq documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    sqrt documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    fract documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/math/math.js[0m
[0m    createVector documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/math/noise.js[0m
[0m    noise documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    noiseDetail documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (227ms)[0m
[0m    noiseSeed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (51ms)[0m
[0m  src/math/p5.Vector.js[0m
[0m    toString documentation[0m
p5.Vector Object : [20, 30, 0]
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    set documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    copy documentation[0m
true
    [32m  ✓[0m[90m example #1 works[0m
[0m    add documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 3, y: 5, z: 7 }
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
[0m    rem documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 1, y: 1, z: 1 }
    [32m  ✓[0m[90m example #2 works[0m
[0m    sub documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 1, y: 1, z: 1 }
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
[0m    mult documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 2, y: 6, z: 12 }
    [32m  ✓[0m[90m example #4 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 2, y: 4, z: 6 }
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
[0m    div documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 3, y: 2, z: 0.5 }
    [32m  ✓[0m[90m example #4 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 3, y: 2, z: 1 }
    [32m  ✓[0m[90m example #5 works[0m
    [32m  ✓[0m[90m example #6 works[0m
[0m    mag documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
53.85164807134504
    [32m  ✓[0m[90m example #2 works[0m
[0m    magSq documentation[0m
56
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    dot documentation[0m
20
    [32m  ✓[0m[90m example #1 works[0m
10
    [32m  ✓[0m[90m example #2 works[0m
[0m    cross documentation[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 0 }
    [32m  ✓[0m[90m example #1 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 1 }
    [32m  ✓[0m[90m example #2 works[0m
[0m    dist documentation[0m
1.4142135623730951
    [32m  ✓[0m[90m example #1 works[0m
1.4142135623730951
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    normalize documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
{
  isPInst: true,
  _fromRadians: {},
  _toRadians: {},
  x: 0.44543540318737396,
  y: 0.8908708063747479,
  z: 0.0890870806374748
}
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    limit documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    setMag documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    heading documentation[0m
1.0303768265243125
0.8960553845713439
1.1659045405098132
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    setHeading documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rotate documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
{
  isPInst: true,
  _fromRadians: {},
  _toRadians: {},
  x: -20,
  y: 10.000000000000004,
  z: 0
}
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 10, y: 20, z: 0 }
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    angleBetween documentation[0m
1.5707963267948966
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    lerp documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
{ isPInst: true, _fromRadians: {}, _toRadians: {}, x: 50, y: 50, z: 0 }
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    reflect documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    array documentation[0m
[ 20, 30, 0 ]
    [32m  ✓[0m[90m example #1 works[0m
10
20
30
    [32m  ✓[0m[90m example #2 works[0m
[0m    equals documentation[0m
true
false
    [32m  ✓[0m[90m example #1 works[0m
true
false
    [32m  ✓[0m[90m example #2 works[0m
[0m    fromAngle documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    fromAngles documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (122ms)[0m
[0m    random2D documentation[0m
{ x: 0.9995623390351438, y: 0.029582602701457492, z: 0 }
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (1014ms)[0m
[0m    random3D documentation[0m
{
  x: 0.9456196290556994,
  y: -0.32383862859348694,
  z: -0.030529654030976072
}
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Vector documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/math/random.js[0m
[0m    randomSeed documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    random documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    randomGaussian documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m  src/math/trigonometry.js[0m
[0m    acos documentation[0m
3.141592653589793 : -1 : 3.141592653589793
    [32m  ✓[0m[90m example #1 works[0m
3.9269908169872414 : -0.7071067811865477 : 2.3561944901923453
    [32m  ✓[0m[90m example #2 works[0m
[0m    asin documentation[0m
1.0471975511965976 : 0.8660254037844386 : 1.0471975511965976
    [32m  ✓[0m[90m example #1 works[0m
4.1887902047863905 : -0.8660254037844385 : -1.0471975511965974
    [32m  ✓[0m[90m example #2 works[0m
[0m    atan documentation[0m
1.0471975511965976 : 1.7320508075688767 : 1.0471975511965976
    [32m  ✓[0m[90m example #1 works[0m
4.1887902047863905 : 1.7320508075688754 : 1.0471975511965972
    [32m  ✓[0m[90m example #2 works[0m
[0m    atan2 documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    cos documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    sin documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    tan documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    degrees documentation[0m
0.7853981633974483 radians is 45 degrees
    [32m  ✓[0m[90m example #1 works[0m
[0m    radians documentation[0m
45 degrees is 0.7853981633974483 radians
    [32m  ✓[0m[90m example #1 works[0m
[0m    angleMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/typography/attributes.js[0m
[0m    textAlign documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
[0m    textLeading documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textSize documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textStyle documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textWidth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textAscent documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textDescent documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    textWrap documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
    [32m  ✓[0m[90m example #4 works[0m
[0m  src/typography/loading_displaying.js[0m
[0m    loadFont documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m
[0m    text documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (79ms)[0m
[0m    textFont documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (169ms)[0m
[0m  src/typography/p5.Font.js[0m
[0m    textBounds documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (59ms)[0m
[0m    textToPoints documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (67ms)[0m
[0m  src/utilities/array_functions.js[0m
[0m    append documentation[0m
[ 'Mango', 'Apple', 'Papaya', 'Peach' ]
[ 'Mango', 'Apple', 'Papaya', 'Peach' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    arrayCopy documentation[0m
[ 'A', 'B', 'C' ]
[ 'B', 'C', 3 ]
[ 'B', 'C', 3 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    concat documentation[0m
[ 'A', 'B', 'C' ]
[ 1, 2, 3 ]
[ 'A', 'B', 'C' ]
[ 1, 2, 3 ]
[ 'A', 'B', 'C', 1, 2, 3 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    reverse documentation[0m
[ 'C', 'B', 'A' ]
[ 'C', 'B', 'A' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    shorten documentation[0m
[ 'A', 'B' ]
[ 'A', 'B' ]
[ 'A', 'B' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    shuffle documentation[0m
[
  'def',
  6.283185307179586,
  'ABC',
  2.718281828459045,
  { isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 0 }
]
[
  'def',
  6.283185307179586,
  'ABC',
  2.718281828459045,
  { isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 0 }
]
[
  'def',
  6.283185307179586,
  'ABC',
  2.718281828459045,
  { isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 0 }
]
[
  { isPInst: true, _fromRadians: {}, _toRadians: {}, x: 0, y: 0, z: 0 },
  6.283185307179586,
  2.718281828459045,
  'ABC',
  'def'
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    sort documentation[0m
[ 'banana', 'apple', 'pear', 'lime' ]
[ 'apple', 'banana', 'lime', 'pear' ]
    [32m  ✓[0m[90m example #1 works[0m
[
   2, 6, 1,  5,
  14, 9, 8, 12
]
[
   1, 2, 5,  6,
  14, 9, 8, 12
]
    [32m  ✓[0m[90m example #2 works[0m
[0m    splice documentation[0m
[
  0,   1,   2, 'A',
  'B', 'C', 3, 4
]
[ 'A', 'B', 'C' ]
[
  0,   1,   2, 'A',
  'B', 'C', 3, 4
]
    [32m  ✓[0m[90m example #1 works[0m
[0m    subset documentation[0m
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3 ]
[ 3, 4 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/utilities/conversion.js[0m
[0m    float documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
10.31
Infinity
-Infinity
    [32m  ✓[0m[90m example #2 works[0m
[0m    int documentation[0m
10
10
-10
1
0
Infinity
-Infinity
[ 0, 1, 10, 9 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    str documentation[0m
10
10.31
-10
true
false
[ 'true', '10.3', '9.8' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    boolean documentation[0m
false
true
true
false
[ false, true, true ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    byte documentation[0m
127
-128
23
23
NaN
1
[ 0, -1, 100 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    char documentation[0m
A
A
ABC
[ 'A', 'B', 'C' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    unchar documentation[0m
65
[ 65, 66, 67 ]
[ 65, 66, 67 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    hex documentation[0m
000000FF
0000FF
Infinity
-Infinity
[ '000000', '00007F', '0000FF' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    unhex documentation[0m
10
255
[ 255, 170, 0 ]
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/utilities/string_functions.js[0m
[0m    join documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    match documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    matchAll documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    nf documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    nfc documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    nfp documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    nfs documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    split documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    splitTokens documentation[0m
[ 'Mango', ' Banana', ' Lime' ]
    [32m  ✓[0m[90m example #1 works[0m
[0m    trim documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/utilities/time_date.js[0m
[0m    day documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    hour documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    minute documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    millis documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    month documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    second documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    year documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m  src/webgl/3d_primitives.js[0m
[0m    plane documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (315ms)[0m
[0m    box documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (280ms)[0m
[0m    sphere documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (320ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (299ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (257ms)[0m
[0m    cylinder documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (252ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (229ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (235ms)[0m
[0m    cone documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (256ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (238ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (335ms)[0m
[0m    ellipsoid documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (331ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (257ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (244ms)[0m
[0m    torus documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (268ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (244ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (251ms)[0m
[0m  src/webgl/interaction.js[0m
[0m    orbitControl documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (61ms)[0m
[0m    debugMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (256ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (250ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (260ms)[0m
    [32m  ✓[0m[90m example #4 works[0m[31m (248ms)[0m
    [32m  ✓[0m[90m example #5 works[0m[31m (249ms)[0m
[0m    noDebugMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (258ms)[0m
[0m  src/webgl/light.js[0m
[0m    ambientLight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (132ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (131ms)[0m
[0m    specularColor documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (93ms)[0m
[0m    directionalLight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (240ms)[0m
[0m    pointLight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (91ms)[0m
[0m    lights documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (260ms)[0m
[0m    lightFalloff documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (68ms)[0m
[0m    spotLight documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (63ms)[0m
[0m    noLights documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (68ms)[0m
[0m  src/webgl/loading.js[0m
[0m    loadModel documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (279ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (137ms)[0m
[0m    model documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (340ms)[0m
[0m  src/webgl/material.js[0m
[0m    loadShader documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (74ms)[0m
[0m    createShader documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m    shader documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (73ms)[0m
[0m    resetShader documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (351ms)[0m
[0m    texture documentation[0m

    [32m  ✓[0m[90m example #1 works[0m[31m (281ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (103ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (280ms)[0m
    [32m  ✓[0m[90m example #4 works[0m[31m (318ms)[0m
[0m    textureMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (64ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[33m (70ms)[0m
[0m    textureWrap documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (72ms)[0m
[0m    normalMaterial documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (61ms)[0m
[0m    ambientMaterial documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (62ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (251ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (254ms)[0m
[0m    emissiveMaterial documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (58ms)[0m
[0m    specularMaterial documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (150ms)[0m
[0m    shininess documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (68ms)[0m
[0m  src/webgl/p5.Camera.js[0m
[0m    camera documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (257ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (272ms)[0m
[0m    perspective documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (142ms)[0m
[0m    ortho documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (133ms)[0m
[0m    frustum documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (54ms)[0m
[0m    createCamera documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (239ms)[0m
[0m    eyeX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (243ms)[0m
[0m    eyeY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (234ms)[0m
[0m    eyeZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (249ms)[0m
[0m    centerX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (258ms)[0m
[0m    centerY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (248ms)[0m
[0m    centerZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (241ms)[0m
[0m    upX documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (41ms)[0m
[0m    upY documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (45ms)[0m
[0m    upZ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
[0m    perspective documentation[0m

    [32m  ✓[0m[90m example #1 works[0m[33m (73ms)[0m
[0m    ortho documentation[0m

    [32m  ✓[0m[90m example #1 works[0m[33m (71ms)[0m
[0m    frustum documentation[0m

    [32m  ✓[0m[90m example #1 works[0m[31m (79ms)[0m
[0m    pan documentation[0m

    [32m  ✓[0m[90m example #1 works[0m[33m (75ms)[0m
[0m    tilt documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (188ms)[0m
[0m    lookAt documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (150ms)[0m
[0m    camera documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (248ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (245ms)[0m
[0m    move documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (51ms)[0m
[0m    setPosition documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (55ms)[0m
[0m    setCamera documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (51ms)[0m
[0m    p5.Camera documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (62ms)[0m
[0m  src/webgl/p5.RendererGL.js[0m
[0m    setAttributes documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (257ms)[0m
    [32m  ✓[0m[90m example #2 works[0m[31m (247ms)[0m
    [32m  ✓[0m[90m example #3 works[0m[31m (152ms)[0m
[0m  src/webgl/p5.Shader.js[0m
[0m    setUniform documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (124ms)[0m
[0m  lib/addons/p5.sound.js[0m
[0m    getAudioContext documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    userStartAudio documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    midiToFreq documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    soundFormats documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    playMode documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    pause documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
[0m    loop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    pan documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    rate documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
[0m    reverseBuffer documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    addCue documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    save documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m    getBlob documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (81ms)[0m
[0m    loadSound documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (151ms)[0m
[0m    setInput documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (220ms)[0m
[0m    getLevel documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (47ms)[0m
[0m    analyze documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m    getCentroid documentation[0m
{}
    [32m  ✓[0m[90m example #1 works[0m
[0m    freq documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    set documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setADSR documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setRange documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    play documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    triggerAttack documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    triggerRelease documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    ramp documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    getSources documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    setSource documentation[0m
[0m    process documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (197ms)[0m
[0m    createConvolver documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (164ms)[0m
[0m    onPeak documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (51ms)[0m
[0m    play documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    triggerAttack documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    triggerRelease documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    play documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    noteAttack documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    noteRelease documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.SoundFile documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (49ms)[0m
[0m    p5.Amplitude documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (46ms)[0m
[0m    p5.FFT documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (61ms)[0m
[0m    p5.Oscillator documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Envelope documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Pulse documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.AudioIn documentation[0m
{}
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Filter documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (43ms)[0m
[0m    p5.EQ documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (64ms)[0m
[0m    p5.Delay documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Reverb documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (136ms)[0m
[0m    p5.Convolver documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[31m (171ms)[0m
[0m    p5.Phrase documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Part documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.SoundLoop documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.PeakDetect documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (48ms)[0m
[0m    p5.SoundRecorder documentation[0m
{}
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.Gain documentation[0m
    [32m  ✓[0m[90m example #1 works[0m[33m (66ms)[0m
[0m    p5.MonoSynth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[0m    p5.PolySynth documentation[0m
    [32m  ✓[0m[90m example #1 works[0m
[92m [0m[32m 868 passing[0m[90m (60s)[0m

Running "mochaChrome:test" (mochaChrome) task

🌸 p5.js says: 
Syntax Error - "expect" is being redeclared. JavaScript doesn't allow declaring a variable more than once. Check the line number in error for redeclaration of the variable.

+ More info: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Redeclared_parameter#what_went_wrong
[0m[0m
[0m  describe[0m
[0m    p5.prototype.describe[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no params[0m
    [32m  ✓[0m[90m err when LABEL at param #0[0m
    [32m  ✓[0m[90m should create description as fallback[0m
    [32m  ✓[0m[90m should not add extra period if string ends in "."[0m
    [32m  ✓[0m[90m should not add period if string ends in "!" or "?[0m
    [32m  ✓[0m[90m should create description when called after describeElement()[0m
    [32m  ✓[0m[90m should create Label adjacent to canvas[0m
    [32m  ✓[0m[90m should create Label adjacent to canvas when label of element already exists[0m
[0m    p5.prototype.describeElement[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0 and #1[0m
    [32m  ✓[0m[90m no params[0m
    [32m  ✓[0m[90m err when LABEL at param #0[0m
    [32m  ✓[0m[90m err when LABEL at param #1[0m
    [32m  ✓[0m[90m should create element description as fallback[0m
    [32m  ✓[0m[90m should not add extra ":" if element name ends in colon[0m
    [32m  ✓[0m[90m should replace ";", ",", "." for ":" in element name[0m
    [32m  ✓[0m[90m should create element description when called after describe()[0m
    [32m  ✓[0m[90m should create element label adjacent to canvas[0m
    [32m  ✓[0m[90m should create element label adjacent to canvas when called after describe()[0m
[0m  outputs[0m
[0m    p5.prototype.textOutput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should create output as fallback[0m
    [32m  ✓[0m[90m should create output as label[0m
    [32m  ✓[0m[90m should create text output for arc()[0m[31m (79ms)[0m
    [32m  ✓[0m[90m should create text output for ellipse()[0m
    [32m  ✓[0m[90m should create text output for triangle()[0m
[0m    p5.prototype.gridOutput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should create output as fallback[0m
    [32m  ✓[0m[90m should create output as label[0m
    [32m  ✓[0m[90m should create text output for quad()[0m[33m (44ms)[0m
    [32m  ✓[0m[90m should create text output for point()[0m
    [32m  ✓[0m[90m should create text output for triangle()[0m
[0m  color/p5.ColorConversion[0m
[0m    rgbaToHSBA[0m
    [32m  ✓[0m[90m rgba converts to hsba[0m
[0m    hsbaToRGBA[0m
    [32m  ✓[0m[90m hsba converts to rgba[0m
    [32m  ✓[0m[90m handles maximum hue value[0m
[0m    hslaToRGBA[0m
    [32m  ✓[0m[90m hsla converts to rgba[0m
    [32m  ✓[0m[90m handles maximum hue value[0m
[0m    rgbaToHSLA[0m
    [32m  ✓[0m[90m rgba converts to hsla (low lightness)[0m
    [32m  ✓[0m[90m rgba converts to hsla (high lightness)[0m
[0m    hslaToHSBA[0m
    [32m  ✓[0m[90m hsla converts to hsba[0m
[0m    hsbaToHSLA[0m
    [32m  ✓[0m[90m hsba converts to hsla[0m
[0m  color/CreatingReading[0m
[0m    p5.prototype.alpha[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.red, green, blue[0m
    [32m  ✓[0m[90m red(): no friendly-err-msg[0m
    [32m  ✓[0m[90m green(): no friendly-err-msg[0m
    [32m  ✓[0m[90m blue(): no friendly-err-msg[0m
[0m    p5.prototype.hue, brightness, lightness, saturation[0m
    [32m  ✓[0m[90m hue(): no friendly-err-msg[0m
    [32m  ✓[0m[90m brightness(): no friendly-err-msg[0m
    [32m  ✓[0m[90m lightness(): no friendly-err-msg[0m
    [32m  ✓[0m[90m saturation(): no friendly-err-msg[0m
[0m    p5.prototype.lerpColor[0m
    [32m  ✓[0m[90m should correctly get lerp colors in RGB[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSL[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSB[0m
    [32m  ✓[0m[90m should not extrapolate[0m
    [32m  ✓[0m[90m missing param #2[0m
[0m    p5.prototype.lerpColor with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in RGB with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSL with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSB with alpha[0m
    [32m  ✓[0m[90m should not extrapolate[0m
[0m  p5.Color[0m
[0m    p5.prototype.color(r,g,b)[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m shouldn't set HSBA property before hsb access func is called[0m
    [32m  ✓[0m[90m shouldn't set HSLA property before hsb access func is called[0m
    [32m  ✓[0m[90m color(): missing param #0 + throws error[0m
[0m    p5.prototype.color("#rgb")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
    [32m  ✓[0m[90m should not be able to pass css & alpha[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rgba")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rrggbb")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rrggbbaa")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("rgb(r,g,b)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m invalid RGB values resolve to white[0m
[0m    p5.prototype.color("rgb(r%,g%,b%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m spot check decimal percentage values[0m
    [32m  ✓[0m[90m invalid percentage values default to white[0m
[0m    p5.prototype.color("rgba(r,g,b,a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m invalid RGBA values resolve to white[0m
[0m    p5.prototype.color("rgba(r%,g%,b%,a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m spot check decimal percentage values[0m
    [32m  ✓[0m[90m invalid RGBA percentage values resolve to white[0m
[0m    p5.prototype.color("hsl(h, s%, l%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsla(h, s%, l%, a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsb(h, s%, b%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsba(h, s%, b%, a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("svgnamedcolor")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check color keywords[0m
[0m    p5.prototype.color([])[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color(r,g,b,a)[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/brightness/lightness[0m
    [32m  ✓[0m[90m should correctly get RGBA values[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    in default mode[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in RGB mode with custom range[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly get RGBA property[0m
    [32m  ✓[0m[90m should correctly render color string[0m
    [32m  ✓[0m[90m should correctly get RGBA property after overwrite[0m
[0m    p5.Color in HSL mode[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSL mode with Alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/lightness/alpha[0m
[0m    p5.Color in HSL mode with custom range[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSL mode with RGB string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSL mode with HSL string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSL mode with HSB string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSB mode with Alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/brightness/alpha[0m
[0m    p5.Color in HSB mode with custom range[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with RGB string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with HSB string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with HSL string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in RGB mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in RGB mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSB mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSB mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSL mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSL mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color.prototype.toString[0m
    [32m  ✓[0m[90m should generate (r,g,b,a) color string with 0-1 normalized alpha[0m
    [32m  ✓[0m[90m should consistently generate the same output[0m
    [32m  ✓[0m[90m should not mutate color levels[0m
[0m  color/Setting[0m
[0m    p5.prototype.erase[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should set renderer to erasing state[0m
    [32m  ✓[0m[90m should cache renderer fill[0m
    [32m  ✓[0m[90m should cache renderer stroke[0m
    [32m  ✓[0m[90m should cache renderer blend[0m
    [32m  ✓[0m[90m should set fill strength[0m
    [32m  ✓[0m[90m should set stroke strength[0m
[0m    p5.RendererGL.prototype.erase[0m
    [32m  ✓[0m[90m should set renderer to erasing state[0m
    [32m  ✓[0m[90m should cache renderer fill[0m
    [32m  ✓[0m[90m should cache renderer stroke[0m
    [32m  ✓[0m[90m should cache renderer blend[0m
    [32m  ✓[0m[90m should set fill strength[0m
    [32m  ✓[0m[90m should set stroke strength[0m
    [32m  ✓[0m[90m should set default values when no arguments[0m
[0m    p5.prototype.noErase[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should turn off renderer erasing state[0m

    [32m  ✓[0m[90m should restore cached renderer fill[0m

    [32m  ✓[0m[90m should restore cached renderer stroke[0m
[0m    p5.RendererGL.prototype.noErase[0m

    [32m  ✓[0m[90m should turn off renderer erasing state[0m

    [32m  ✓[0m[90m should restore cached renderer fill[0m

    [32m  ✓[0m[90m should restore cached renderer stroke[0m
[0m    p5.prototype.colorMode[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m should set mode to RGB[0m

    [32m  ✓[0m[90m should correctly set color RGB maxes[0m

    [32m  ✓[0m[90m should set mode to HSL[0m

    [32m  ✓[0m[90m should correctly set color HSL maxes[0m

    [32m  ✓[0m[90m should set mode to HSB[0m

    [32m  ✓[0m[90m should correctly set color HSB maxes[0m
[0m    p5.Color components[0m

    [32m  ✓[0m[90m setRed() correctly sets red component[0m

    [32m  ✓[0m[90m setGreen() correctly sets green component[0m

    [32m  ✓[0m[90m setBlue() correctly sets blue component[0m

    [32m  ✓[0m[90m setAlpha correctly sets alpha component[0m

    [32m  ✓[0m[90m changing the red/green/blue/alpha components should clear the cached HSL/HSB values[0m
[0m  2D Primitives[0m
[0m    p5.prototype.arc[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #4, #5[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.ellipse[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.line[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m no friendly-err-msg, 3D[0m
    [32m  ✓[0m[90m missing param #3[0m
    [32m  ✓[0m[90m missing param #4 [0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.point[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m no friendly-err-msg, 3D[0m
    [32m  ✓[0m[90m missing param #1[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.quad[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m missing param #7[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.rect[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, format I[0m
    [32m  ✓[0m[90m no friendly-err-msg, format II[0m
    [32m  ✓[0m[90m missing param #4[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.triangle[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #5[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.square[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, format I[0m
    [32m  ✓[0m[90m no friendly-err-msg, format II[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype._normalizeArcAngles[0m
    [32m  ✓[0m[90m start/stop both at zero[0m
    [32m  ✓[0m[90m start/stop same but non-zero[0m
    [32m  ✓[0m[90m start/stop both close to zero, start < stop[0m
    [32m  ✓[0m[90m start/stop both close to zero, start > stop[0m
    [32m  ✓[0m[90m start/stop both close to same non-zero, start < stop[0m
    [32m  ✓[0m[90m start/stop both close to same non-zero, start > stop[0m
    [32m  ✓[0m[90m start/stop around zero but not close, start < stop[0m
    [32m  ✓[0m[90m start/stop around zero but not close, start > stop[0m
    [32m  ✓[0m[90m start/stop away from zero and not close, start < stop[0m
    [32m  ✓[0m[90m start/stop away from zero and not close, start > stop[0m
    [32m  ✓[0m[90m scaling correction, quadrants 1 and 3[0m
    [32m  ✓[0m[90m scaling correction, quadrants 2 and 4[0m
[0m  Attributes[0m
[0m    p5.prototype.ellipseMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rectMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.noSmooth[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.prototype.smooth[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.prototype.strokeCap[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.strokeJoin[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.strokeWeight[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m  Curves[0m
[0m    p5.prototype.bezier[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #6, #7[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.bezierPoint[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Bezier Curve[0m
[0m    p5.prototype.bezierTangent[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Bezier Curve[0m
[0m    p5.prototype.curve[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #6, #7[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.curvePoint[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Catmull-Rom Curve[0m
[0m    p5.prototype.curveTangent[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Catmull-Rom Curve[0m
[0m  Environment[0m
[0m    p5.frameCount[0m
    [32m  ✓[0m[90m starts at zero[0m
    [32m  ✓[0m[90m matches draw calls[0m[31m (236ms)[0m
[0m    p5.prototype.focused[0m
    [32m  ✓[0m[90m it should return true on focus[0m
    [32m  ✓[0m[90m it should return true on blur[0m
[0m    p5.prototype.cursor[0m
    [32m  ✓[0m[90m should change cursor to cross[0m
[0m    p5.prototype.noCursor[0m
    [32m  ✓[0m[90m should change cursor to none[0m
[0m    p5.prototype.frameRate[0m
    [32m  ✓[0m[90m returns 0 on first draw call[0m
    [32m  ✓[0m[90m returns current frame rate after first draw call[0m[33m (43ms)[0m
    [32m  ✓[0m[90m wrong param type. throws error.[0m
    [32m  ✓[0m[90m p5.prototype.getFrameRate[0m
[0m    Canvas dimensions[0m
    [32m  ✓[0m[90m p5.prototype.width[0m
    [32m  ✓[0m[90m p5.prototype.height[0m
[0m    p5.prototype.pixelDensity[0m
    [32m  ✓[0m[90m returns the pixel density[0m
    [32m  ✓[0m[90m sets the pixel density[0m
    [32m  ✓[0m[90m wrong param type. throws validationError.[0m
[0m    p5.prototype.displayDensity[0m
    [32m  ✓[0m[90m returns the pixel density of the display[0m
    [32m  ✓[0m[90m pixelDensity does not change display density[0m
[0m  Error Helpers[0m
[0m    friendly error logger[0m

🌸 p5.js says: basic (http://p5js.org/reference/#/p5/basic)
    [32m  ✓[0m[90m basic[0m
[0m    validateParameters: Numbers + optional Constant[0m
    [32m  ✓[0m[90m arc(): no friendly-err-msg[0m
    [32m  ✓[0m[90m arc(): missing param #4, #5[0m
    [32m  ✓[0m[90m arc(): missing param #0[0m
    [32m  ✓[0m[90m arc(): missing param #4[0m
    [32m  ✓[0m[90m arc(): missing param #5[0m
    [32m  ✓[0m[90m arc(): missing param #6, no friendly-err-msg[0m
    [32m  ✓[0m[90m arc(): wrong param type at #0[0m
[0m    validateParameters: Numbers + optional Constant[0m
    [32m  ✓[0m[90m rect(): no friendly-err-msg[0m
    [32m  ✓[0m[90m rect(): wrong param type at #0[0m
[0m    validateParameters: class, multi-types + optional Numbers[0m
    [32m  ✓[0m[90m ambientLight(): no friendly-err-msg[0m
[0m    validateParameters: a few edge cases[0m
    [32m  ✓[0m[90m color: wrong type for optional parameter[0m
    [32m  ✓[0m[90m color: superfluous parameter[0m
    [32m  ✓[0m[90m color: wrong element types[0m
    [32m  ✓[0m[90m rect: null, non-trailing, optional parameter[0m
    [32m  ✓[0m[90m color: too many args + wrong types too[0m
[0m    validateParameters: trailing undefined arguments[0m
    [32m  ✓[0m[90m color: missing params #1 #2[0m
    [32m  ✓[0m[90m random: missing params #0 #1 (both optional)[0m
    [32m  ✓[0m[90m circle: missing compulsory param #2[0m
[0m    validateParameters: argument tree[0m
    [32m  ✓[0m[90m no repeated validation error for the same wrong arguments[0m
    [32m  ✓[0m[90m should throw validation errors for different wrong args[0m
    [32m  ✓[0m[90m arg tree is built properly[0m
[0m    validateParameters: multi-format[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): optional parameter, incorrect type[0m
    [32m  ✓[0m[90m color(): extra parameter[0m
    [32m  ✓[0m[90m color(): incorrect element type[0m
    [32m  ✓[0m[90m color(): incorrect parameter count[0m
[0m    helpForMisusedAtTopLevelCode[0m
    [32m  ✓[0m[90m help for constants is shown[0m
    [32m  ✓[0m[90m help for functions is shown[0m[31m (131ms)[0m
    [32m  ✓[0m[90m help for variables is shown[0m
[0m    misspelling detection[0m
    [32m  ✓[0m[90m detects capitalization mistakes[0m
    [32m  ✓[0m[90m detects spelling mistakes[0m
    [32m  ✓[0m[90m can give more than one closest matches, if applicable[0m
    [32m  ✓[0m[90m detects spelling + captialization mistakes[0m
[0m    caps mistakes for user-defined functions (instance mode)[0m
    [32m  ✓[0m[90m detects capitatilization mistake in instance mode[0m
[0m    caps mistakes for user-defined functions (global mode)[0m
    [32m  ✓[0m[90m detects capitatilization mistake in global mode[0m[31m (318ms)[0m
[0m  Global Error Handling[0m
  [32m  ✓[0m[90m identifies errors happenning internally[0m[31m (170ms)[0m
  [32m  ✓[0m[90m identifies errors in preload[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'notDefined'[0m[31m (138ms)[0m
  [32m  ✓[0m[90m identifies SyntaxError 'Invalid or unexpected Token'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies SyntaxError 'unexpectedToken'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'notFunc'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'notFuncObj'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies ReferenceError 'cannotAccess'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies SyntaxError 'badReturnOrYield'[0m[31m (134ms)[0m
  [32m  ✓[0m[90m identifies SyntaxError 'missingInitializer'[0m[31m (133ms)[0m
  [32m  ✓[0m[90m identifies SyntaxError 'redeclaredVariable'[0m[31m (136ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'constAssign'[0m[31m (137ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'readFromNull'[0m[31m (135ms)[0m
  [32m  ✓[0m[90m identifies TypeError 'readFromUndefined'[0m[31m (137ms)[0m
  [32m  ✓[0m[90m builds friendlyStack[0m[31m (135ms)[0m
  [32m  ✓[0m[90m indentifies internal error - instance mode[0m[31m (134ms)[0m
  [32m  ✓[0m[90m indentifies error in preload - instance mode[0m[31m (135ms)[0m
  [32m  ✓[0m[90m indentifies error in user code - instance mode[0m[31m (133ms)[0m
[0m  Tests for p5.js sketch_reader[0m
  [32m  ✓[0m[90m detects reassignment of p5.js constant inside setup[0m[31m (134ms)[0m
  [32m  ✓[0m[90m detects reassignment of p5.js function inside setup[0m[31m (135ms)[0m
  [32m  ✓[0m[90m detects reassignment of p5.js constant outside setup[0m[31m (134ms)[0m
  [32m  ✓[0m[90m detects reassignment of p5.js function outside setup[0m[31m (138ms)[0m
  [32m  ✓[0m[90m detects reassignment of p5.js functions in declaration lists[0m[31m (137ms)[0m
  [32m  ✓[0m[90m detects reassignment of p5.js functions in declaration lists after function calls[0m[31m (144ms)[0m
  [32m  ✓[0m[90m ignores p5.js functions used in the right hand side of assignment expressions[0m[31m (139ms)[0m
  [32m  ✓[0m[90m ignores p5.js function names used as function arguments[0m[31m (137ms)[0m
You just changed the value of "text", which was a p5 function. This could cause problems later if you're not careful.
  [32m  ✓[0m[90m fails gracefully on inputs too complicated to parse[0m[31m (142ms)[0m
[0m  p5.Element[0m
[0m    p5.Element.prototype.parent[0m
    [32m  ✓[0m[90m attaches child to parent[0m
    [32m  ✓[0m[90m attaches child to parent using classname[0m
    [32m  ✓[0m[90m attaches child to parent using classname[0m
    [32m  ✓[0m[90m returns the parent[0m
[0m    p5.Element.prototype.id[0m
    [32m  ✓[0m[90m attaches child to parent[0m
    [32m  ✓[0m[90m returns the id[0m
[0m    p5.Element.prototype.mousePressed[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
[0m    p5.Element.prototype.mouseClicked[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.doubleClicked[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseWheel[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
[0m    p5.Element.prototype.touchStarted[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.touchMoved[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.touchEnded[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseReleased[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseMoved[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseOver[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseOut[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.dragOver[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.dragLeave[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    operating with element classes[0m
    [32m  ✓[0m[90m should add class to element[0m
    [32m  ✓[0m[90m should remove class from element with only one class[0m
    [32m  ✓[0m[90m should remove class from element with several classes[0m
    [32m  ✓[0m[90m should return true if element has specified class[0m
    [32m  ✓[0m[90m should return false if element has not specified class[0m
    [32m  ✓[0m[90m should return false if element has class that is partially similar as specified class[0m
    [32m  ✓[0m[90m should toggle specified class on element[0m
[0m  Graphics[0m
[0m    p5.prototype.createGraphics[0m
    [32m  ✓[0m[90m it creates a graphics[0m
[0m    p5.Graphics[0m
    [32m  ✓[0m[90m it has necessary properties[0m
    [32m  ✓[0m[90m it has consistent sizes[0m
    [32m  ✓[0m[90m its canvas has consistent sizes[0m
    [32m  ✓[0m[90m it has a valid pixels array[0m
[0m    p5.Graphics.pixelDensity[0m
    [32m  ✓[0m[90m it can change density[0m
    [32m  ✓[0m[90m it keeps valid sizes after change[0m
    [32m  ✓[0m[90m its canvas keeps valid sizes after change[0m
[]
    [32m  ✓[0m[90m it keeps a valid pixel array after change[0m
[0m    p5.Graphics.resizeCanvas[0m
    [32m  ✓[0m[90m it can call resizeCanvas[0m
    [32m  ✓[0m[90m it resizes properly with pixelDensity 1[0m
    [32m  ✓[0m[90m its canvas resizes properly with pixelDensity 1[0m
    [32m  ✓[0m[90m it resizes properly the pixels array with density 1[0m
    [32m  ✓[0m[90m it resizes properly with pixelDensity 2[0m
    [32m  ✓[0m[90m its canvas resizes properly with pixelDensity 2[0m
    [32m  ✓[0m[90m it resizes properly the pixels array with density 2[0m
[0m  preloads[0m
[0m    From external sources[0m
    [32m  ✓[0m[90m Extension preload causes setup to wait[0m
    [32m  ✓[0m[90m Extension preload error causes setup to not execute[0m
[0m      addCallbacks[0m
      [32m  ✓[0m[90m Extension is passed all arguments when not using addCallbacks[0m
      [32m  ✓[0m[90m Extension gets stripped arguments when using addCallbacks[0m
      [32m  ✓[0m[90m Extension with addCallbacks supports success callback[0m
[0m      legacyPreload[0m
      [32m  ✓[0m[90m Extension legacy preload causes setup to wait[0m
      [32m  ✓[0m[90m Extension legacy preload error causes setup to not execute[0m
      [32m  ✓[0m[90m Extension legacy preload returns objects correctly[0m
      [32m  ✓[0m[90m Extension legacy preload returns arrays correctly[0m
[0m  Rendering[0m
[0m    p5.prototype.createCanvas[0m
    [32m  ✓[0m[90m should have correct initial colors[0m
[0m    p5.prototype.resizeCanvas[0m
    [32m  ✓[0m[90m should resize canvas[0m
    [32m  ✓[0m[90m should restore fill color[0m
    [32m  ✓[0m[90m should restore stroke color[0m
    [32m  ✓[0m[90m should restore stroke weight[0m
    [32m  ✓[0m[90m should restore stroke cap[0m
[0m    p5.prototype.blendMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should be able to ADD[0m
    [32m  ✓[0m[90m should be able to MULTIPLY[0m
[0m    p5.prototype.setAttributes[0m
    [32m  ✓[0m[90m _glAttributes should be null at start[0m
    [32m  ✓[0m[90m _glAttributes should modify with setAttributes[0m
    [32m  ✓[0m[90m _glAttributes.antialias modify with smooth()[0m
[0m    webgl assertions[0m
    [32m  ✓[0m[90m rotateX() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m rotateY() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m rotateZ() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m camera() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m perspective() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ortho() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m frustum() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m orbitControl() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ambientLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m directionalLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m pointLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m lights() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m specularColor() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m spotLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m model() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m createShader() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m shader() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m normalMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m texture() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ambientMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m emissiveMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m specularMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m shininess() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m lightFalloff() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m plane() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m box() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m sphere() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m cylinder() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m cone() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ellipsoid() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m torus() should throw a WEBGL assertion Error[0m
[0m  Structure[0m
[0m    p5.prototype.loop and p5.prototype.noLoop[0m
    [32m  ✓[0m[90m noLoop should stop[0m[31m (101ms)[0m
    [32m  ✓[0m[90m loop should restart[0m[31m (101ms)[0m
[0m    p5.prototype.push and p5.prototype.pop[0m
    [32m  ✓[0m[90m leak no state after fill()[0m
    [32m  ✓[0m[90m leak no state after noFill()[0m
    [32m  ✓[0m[90m leak no state after stroke()[0m
    [32m  ✓[0m[90m leak no state after noStroke()[0m
    [32m  ✓[0m[90m leak no state after tint()[0m
    [32m  ✓[0m[90m leak no state after noTint()[0m
    [32m  ✓[0m[90m leak no state after strokeWeight()[0m
    [32m  ✓[0m[90m leak no state after strokeCap()[0m
    [32m  ✓[0m[90m leak no state after strokeJoin()[0m
    [32m  ✓[0m[90m leak no state after imageMode()[0m
    [32m  ✓[0m[90m leak no state after rectMode()[0m
    [32m  ✓[0m[90m leak no state after ellipseMode()[0m
    [32m  ✓[0m[90m leak no state after colorMode()[0m
    [32m  ✓[0m[90m leak no state after textAlign()[0m
    [32m  ✓[0m[90m leak no state after textFont()[0m
    [32m  ✓[0m[90m leak no state after textStyle()[0m
    [32m  ✓[0m[90m leak no state after textSize()[0m
    [32m  ✓[0m[90m leak no state after textLeading()[0m
[0m    p5.prototype.redraw[0m
    [32m  ✓[0m[90m resets the rendering matrix between frames[0m
    [32m  ✓[0m[90m instance redraw is independent of window[0m[31m (1052ms)[0m
[0m    loop[0m
    [32m  ✓[0m[90m loop in setup does not call draw[0m
    [32m  ✓[0m[90m loop in draw does not call draw[0m
[0m  Transform[0m
[0m    p5.prototype.rotate[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.rotateX[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rotateY[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rotateZ[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.scale[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.shearX[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.shearY[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.translate[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0[0m

    [32m  ✓[0m[90m missing param #1[0m
[0m  Version[0m
  [32m  ✓[0m[90m exists on p5 object[0m
  [32m  ✓[0m[90m exists on instance of p5 sketch[0m
[0m  Vertex[0m
[0m    p5.prototype.beginShape[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.quadraticVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #3[0m
    [32m  ✓[0m[90m missing param #5[0m

🌸 p5.js says: vertex() must be used once before calling quadraticVertex() (http://p5js.org/reference/#/p5/quadraticVertex)
    [32m  ✓[0m[90m _friendlyError is called. vertex() should be used once before quadraticVertex()[0m
[0m    p5.prototype.bezierVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #6[0m
    [32m  ✓[0m[90m missing param #8-9[0m

🌸 p5.js says: vertex() must be used once before calling bezierVertex() (http://p5js.org/reference/#/p5/bezierVertex)
    [32m  ✓[0m[90m _friendlyError is called. vertex() should be used once before bezierVertex()[0m
[0m    p5.prototype.curveVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #1[0m
[0m    p5.prototype.endShape[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.vertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [36m  - missing param #1[0m
    [36m  - wrong param type at #0[0m
[0m  Dictionary Objects[0m
[0m    p5.prototype.stringDict[0m
    [32m  ✓[0m[90m should be created[0m
    [32m  ✓[0m[90m has correct structure[0m
    [32m  ✓[0m[90m should have correct size[0m
    [32m  ✓[0m[90m should add new key-value pairs[0m
    [32m  ✓[0m[90m should add objects[0m
    [32m  ✓[0m[90m should change existing values[0m
    [32m  ✓[0m[90m should clear[0m
[0m    p5.prototype.numberDict[0m
    [32m  ✓[0m[90m should be created[0m
    [32m  ✓[0m[90m has correct structure[0m
    [32m  ✓[0m[90m should have correct size[0m
    [32m  ✓[0m[90m should add new key-value pairs[0m
    [32m  ✓[0m[90m should change existing values[0m
    [32m  ✓[0m[90m should add values together[0m
    [32m  ✓[0m[90m should subtract from value[0m
    [32m  ✓[0m[90m should divide from value[0m
    [32m  ✓[0m[90m should multiply value[0m
    [32m  ✓[0m[90m should find minimum value[0m
    [32m  ✓[0m[90m should find maximum value[0m
    [32m  ✓[0m[90m should clear[0m
[0m  local storage[0m
[0m    all keys and type keys should exist in local storage[0m
    [32m  ✓[0m[90m boolean storage retrieval should work[0m
    [32m  ✓[0m[90m boolean storage should store the correct type ID[0m
    [32m  ✓[0m[90m object storage should work[0m
    [32m  ✓[0m[90m object storage retrieval should store the correct type ID[0m
    [32m  ✓[0m[90m number storage retrieval should work[0m
    [32m  ✓[0m[90m number storage should store the correct type ID[0m
    [32m  ✓[0m[90m string storage retrieval should work[0m
    [32m  ✓[0m[90m string storage should store the correct type ID[0m
    [32m  ✓[0m[90m p5 Color should retrieve as p5 Color[0m
    [32m  ✓[0m[90m p5 Vector should retrieve as p5 Vector[0m
[0m    should be able to remove all items[0m
    [32m  ✓[0m[90m boolean should be removable[0m
    [32m  ✓[0m[90m number should be removable[0m
    [32m  ✓[0m[90m object should be removable[0m
    [32m  ✓[0m[90m string should be removable[0m
    [32m  ✓[0m[90m color should be removable[0m
    [32m  ✓[0m[90m vector should be removable[0m
[0m  DOM[0m
[0m    p5.prototype.select[0m
    [32m  ✓[0m[90m should return only one p5.element if match is found[0m
    [32m  ✓[0m[90m should find element by class name[0m
    [32m  ✓[0m[90m should find element by class name from given container[0m
    [32m  ✓[0m[90m should return null when no matches are found by class name[0m
    [32m  ✓[0m[90m should find element by tag name[0m
    [32m  ✓[0m[90m should find element by tag name from given container[0m
    [32m  ✓[0m[90m should return null when no matches are found by tag name[0m
    [32m  ✓[0m[90m should select element in container using CSS selector with ID[0m
    [32m  ✓[0m[90m should select element in container using CSS selector with class name[0m
[0m    p5.prototype.selectAll[0m
    [32m  ✓[0m[90m should return an array[0m
    [32m  ✓[0m[90m should return empty array when no matching classes are found[0m
    [32m  ✓[0m[90m should find all elements with matching class name[0m
    [32m  ✓[0m[90m should find all elements with matching class name in given container[0m
    [32m  ✓[0m[90m should find all elements with matching tag name[0m
    [32m  ✓[0m[90m should find all elements with matching tag name in given container[0m
    [32m  ✓[0m[90m should find all elements in container using CSS selector with id[0m
[0m    p5.prototype.removeElements[0m
    [32m  ✓[0m[90m should remove all elements created by p5 except Canvas[0m
[0m    p5.Element.prototype.changed[0m
    [32m  ✓[0m[90m should trigger callback when element changes[0m
    [32m  ✓[0m[90m should not trigger callback after changed(false) is called[0m
[0m    p5.Element.prototype.input[0m
    [32m  ✓[0m[90m should trigger callback when input is provided[0m
    [32m  ✓[0m[90m should not trigger callback after input(false) is called[0m
[0m    p5.prototype.createDiv[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of div type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of div[0m
[0m    p5.prototype.createP[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of p type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of p[0m
[0m    p5.prototype.createSpan[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of span type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of span[0m
[0m    p5.prototype.createImg[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of image type[0m
    [32m  ✓[0m[90m should set src of image from params[0m
    [32m  ✓[0m[90m should set alt from params if given[0m
    [32m  ✓[0m[90m should set crossOrigin from params if given[0m
    [32m  ✓[0m[90m should trigger callback when image is loaded[0m
[0m    p5.prototype.createA[0m
    [32m  ✓[0m[90m should return a p5.Element of anchor type[0m
    [32m  ✓[0m[90m creates anchor with given link & text[0m
    [32m  ✓[0m[90m creates anchor with given target[0m
[0m    p5.prototype.createSlider[0m
    [32m  ✓[0m[90m should return a p5.Element of slider type[0m
    [32m  ✓[0m[90m should set min and max values[0m
    [32m  ✓[0m[90m should set slider position[0m
    [32m  ✓[0m[90m should set step value[0m
[0m    p5.prototype.createButton[0m
    [32m  ✓[0m[90m should return a p5.Element of button type[0m
    [32m  ✓[0m[90m should trigger callback when mouse is pressed[0m
[0m    p5.prototype.createCheckbox[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element with checkbox as descendant[0m
    [32m  ✓[0m[90m calling createCheckbox(label) should create checkbox and set its label[0m
    [32m  ✓[0m[90m calling createCheckbox(label, true) should create a checked checkbox and set its label[0m
    [32m  ✓[0m[90m calling checked() should return checked value of checkbox[0m
    [32m  ✓[0m[90m calling checked(true) should set checked value of checkbox[0m
[0m    p5.prototype.createSelect[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of select HTML Element[0m
    [32m  ✓[0m[90m should return p5.Element when select element is passed[0m
    [32m  ✓[0m[90m calling option(newName) should add a new option[0m
    [32m  ✓[0m[90m calling option(name, newValue) should update value of option[0m
    [32m  ✓[0m[90m calling value() should return current selected option[0m
    [32m  ✓[0m[90m calling selected() should return all selected options[0m
    [32m  ✓[0m[90m calling selected(value) should updated selectedIndex[0m
    [32m  ✓[0m[90m calling disable() should disable the whole dropdown[0m
    [32m  ✓[0m[90m should disable an option when disable() method invoked with option name[0m
[0m    p5.prototype.createRadio[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of radio type[0m
    [32m  ✓[0m[90m should return p5.Element from existing radio Element[0m
    [32m  ✓[0m[90m calling option(value) should return existing radio element[0m
    [32m  ✓[0m[90m calling option(newValue) should create a new radio input[0m
    [32m  ✓[0m[90m calling option(value, label) should set label of option[0m
    [32m  ✓[0m[90m should use given name for all options[0m
    [32m  ✓[0m[90m calling remove(value) should remove option[0m
    [32m  ✓[0m[90m calling value() should return selected value[0m
    [32m  ✓[0m[90m calling selected(value) should select a value and return it[0m
    [32m  ✓[0m[90m calling selected() should return the currently selected option[0m
    [32m  ✓[0m[90m calling disable() should disable all the radio inputs[0m
[0m    p5.prototype.createColorPicker[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of input[color] type[0m
    [32m  ✓[0m[90m should accept a p5.Color as param[0m
    [32m  ✓[0m[90m should accept a string as param[0m
    [32m  ✓[0m[90m calling color() should return the current color as p5.color[0m
    [32m  ✓[0m[90m calling value() should return hex string of color[0m
[0m    p5.prototype.createInput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of input type[0m
    [32m  ✓[0m[90m should set given value as input[0m
    [32m  ✓[0m[90m should create input of given type and value[0m
[0m    p5.prototype.createFileInput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return input of file input[0m
    [32m  ✓[0m[90m should trigger callback on input change event[0m
    [32m  ✓[0m[90m should accept multiple files if specified[0m
    [32m  ✓[0m[90m should trigger callback for each file if multiple files are given[0m
[0m    p5.prototype.createVideo[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of HTMLVideoElement[0m
    [32m  ✓[0m[90m should accept a singular media source[0m
    [32m  ✓[0m[90m should accept multiple media sources[0m
    [32m  ✓[0m[90m should trigger callback on canplaythrough event[0m
[0m    p5.prototype.createAudio[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of HTMLAudioElement[0m
    [32m  ✓[0m[90m should accept a singular media source[0m
    [32m  ✓[0m[90m should accept multiple media sources[0m
    [32m  ✓[0m[90m should trigger callback on canplaythrough event[0m
[0m    p5.prototype.createCapture[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of video type[0m
    [32m  ✓[0m[90m should throw error if getUserMedia is not supported[0m
    [32m  ✓[0m[90m triggers the callback after loading metadata[0m
    [32m  ✓[0m[90m should have playsinline attribute to empty string on DOM element[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of appropriate type[0m
    [32m  ✓[0m[90m should set given content as innerHTML[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should add provided string to class names[0m
    [32m  ✓[0m[90m should not add class name, if already exists[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should remove provided string from class names[0m
[0m    p5.prototype.createElement[0m
[0m    p5.Element.prototype.addClass[0m
[0m    p5.Element.prototype.removeClass[0m
    [32m  ✓[0m[90m should not throw error if class name not exists[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return true for existing class name[0m
    [32m  ✓[0m[90m should return false for non-existing class name[0m
[0m    p5.Element.prototype.hasClass[0m
[0m    p5.Element.prototype.toggleClass[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should remove an existing class name[0m
    [32m  ✓[0m[90m should add an non-existing class name[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.Element.prototype.child[0m
    [32m  ✓[0m[90m should return all child nodes by default[0m
    [32m  ✓[0m[90m should append p5 element as child[0m
    [32m  ✓[0m[90m should append dom element as child[0m
    [32m  ✓[0m[90m should append element as child from a given id[0m
    [32m  ✓[0m[90m should not throw error if mathcing element is not found from a given id[0m
[0m    p5.Element.prototype.center[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.Element.prototype.html[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the inner HTML of element if no argument is given[0m
    [32m  ✓[0m[90m should replace the inner HTML of element[0m
    [32m  ✓[0m[90m should append to the inner HTML if second param is true[0m
    [32m  ✓[0m[90m should replace the inner HTML if second param is false[0m
[0m    p5.Element.prototype.position[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return current position if no args are given[0m
    [32m  ✓[0m[90m should set default position as absolute[0m
    [32m  ✓[0m[90m should set given params as properties[0m
[0m    p5.prototype.drop[0m
{}
    [32m  ✓[0m[90m drop fires multiple events[0m
[0m  Keyboard Events[0m
[0m    p5.prototype.keyIsPressed[0m
    [32m  ✓[0m[90m keyIsPressed should be a boolean[0m
    [32m  ✓[0m[90m keyIsPressed should be true on key press[0m
    [32m  ✓[0m[90m keyIsPressed should be true on multiple key presses[0m
    [32m  ✓[0m[90m keyIsPressed should be false on key up[0m
[0m    p5.prototype.isKeyPressed[0m
    [32m  ✓[0m[90m isKeyPressed should be a boolean[0m
    [32m  ✓[0m[90m isKeyPressed should be true on key press[0m
    [32m  ✓[0m[90m isKeyPressed should be false on key up[0m
[0m    p5.prototype.key[0m
    [32m  ✓[0m[90m key should be a string[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
[0m    p5.prototype.keyCode[0m
    [32m  ✓[0m[90m keyCode should be a number[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
[0m    keyPressed[0m
    [32m  ✓[0m[90m keyPressed must run when key is pressed[0m
    [32m  ✓[0m[90m keyPressed functions on multiple instances must run once[0m
[0m    keyReleased[0m
    [32m  ✓[0m[90m keyReleased must run when key is released[0m
    [32m  ✓[0m[90m keyReleased functions on multiple instances must run once[0m
[0m    keyTyped[0m
    [32m  ✓[0m[90m keyTyped must run when key is pressed[0m
    [32m  ✓[0m[90m keyTyped functions on multiple instances must run once[0m
[0m    p5.prototype.keyIsDown[0m
    [32m  ✓[0m[90m keyIsDown should return a boolean[0m
    [32m  ✓[0m[90m keyIsDown should return true if key is down[0m
    [32m  ✓[0m[90m keyIsDown should return false if key is not down[0m
[0m  Mouse Events[0m
[0m    p5.prototype._hasMouseInteracted[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be a boolean[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be false before mouse interaction[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be true on mouse interaction[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be true on touch interaction[0m
[0m    p5.prototype.mouseX[0m
    [32m  ✓[0m[90m mouseX should be a number[0m
    [32m  ✓[0m[90m mouseX should be current horizontal position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m mouseX should be current horizontal position of touch relative to the canvas[0m
[0m    p5.prototype.mouseY[0m
    [32m  ✓[0m[90m mouseY should be a number[0m
    [32m  ✓[0m[90m mouseY should be current vertical position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m mouseY should be current vertical position of touch relative to the canvas[0m
[0m    p5.prototype.pmouseX[0m
    [32m  ✓[0m[90m pmouseX should be a number[0m
    [32m  ✓[0m[90m pmouseX should be previous horizontal position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m pmouseX should be previous horizontal position of touch relative to the canvas[0m
[0m    p5.prototype.pmouseY[0m
    [32m  ✓[0m[90m pmouseY should be a number[0m
    [32m  ✓[0m[90m pmouseY should be previous vertical position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m pmouseY should be previous vertical position of touch relative to the canvas[0m
[0m    p5.prototype.winMouseX[0m
    [32m  ✓[0m[90m winMouseX should be a number[0m
    [32m  ✓[0m[90m winMouseX should be current horizontal position of mouse relative to the window[0m
    [32m  ✓[0m[90m winMouseX should be current horizontal position of touch relative to the window[0m
[0m    p5.prototype.winMouseY[0m
    [32m  ✓[0m[90m winMouseY should be a number[0m
    [32m  ✓[0m[90m winMouseY should be current vertical position of mouse relative to the window[0m
    [32m  ✓[0m[90m winMouseY should be current vertical position of touch relative to the window[0m
[0m    p5.prototype.pwinMouseX[0m
    [32m  ✓[0m[90m pwinMouseX should be a number[0m
    [32m  ✓[0m[90m pwinMouseX should be previous horizontal position of mouse relative to the window[0m
    [32m  ✓[0m[90m pwinMouseX should be previous horizontal position of touch relative to the window[0m
[0m    p5.prototype.pwinMouseY[0m
    [32m  ✓[0m[90m pwinMouseY should be a number[0m
    [32m  ✓[0m[90m pwinMouseY should be previous vertical position of mouse relative to the window[0m
    [32m  ✓[0m[90m pwinMouseY should be previous vertical position of touch relative to the window[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be a number[0m
[0m    p5.prototype.mouseButton[0m
    [32m  ✓[0m[90m mouseButton should 0 for uninitialised[0m
    [32m  ✓[0m[90m mouseButton should be "left" on left mouse button click[0m
    [32m  ✓[0m[90m mouseButton should be "center" on auxillary mouse button click[0m
    [32m  ✓[0m[90m mouseButton should be "right" on right mouse button click[0m
[0m    p5.prototype.mouseIsPressed[0m
    [32m  ✓[0m[90m mouseIsPressed should be a boolean[0m
    [32m  ✓[0m[90m mouseIsPressed should be false if mouse is not pressed[0m
    [32m  ✓[0m[90m mouseIsPressed should be true if mouse is pressed[0m
[0m    mouseMoved[0m
    [32m  ✓[0m[90m mouseMoved function must run when mouse is moved[0m
    [32m  ✓[0m[90m mouseMoved functions on multiple instances must run once[0m
{}
{}
{}
[0m    mouseDragged[0m
    [32m  ✓[0m[90m mouseDragged function must run when mouse is dragged[0m
    [32m  ✓[0m[90m mouseDragged functions on multiple instances must run once[0m
[0m    mousePressed[0m
    [32m  ✓[0m[90m mousePressed function must run when mouse is pressed[0m
    [32m  ✓[0m[90m mousePressed functions on multiple instances must run once[0m
[0m    mouseReleased[0m
    [32m  ✓[0m[90m mouseReleased function must run when mouse is released[0m
    [32m  ✓[0m[90m mouseReleased functions on multiple instances must run once[0m
[0m    mouseClicked[0m
    [32m  ✓[0m[90m mouseClicked function must run when mouse is clicked[0m
    [32m  ✓[0m[90m mouseClicked functions on multiple instances must run once[0m
[0m    doubleClicked[0m
    [32m  ✓[0m[90m doubleClicked function must run when mouse is double clicked[0m
    [32m  ✓[0m[90m doubleClicked functions on multiple instances must run once[0m
[0m    mouseWheel[0m
    [32m  ✓[0m[90m mouseWheel function must run when mouse wheel event is detected[0m
    [32m  ✓[0m[90m mouseWheel functions on multiple instances must run once[0m
[0m  Touch Events[0m
[0m    p5.prototype.touches[0m
    [32m  ✓[0m[90m should be an empty array[0m
    [32m  ✓[0m[90m should be an array of multiple touches[0m
    [32m  ✓[0m[90m should contain the touch registered[0m
[0m    touchStarted[0m
    [32m  ✓[0m[90m touchStarted should be fired when a touch is registered[0m
    [32m  ✓[0m[90m should be fired when a touch starts over the element[0m
    [32m  ✓[0m[90m touchStarted functions on multiple instances must run once[0m
[0m    touchMoved[0m
    [32m  ✓[0m[90m touchMoved should be fired when a touchmove is registered[0m
    [32m  ✓[0m[90m should be fired when a touchmove is registered over the element[0m
    [32m  ✓[0m[90m touchMoved functions on multiple instances must run once[0m
[0m    touchEnded[0m
    [32m  ✓[0m[90m touchEnded must run when a touch is registered[0m
    [32m  ✓[0m[90m should be fired when a touch starts over the element[0m
    [32m  ✓[0m[90m touchEnded functions on multiple instances must run once[0m
[0m  Acceleration Events[0m
[0m    acceleration[0m
    [32m  ✓[0m[90m accelerationX should be 20[0m
    [32m  ✓[0m[90m accelerationY should be 40[0m
    [32m  ✓[0m[90m accelerationZ should be 60[0m
[0m    previous acceleration[0m
    [32m  ✓[0m[90m pAccelerationX should be 20[0m
    [32m  ✓[0m[90m pAccelerationY should be 40[0m
    [32m  ✓[0m[90m pAccelerationZ should be 60[0m
[0m    rotation[0m
    [32m  ✓[0m[90m rotationX should be 45[0m
    [32m  ✓[0m[90m rotationY should be 90[0m
    [32m  ✓[0m[90m rotationZ should be 10[0m
[0m    previous rotation[0m
    [32m  ✓[0m[90m pRotationX should be 45[0m
    [32m  ✓[0m[90m pRotationY should be 90[0m
    [32m  ✓[0m[90m pRotationZ should be 10[0m
[0m    deviceMoved[0m
    [32m  ✓[0m[90m deviceMoved must run when device is moved more than the threshold value[0m
    [32m  ✓[0m[90m deviceMoved should not run when device is moved less than the threshold value[0m
    [32m  ✓[0m[90m p5.prototype.setMoveThreshold[0m
[0m    deviceTurned[0m
    [32m  ✓[0m[90m deviceTurned must run when device is turned more than 90 degrees[0m
    [32m  ✓[0m[90m turnAxis should be X[0m
[0m    deviceShaken[0m
    [32m  ✓[0m[90m deviceShaken must run when device acceleration is more than the threshold value[0m
    [32m  ✓[0m[90m deviceMoved should not run when device acceleration is less than the threshold value[0m
    [32m  ✓[0m[90m p5.prototype.setShakeThreshold[0m
[0m  p5.Image[0m
[0m    p5.prototype.createImage[0m
    [32m  ✓[0m[90m it creates an image[0m
[0m    p5.Image[0m
    [32m  ✓[0m[90m it has necessary properties[0m
    [32m  ✓[0m[90m height and width are correct[0m
[0m    p5.Image.prototype.resize[0m
    [32m  ✓[0m[90m it should resize the image[0m
[0m  loading images[0m
  [32m  ✓[0m[90m should call successCallback when image loads[0m


  [32m  ✓[0m[90m should call failureCallback when unable to load image[0m
  [32m  ✓[0m[90m should draw image with defaults[0m
  [32m  ✓[0m[90m static image should not have gifProperties[0m
  [32m  ✓[0m[90m single frame GIF should not have gifProperties[0m
  [32m  ✓[0m[90m first frame of GIF should be painted after load[0m
  [32m  ✓[0m[90m animated gifs work with no disposal[0m
  [32m  ✓[0m[90m animated gifs work with background disposal[0m
  [32m  ✓[0m[90m animated gifs work with previous disposal[0m
  [36m  - Test in preload() with success callback[0m
  [36m  - Test in setup() after preload()[0m
[0m  loading animated gif images[0m
  [32m  ✓[0m[90m should call successCallback when image loads[0m


  [32m  ✓[0m[90m should call failureCallback when unable to load image[0m
  [32m  ✓[0m[90m should construct gifProperties correctly after preload[0m
[0m  displaying images[0m
  [32m  ✓[0m[90m tint() with color[0m[31m (1763ms)[0m
  [32m  ✓[0m[90m tint() with alpha[0m[31m (1417ms)[0m
  [32m  ✓[0m[90m tint() with color and alpha[0m[31m (1525ms)[0m
[0m  pixels[0m
[0m    p5.Image.get[0m
    [32m  ✓[0m[90m get(x,y) works with integers[0m
    [32m  ✓[0m[90m get(x,y) returns 0s for out of bounds arguments[0m
    [32m  ✓[0m[90m get() returns a copy when no arguments are supplied[0m
    [32m  ✓[0m[90m get(x,y,w,h) works[0m[31m (467ms)[0m
    [32m  ✓[0m[90m rounds down when given decimal numbers[0m
[0m    p5.Image.pixels[0m
    [32m  ✓[0m[90m should be an array of pixels[0m
    [32m  ✓[0m[90m should store r, g, b, a values for each pixel[0m
    [32m  ✓[0m[90m should store correct r, g, b, a values for each pixel[0m
[0m    p5.Image.set[0m
    [32m  ✓[0m[90m set(x,y) changes color of pixel (x, y)[0m
[0m    p5.Image.blend[0m
    [32m  ✓[0m[90m should copy a region of pixels using the specified blend mode[0m
    [32m  ✓[0m[90m wrong parameter at #8[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m missing parameter at #3 [0m
    [32m  ✓[0m[90m missing parameter at #8 [0m
[0m    p5.Image.copy[0m
    [32m  ✓[0m[90m should copy a region of pixels[0m[33m (43ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m missing parameter at #3 [0m
[0m  Filters[0m
  [32m  ✓[0m[90m threshold filter. less than threshold[0m
  [32m  ✓[0m[90m threshold filter. greater than threshold[0m
  [32m  ✓[0m[90m gray filter[0m
  [32m  ✓[0m[90m opaque filter[0m
  [32m  ✓[0m[90m invert filter[0m
[0m  downloading animated gifs[0m
[0m    p5.prototype.saveGif[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should not throw an error[0m
    [32m  ✓[0m[90m should download a gif[0m
[0m  p5.prototype.saveCanvas[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m
  [32m  ✓[0m[90m no friendly-err-msg III[0m
  [32m  ✓[0m[90m no friendly-err-msg IV[0m
  [32m  ✓[0m[90m no friendly-err-msg V[0m
  [32m  ✓[0m[90m no friendly-err-msg VI[0m
  [32m  ✓[0m[90m wrong param type #0[0m
  [32m  ✓[0m[90m wrong param type #1[0m
  [32m  ✓[0m[90m wrong param type #2[0m
  [32m  ✓[0m[90m should download a png file[0m
  [32m  ✓[0m[90m should download a jpg file I[0m
  [32m  ✓[0m[90m should download a jpg file II[0m
[0m  p5.prototype.saveFrames[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m[31m (101ms)[0m
  [32m  ✓[0m[90m missing param #2 #3[0m
  [32m  ✓[0m[90m wrong param type #0[0m
  [32m  ✓[0m[90m wrong param type #1[0m
  [32m  ✓[0m[90m wrong param type #2[0m
  [32m  ✓[0m[90m wrong param type #3[0m
  [32m  ✓[0m[90m wrong param type #4[0m
  [32m  ✓[0m[90m should get frames in callback (png)[0m[31m (501ms)[0m
  [32m  ✓[0m[90m should get frames in callback (jpg)[0m[31m (501ms)[0m
[0m  Files[0m
[0m    httpDo()[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should work when provided with just a path[0m
    [32m  ✓[0m[90m should accept method parameter[0m
    [32m  ✓[0m[90m should accept type parameter[0m
    [32m  ✓[0m[90m should accept method and type parameter together[0m

    [32m  ✓[0m[90m should pass error object to error callback function[0m
    [32m  ✓[0m[90m should return a promise[0m

    [32m  ✓[0m[90m should return a promise that rejects on error[0m
{ status: 404, ok: false }
[0m    p5.prototype.saveStrings[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m no friendly-err-msg III[0m
    [32m  ✓[0m[90m missing param #1[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
    [32m  ✓[0m[90m should download a file with expected contents with CRLF[0m
[0m    p5.prototype.saveJSON[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m no friendly-err-msg III[0m
    [32m  ✓[0m[90m missing param #1[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
[0m    p5.prototype.writeFile[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should download a file with expected contents (text)[0m
[0m    p5.prototype.downloadFile[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
[0m    p5.prototype.save[0m
[0m      saving images[0m
      [32m  ✓[0m[90m should be a function[0m
      [32m  ✓[0m[90m should download a png file[0m
      [32m  ✓[0m[90m should download a jpg file[0m
[0m      saving strings and json[0m
      [32m  ✓[0m[90m should download a text file[0m
      [32m  ✓[0m[90m should download a json file[0m
[0m  loadBytes[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (52ms)[0m


🌸 p5.js says: It looks like there was a problem loading your file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (58ms)[0m
  [32m  ✓[0m[90m returns the correct object[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON[0m
[0m  loadStrings[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (56ms)[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m
  [32m  ✓[0m[90m returns an array of strings[0m
  [32m  ✓[0m[90m passes an array to success callback[0m
  [32m  ✓[0m[90m should include empty strings[0m
  [32m  ✓[0m[90m can load file with many lines[0m[33m (39ms)[0m
[0m  loadXML[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your XML file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (51ms)[0m


🌸 p5.js says: It looks like there was a problem loading your XML file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (59ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (58ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data[0m
[0m  loadJSON[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your JSON file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (56ms)[0m


🌸 p5.js says: It looks like there was a problem loading your JSON file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m returns an object for object JSON.[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON.[0m
  [36m  - returns an array for array JSON.[0m
  [32m  ✓[0m[90m passes an array to success callback for array JSON.[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSONP.[0m
  [32m  ✓[0m[90m passes an array to success callback for array JSONP.[0m
[0m  loadTable[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your table file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
{ status: 404, ok: false }
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (56ms)[0m


🌸 p5.js says: It looks like there was a problem loading your table file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON[0m
  [32m  ✓[0m[90m csv option returns the correct data[0m
  [32m  ✓[0m[90m using the header option works[0m
  [32m  ✓[0m[90m allows the csv and header options together[0m
  [32m  ✓[0m[90m CSV files should handle commas within quoted fields[0m
  [32m  ✓[0m[90m CSV files should handle escaped quotes and returns within quoted fields[0m
[0m  saveTable[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m
  [32m  ✓[0m[90m missing param #1[0m
  [32m  ✓[0m[90m wrong param type #0[0m
  [32m  ✓[0m[90m wrong param type #1[0m
  [32m  ✓[0m[90m wrong param type #2[0m
  [32m  ✓[0m[90m should download a file with expected contents[0m
  [32m  ✓[0m[90m should download a file with expected contents (tsv)[0m
  [32m  ✓[0m[90m should download a file with expected contents (html)[0m
[0m  loadImage[0m


  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m
  [32m  ✓[0m[90m error prevents sketch continuing[0m




🌸 p5.js says: It looks like there was a problem loading your image. Try checking if the file path (http://localhost:9001/test/404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server

🌸 p5.js says: It looks like there was a problem loading your image. Try checking if the file path (http://localhost:9001/test/404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
{ isTrusted: true }
  [32m  ✓[0m[90m error callback is called[0m[33m (65ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (58ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m
[0m  loadModel[0m
  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
Sorry, the file type is invalid. Only OBJ and STL files are supported.
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (52ms)[0m

🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called[0m[33m (52ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m[33m (41ms)[0m
  [32m  ✓[0m[90m success callback is called[0m[31m (83ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m[31m (94ms)[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m[31m (98ms)[0m
  [32m  ✓[0m[90m resolves STL file correctly[0m
  [32m  ✓[0m[90m resolves STL file correctly with explicit extension[0m
  [32m  ✓[0m[90m resolves STL file correctly with case insensitive extension[0m
[0m  loadShader[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
{ status: 404, ok: false }
  [32m  ✓[0m[90m error with vert prevents sketch continuing[0m[33m (53ms)[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
{ status: 404, ok: false }
  [32m  ✓[0m[90m error with frag prevents sketch continuing[0m[33m (52ms)[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called for vert[0m[33m (56ms)[0m


🌸 p5.js says: It looks like there was a problem loading your text file. Try checking if the file path (Error: [object ReadableStream]) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
  [32m  ✓[0m[90m error callback is called for frag[0m[33m (58ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (59ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m
[0m  Calculation[0m
[0m    p5.prototype.abs[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return an absolute value[0m
[0m    p5.prototype.ceil[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return ceil value given negative value[0m
    [32m  ✓[0m[90m should return a ceil value given positive value[0m
    [32m  ✓[0m[90m should return same number[0m
[0m    p5.prototype.dist[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return correct distance[0m
    [32m  ✓[0m[90m should return positive  distance[0m
    [32m  ✓[0m[90m should return correct distance[0m
    [32m  ✓[0m[90m should return positive  distance[0m
    [32m  ✓[0m[90m should not underflow[0m
    [32m  ✓[0m[90m should not overflow[0m
    [32m  ✓[0m[90m should return 0 for identical 2D points[0m
    [32m  ✓[0m[90m should return 0 for identical 3D points[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at infinity (2D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at -infinity (2D)[0m
    [32m  ✓[0m[90m should handle overflow correctly (2D)[0m
    [32m  ✓[0m[90m should handle rounding correctly (2D)[0m
    [32m  ✓[0m[90m should handle string parameters correctly (2D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at infinity (3D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at -infinity (3D)[0m
    [32m  ✓[0m[90m should handle overflow correctly (3D)[0m
    [32m  ✓[0m[90m should handle rounding correctly (3D)[0m
    [32m  ✓[0m[90m should handle string parameters correctly (3D)[0m
[0m    p5.prototype.exp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return exp value given negative value[0m
    [32m  ✓[0m[90m should return exp value given positive value[0m
    [32m  ✓[0m[90m should return 1[0m
[0m    p5.prototype.floor[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return floor value given negative value[0m
    [32m  ✓[0m[90m should return a floor value given positive value[0m
    [32m  ✓[0m[90m should return same number[0m
[0m    p5.prototype.lerp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return start[0m
    [32m  ✓[0m[90m should return average[0m
    [32m  ✓[0m[90m should return stop[0m
[0m    p5.prototype.log[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return log value given negative value[0m
    [32m  ✓[0m[90m should return log value given positive value[0m
    [32m  ✓[0m[90m should return 0[0m
[0m    p5.prototype.mag[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return correct magitude[0m
    [32m  ✓[0m[90m should return positive magnitude given negative inputs[0m
[0m    p5.prototype.map[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return scaled value[0m
    [32m  ✓[0m[90m should extrapolate by default[0m
    [32m  ✓[0m[90m shaould clamp correctly[0m
[0m    p5.prototype.max[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return larger left argument[0m
    [32m  ✓[0m[90m should return larger right argument[0m
    [32m  ✓[0m[90m should return single value[0m
    [32m  ✓[0m[90m should return larger value from array[0m
    [32m  ✓[0m[90m should return larger value from array[0m
    [32m  ✓[0m[90m should return single value from array[0m
[0m    p5.prototype.min[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return smaller right  argument[0m
    [32m  ✓[0m[90m should return smaller left  argument[0m
    [32m  ✓[0m[90m should return single value[0m
    [32m  ✓[0m[90m should return smaller value from array[0m
    [32m  ✓[0m[90m should return smaller value from array[0m
    [32m  ✓[0m[90m should return single value from array[0m
[0m    p5.prototype.norm[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return scaled decimal value[0m
[0m    p5.prototype.constrain[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return same number[0m
    [32m  ✓[0m[90m should return lower bound[0m
    [32m  ✓[0m[90m should return upper bound[0m
[0m    p5.prototype.sq[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return sauare value[0m
    [32m  ✓[0m[90m should return squared value given negative number[0m
[0m    p5.prototype.pow[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return pow for negative exponential[0m
    [32m  ✓[0m[90m should return pow for positive exponential[0m
[0m    p5.prototype.round[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should round down[0m
    [32m  ✓[0m[90m should round up from midpoint[0m
    [32m  ✓[0m[90m should round up[0m
    [32m  ✓[0m[90m should round two decimal places[0m
    [32m  ✓[0m[90m should round very small numbers to zero[0m
    [32m  ✓[0m[90m should round very small numbers to zero when decimal places are specified[0m
[0m    p5.prototype.sqrt[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return square root[0m
[0m  Noise[0m
[0m    p5.prototype.noise[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return a number 0 < n < 1[0m
[0m    p5.prototype.noiseSeed[0m
    [32m  ✓[0m[90m should return a number 0 < n < 1[0m
    [32m  ✓[0m[90m should return same sequence of numbers[0m
[0m  p5.Vector[0m
[0m    p5.prototype.setHeading() RADIANS[0m
    [32m  ✓[0m[90m should have heading() value of 1 (RADIANS)[0m
[0m    p5.prototype.setHeading() DEGREES[0m
    [32m  ✓[0m[90m should have heading() value of 1 (DEGREES)[0m
[0m    p5.prototype.createVector()[0m
    [32m  ✓[0m[90m should create instance of p5.Vector[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 0[0m
[0m    p5.prototype.createVector()[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,3[0m
[0m    new p5.Vector()[0m
    [32m  ✓[0m[90m should set constant to DEGREES[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 0[0m
[0m    new p5.Vector(1, 2, 3)[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,3[0m
[0m    new p5.Vector(1,2,undefined)[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,0[0m
[0m    p5.prototype.rotate() RADIANS[0m
    [32m  ✓[0m[90m should have x, y, z rotated to 0, -1, 0 (RADIANS)[0m
[0m    p5.prototype.rotate() DEGREES[0m
    [32m  ✓[0m[90m should have x, y, z rotated to 0, -1, 0 (DEGREES)[0m
[0m    p5.prototype.angleBetween()[0m
    [32m  ✓[0m[90m should not trip on rounding issues in 2D space[0m
    [32m  ✓[0m[90m should not trip on rounding issues in 3D space[0m
    [32m  ✓[0m[90m should return NaN for zero vector[0m
[0m    set()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the vector's x, y, z[0m
[0m      with Array[0m
      [32m  ✓[0m[90m [2,4] should set x === 2, y === 4, z === 0[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the array's 0,1,2 index[0m
[0m      set(1,2,3)[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the 1, 2, 3[0m
[0m    copy()[0m
    [32m  ✓[0m[90m should not return the same instance[0m
    [32m  ✓[0m[90m should return the calling object's x, y, z[0m
[0m    add()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should add x, y, z  from the vector argument[0m
[0m      with Array[0m
      [32m  ✓[0m[90m should add the array's 0,1,2 index[0m
[0m        add([2, 4])[0m
        [32m  ✓[0m[90m should add the x and y components[0m
[0m      add(3,5)[0m
      [32m  ✓[0m[90m should add the x and y components[0m
[0m      add(2,3,4)[0m
      [32m  ✓[0m[90m should add the x, y, z components[0m
[0m      p5.Vector.add(v1, v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be sum of the two p5.Vectors[0m
[0m    rem()[0m
    [32m  ✓[0m[90m should give same vector if nothing passed as parameter[0m
    [32m  ✓[0m[90m should give correct output if passed only one numeric value[0m
    [32m  ✓[0m[90m should give correct output if passed two numeric value[0m
    [32m  ✓[0m[90m should give correct output if passed three numeric value[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should return correct output if only one component is non-zero[0m
      [32m  ✓[0m[90m should return correct output if x component is zero[0m
      [32m  ✓[0m[90m should return correct output if all components are non-zero[0m
      [32m  ✓[0m[90m should return same vector if all components are zero[0m
[0m      with negative vectors[0m
      [32m  ✓[0m[90m should return correct output[0m
[0m      with Arrays[0m
      [32m  ✓[0m[90m should return remainder of vector components for 3D vector[0m
      [32m  ✓[0m[90m should return remainder of vector components for 2D vector[0m
      [32m  ✓[0m[90m should return correct output if x,y components are zero for 2D vector[0m
      [32m  ✓[0m[90m should return same vector if any vector component is non-finite number[0m
[0m      p5.Vector.rem(v1,v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be v1 % v2[0m
[0m    sub()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should sub x, y, z  from the vector argument[0m
[0m      with Array[0m
      [32m  ✓[0m[90m should subtract from the array's 0,1,2 index[0m
[0m        sub([2, 4])[0m
        [32m  ✓[0m[90m should sub the x and y components[0m
[0m      sub(3,5)[0m
      [32m  ✓[0m[90m should subtract the x and y components[0m
[0m      sub(2,3,4)[0m
      [32m  ✓[0m[90m should subtract the x, y, z components[0m
[0m      p5.Vector.sub(v1, v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be v1 - v2[0m
[0m    mult()[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should not change x, y, z if no argument is given[0m
p5.Vector.prototype.mult: x, y, or z arguments are either undefined or not a finite number
    [32m  ✓[0m[90m should not change x, y, z if n is not a finite number[0m
[0m      with scalar[0m
      [32m  ✓[0m[90m multiply the x, y, z with the scalar[0m
[0m      v0.mult(v1)[0m
      [32m  ✓[0m[90m should do component wise multiplication[0m
[0m      v0.mult(arr)[0m
      [32m  ✓[0m[90m should do component wise multiplication from an array[0m
[0m      p5.Vector.mult(v, n)[0m
      [32m  ✓[0m[90m should return a new p5.Vector[0m
      [32m  ✓[0m[90m should multiply the scalar[0m
[0m      p5.Vector.mult(v, v[0m
      [32m  ✓[0m[90m should return new vector from component wise multiplication[0m
[0m      p5.Vector.mult(v, arr[0m
      [32m  ✓[0m[90m should return new vector from component wise multiplication with an array[0m
[0m    div()[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should not change x, y, z if no argument is given[0m
p5.Vector.prototype.div: x, y, or z arguments are either undefined or not a finite number
    [32m  ✓[0m[90m should not change x, y, z if n is not a finite number[0m
[0m      with scalar[0m
      [32m  ✓[0m[90m divide the x, y, z with the scalar[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if n is 0[0m
[0m      p5.Vector.div(v, n)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should return a new p5.Vector[0m
      [32m  ✓[0m[90m should divide the scalar[0m
[0m      v0.div(v1)[0m
      [32m  ✓[0m[90m should do component wise division[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if v3 contains 0[0m
[0m      v0.div(arr)[0m
      [32m  ✓[0m[90m should do component wise division with an array[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if array contains 0[0m
[0m      p5.Vector.div(v, v[0m
      [32m  ✓[0m[90m should return new vector from component wise division[0m
[0m      p5.Vector.div(v, arr[0m
      [32m  ✓[0m[90m should return new vector from component wise division with an array[0m
[0m    dot[0m
    [32m  ✓[0m[90m should return a number[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should be the dot product of the vector[0m
[0m      with x, y, z[0m
      [32m  ✓[0m[90m should be the dot product with x, y[0m
      [32m  ✓[0m[90m should be the dot product with x, y, z[0m
[0m      p5.Vector.dot(v, n)[0m
      [32m  ✓[0m[90m should return a number[0m
      [32m  ✓[0m[90m should be the dot product of the two vectors[0m
[0m    cross[0m
    [32m  ✓[0m[90m should return a new product[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should cross x, y, z  from the vector argument[0m
[0m      p5.Vector.cross(v1, v2)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should the cross product of v1 and v2[0m
[0m    dist[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return distance between two vectors[0m
    [32m  ✓[0m[90m should return distance between two vectors[0m
    [32m  ✓[0m[90m should be commutative[0m
[0m    p5.Vector.dist(v1, v2)[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should be commutative[0m
[0m    normalize[0m
[0m      v.normalize()[0m
      [32m  ✓[0m[90m should return the same object[0m
      [32m  ✓[0m[90m unit vector should not change values[0m
      [32m  ✓[0m[90m 2,2,1 should normalize to ~0.66,0.66,0.33[0m
[0m      p5.Vector.normalize(v)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should not return same object v[0m
      [32m  ✓[0m[90m unit vector 1,0,0 should normalize to 1,0,0[0m
      [32m  ✓[0m[90m 2,2,1 should normalize to ~0.66,0.66,0.33[0m
[0m    limit[0m
    [32m  ✓[0m[90m should return the same object[0m
[0m      with a vector larger than the limit[0m
      [32m  ✓[0m[90m should limit the vector[0m
[0m      with a vector smaller than the limit[0m
      [32m  ✓[0m[90m should not limit the vector[0m
[0m    setMag[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should set the magnitude of the vector[0m
    [32m  ✓[0m[90m should set the magnitude of the vector[0m
[0m    heading[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m heading for vector pointing right is 0[0m
    [32m  ✓[0m[90m heading for vector pointing down is PI/2[0m
    [32m  ✓[0m[90m heading for vector pointing left is PI[0m
[0m    rotate[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should rotate the vector[0m
    [32m  ✓[0m[90m should rotate the vector[0m
[0m    lerp[0m
    [32m  ✓[0m[90m should return the same object[0m
[0m      with x, y, z, amt[0m
      [32m  ✓[0m[90m should lerp x by amt[0m
      [32m  ✓[0m[90m should lerp y by amt[0m
      [32m  ✓[0m[90m should lerp z by amt[0m
[0m      with no amt[0m
      [32m  ✓[0m[90m should assume 0 amt[0m
[0m    p5.Vector.lerp(v1, v2, amt)[0m
    [32m  ✓[0m[90m should not be undefined[0m
    [32m  ✓[0m[90m should be a p5.Vector[0m
    [32m  ✓[0m[90m should return neither v1 nor v2[0m
    [32m  ✓[0m[90m should res to be [1, 1, 1][0m
[0m    p5.Vector.fromAngle(angle)[0m
    [32m  ✓[0m[90m should be a p5.Vector with values (0,1)[0m
[0m    p5.Vector.random2D()[0m
    [32m  ✓[0m[90m should be a unit p5.Vector[0m
[0m    p5.Vector.random3D()[0m
    [32m  ✓[0m[90m should be a unit p5.Vector[0m
[0m    v1.angleBetween(v2)[0m
    [32m  ✓[0m[90m should be a Number[0m
[0m      with [1,0,0] and [2,2,0][0m
      [32m  ✓[0m[90m should be 45 deg difference[0m
[0m      with [2,0,0] and [-2,0,0][0m
      [32m  ✓[0m[90m should be 180 deg difference[0m
[0m      with [2,0,0] and [-2,-2,0][0m
      [32m  ✓[0m[90m should be 135 deg difference[0m
      [32m  ✓[0m[90m should be commutative[0m
[0m    array[0m
    [32m  ✓[0m[90m should return an array[0m
    [32m  ✓[0m[90m should return an with the x y and z components[0m
[0m    reflect[0m
    [32m  ✓[0m[90m should return a p5.Vector[0m
    [32m  ✓[0m[90m should update this[0m
    [32m  ✓[0m[90m x-normal should flip incoming x component and maintain y,z components[0m
    [32m  ✓[0m[90m y-normal should flip incoming y component and maintain x,z components[0m
    [32m  ✓[0m[90m z-normal should flip incoming z component and maintain x,y components[0m
    [32m  ✓[0m[90m angle of incidence should match angle of reflection[0m
[0m  Random[0m
[0m    p5.prototype.random[0m
[0m      random()[0m
      [32m  ✓[0m[90m should return a number[0m
      [32m  ✓[0m[90m should return a number 0 <= n < 1[0m
      [32m  ✓[0m[90m should return same sequence of numbers[0m
[0m      random(5)[0m
      [32m  ✓[0m[90m should return a number 0 <= n < 5[0m
[0m      random(1, 10)[0m
      [32m  ✓[0m[90m should return a number 1 <= n < 10[0m
[0m      random(["apple", "pear", "orange", "grape"])[0m
      [32m  ✓[0m[90m should return a fruit[0m
[0m    instance mode[0m
    [32m  ✓[0m[90m should be independent[0m
[0m    p5.prototype.randomGaussian[0m
[0m      instance mode[0m
      [32m  ✓[0m[90m should be independent[0m
[0m      randomGaussian(42, 0)[0m
      [32m  ✓[0m[90m should return 42[0m
[0m  Trigonometry[0m
[0m    p5.prototype.angleMode[0m
    [32m  ✓[0m[90m should set constant to DEGREES[0m
    [32m  ✓[0m[90m should set constant to RADIANS[0m
    [32m  ✓[0m[90m wrong param type[0m
    [32m  ✓[0m[90m should return radians[0m
    [32m  ✓[0m[90m should return degrees[0m
    [32m  ✓[0m[90m should always be RADIANS or DEGREES[0m
[0m    p5.prototype.degrees[0m
    [32m  ✓[0m[90m should return the angle in radians when angleMode is DEGREES[0m
    [32m  ✓[0m[90m should return the angle in radians when angleMode is RADIANS[0m
[0m    p5.prototype.radians[0m
    [32m  ✓[0m[90m should return the angle in degrees when angleMode is RADIANS[0m
    [32m  ✓[0m[90m should return the angle in degrees when angleMode is DEGREES[0m
[0m    p5.prototype.asin[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.atan[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.acos[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.sin[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.cos[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.tan[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.atan2[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m  Typography Attributes[0m
[0m    p5.prototype.textAlign[0m
    [32m  ✓[0m[90m wrong param at #0[0m
    [32m  ✓[0m[90m wrong param at #1[0m
    [32m  ✓[0m[90m wrong param at #0. vertAlign as #0 param.[0m
    [32m  ✓[0m[90m wrong param at #1. horizAlign as #1 param.[0m
[0m    p5.prototype.textLeading[0m
    [32m  ✓[0m[90m sets and gets the spacing value[0m
    [32m  ✓[0m[90m should work for negative spacing value[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [36m  - wrong param type at #0[0m
[0m    p5.prototype.textSize[0m
    [32m  ✓[0m[90m sets and gets the font size[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [36m  - wrong param type at #0[0m
[0m    p5.prototype.textStyle[0m
    [32m  ✓[0m[90m sets and gets the font style[0m
    [32m  ✓[0m[90m wrong param at #0[0m
[0m    p5.prototype.textWidth[0m
    [32m  ✓[0m[90m should return a number for char input[0m
    [32m  ✓[0m[90m should return a number for string input.[0m
    [32m  ✓[0m[90m should return a number for number input[0m
[0m    p5.prototype.textAscent[0m
    [32m  ✓[0m[90m should return a number[0m
[0m    p5.prototype.textDescent[0m
    [32m  ✓[0m[90m should return a number[0m
[0m    p5.prototype.textWrap[0m
    [32m  ✓[0m[90m should throw error for non-constant input[0m
    [32m  ✓[0m[90m returns textWrap text attribute[0m
[0m  Loading Displaying Fonts[0m
[0m    p5.prototype.loadFont[0m

    [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


🌸 p5.js says: It looks like there was a problem loading your font. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
    [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (61ms)[0m


🌸 p5.js says: It looks like there was a problem loading your font. Try checking if the file path (404file) is correct, hosting the file online, or running a local server.

+ More info: https://github.com/processing/p5.js/wiki/Local-server
    [32m  ✓[0m[90m error callback is called[0m[33m (57ms)[0m
    [32m  ✓[0m[90m loading correctly triggers setup[0m
    [32m  ✓[0m[90m success callback is called[0m[33m (61ms)[0m
    [32m  ✓[0m[90m returns a p5.Font object[0m
    [32m  ✓[0m[90m passes a p5.Font object to success callback[0m
[0m    p5.prototype.textFont[0m
    [32m  ✓[0m[90m sets the current font as Georgia[0m
    [32m  ✓[0m[90m sets the current font as Helvetica[0m
    [32m  ✓[0m[90m sets the current font and text size[0m
[0m  p5.Font[0m
[0m    p5.Font.prototype.textBounds[0m
    [32m  ✓[0m[90m returns a tight bounding box for the given text string[0m
[0m    p5.Font.prototype.textToPoints[0m
    [32m  ✓[0m[90m returns array of points[0m[31m (190ms)[0m
[0m  Array[0m
[0m    p5.prototype.append[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return an array with appended value[0m
[0m    p5.prototype.arrayCopy[0m
    [32m  ✓[0m[90m should be a function[0m
[0m      src, dst[0m
      [32m  ✓[0m[90m should return fully copied array[0m
[0m      src, dst, len[0m
      [32m  ✓[0m[90m should return an array with first 2 elements copied over[0m
      [32m  ✓[0m[90m should return an array with first 4 elements copied over[0m
[0m      src, srcPosition, dst, dstPosition, length[0m
      [32m  ✓[0m[90m should copy src[1 - 2] to dst[0 - 1][0m
      [32m  ✓[0m[90m should copy src[1 - 2] to dst [1 - 2][0m
      [32m  ✓[0m[90m should copy src[3 - 4] to dst[0 - 1][0m
[0m    p5.prototype.concat[0m
    [32m  ✓[0m[90m should concat empty arrays[0m
    [32m  ✓[0m[90m should concat arrays[0m
[0m    p5.prototype.reverse[0m
    [32m  ✓[0m[90m should reverse empty array[0m
    [32m  ✓[0m[90m should reverse array[0m
[0m    p5.prototype.shorten[0m
    [32m  ✓[0m[90m should not have error for shortening empty array[0m
    [32m  ✓[0m[90m should shorten array[0m
[0m    p5.prototype.shuffle[0m
    [32m  ✓[0m[90m should contain all the elements of the original array[0m
[0m    p5.prototype.sort[0m
    [32m  ✓[0m[90m should not have error for sorting empty array[0m
    [32m  ✓[0m[90m should sort alphabetic array lexicographically[0m
    [32m  ✓[0m[90m should sort numerical array from smallest to largest[0m
    [32m  ✓[0m[90m should sort numerical array from smallest to largest for only first 2 elements[0m
[0m    p5.prototype.splice[0m
    [32m  ✓[0m[90m should insert 4 into position 1[0m
    [32m  ✓[0m[90m should splice in array of values[0m
[0m    p5.prototype.subset[0m
    [32m  ✓[0m[90m should get subset from index 1 to end[0m
    [32m  ✓[0m[90m should subset arr[1 - 2][0m
[0m  Conversion[0m
[0m    p5.prototype.float[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert a string to its floating point representation[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return Infinity for Infinity[0m
    [32m  ✓[0m[90m should return -Infinity for -Infinity[0m
    [32m  ✓[0m[90m should return array of floating points and Nan[0m
[0m    p5.prototype.int[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert false to its integer representation i.e. 0[0m
    [32m  ✓[0m[90m should convert true to its integer representation i.e. 1[0m
    [32m  ✓[0m[90m should convert a string to its integer representation[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return Infinity for Infinity[0m
    [32m  ✓[0m[90m should return -Infinity for -Infinity[0m
    [32m  ✓[0m[90m should convert float to its integer representation[0m
    [32m  ✓[0m[90m should return array of integers and NaN[0m
[0m    p5.prototype.str[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert false to string[0m
    [32m  ✓[0m[90m should convert true to string[0m
    [32m  ✓[0m[90m should convert a number to string[0m
    [32m  ✓[0m[90m should return array of strings[0m
[0m    p5.prototype.boolean[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert 1 to true[0m
    [32m  ✓[0m[90m should convert a number to true[0m
    [32m  ✓[0m[90m should return true for Infinity[0m
    [32m  ✓[0m[90m should convert 0 to false[0m
    [32m  ✓[0m[90m should convert a string to false[0m
    [32m  ✓[0m[90m should convert a string to false[0m
    [32m  ✓[0m[90m should convert "true" to true[0m
    [32m  ✓[0m[90m should return false for empty string[0m
    [32m  ✓[0m[90m should return array of boolean[0m
[0m    p5.prototype.byte[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return 127 for 127[0m
    [32m  ✓[0m[90m should return -128 for 128[0m
    [32m  ✓[0m[90m should return 23 for 23.4[0m
    [32m  ✓[0m[90m should return 1 for true[0m
    [32m  ✓[0m[90m should return 23 for "23.4"[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.char[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the char representation of the number[0m
    [32m  ✓[0m[90m should return the char representation of the string[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.unchar[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the integer representation of char[0m
    [32m  ✓[0m[90m should return array of numbers[0m
[0m    p5.prototype.hex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the hex representation of the number[0m
    [32m  ✓[0m[90m should return FFFFFFFF for Infinity[0m
    [32m  ✓[0m[90m should return 00000000 for -Infinity[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.unhex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the integer representation of hex[0m
    [32m  ✓[0m[90m should return the NaN for empty string[0m
    [36m  - should return the NaN for invalid hex string[0m
    [32m  ✓[0m[90m should return array of numbers[0m
[0m  String functions[0m
[0m    p5.prototype.join[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return joined string[0m
[0m    p5.prototype.match[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.matchAll[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct array of strings[0m
[0m    p5.prototype.nf[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfc[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfs[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.split[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.splitTokens[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.trim[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct strings[0m
[0m  time and date[0m
[0m    p5.prototype.year[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this year[0m
[0m    p5.prototype.day[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return todays day[0m
[0m    p5.prototype.month[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return today's month[0m
[0m    p5.prototype.hour[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this hour[0m
[0m    p5.prototype.second[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this second[0m
[0m    p5.prototype.minute[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number that is this minute[0m
[0m    p5.prototype.millis[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m result should be a number[0m
    [32m  ✓[0m[90m result should be greater than running time[0m[33m (51ms)[0m
    [32m  ✓[0m[90m result should be > newResult[0m[33m (51ms)[0m
[0m  3D Primitives[0m
[0m    p5.prototype.plane[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height param #1.[0m[31m (232ms)[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (220ms)[0m
[0m    p5.prototype.box[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0 and #2[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height, depth; param #1, #2.[0m[31m (226ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing depth param #2.[0m[31m (228ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (194ms)[0m
[0m    p5.prototype.sphere[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (266ms)[0m
[0m    p5.prototype.cylinder[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height; param #1[0m[31m (227ms)[0m
    [36m  - wrong param type at #4[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (218ms)[0m
[0m    p5.prototype.cone[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0 and #1[0m

    [32m  ✓[0m[90m no friendly-err-msg. missing height; param #1[0m[31m (210ms)[0m
    [36m  - wrong param type at #4[0m

    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (214ms)[0m
[0m    p5.prototype.ellipsoid[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0 and #1[0m

    [32m  ✓[0m[90m no friendly-err-msg. missing param #1 #2[0m[31m (222ms)[0m

    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (229ms)[0m
[0m    p5.prototype.torus[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0[0m

    [32m  ✓[0m[90m no friendly-err-msg. missing param #1[0m[31m (233ms)[0m

    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (239ms)[0m
[0m    p5.RendererGL.prototype.ellipse[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m no friendly-err-msg[0m[31m (210ms)[0m

    [32m  ✓[0m[90m missing param #2[0m

    [32m  ✓[0m[90m missing param #2[0m

    [32m  ✓[0m[90m wrong param type at #0[0m

Cannot apply a stroke to an ellipse with more than 50 detail
    [32m  ✓[0m[90m no friendly-err-msg. detail parameter > 50[0m
[0m    p5.RendererGL.prototype.arc[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m no friendly-err-msg[0m[31m (209ms)[0m

    [32m  ✓[0m[90m missing param #4, #5[0m

    [32m  ✓[0m[90m wrong param type at #0[0m

Cannot apply a stroke to an arc with more than 50 detail
    [32m  ✓[0m[90m no friendly-err-msg. detail parameter > 50[0m

    [32m  ✓[0m[90m no friendly-err-msg. default mode[0m[31m (193ms)[0m
[0m  Interaction[0m
[0m    p5.prototype.orbitControl[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m missing params. no friendly-err-msg[0m

    [32m  ✓[0m[90m wrong param type #0[0m
[0m    p5.prototype.debugMode[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m missing params. no friendly-err-msg[0m

    [32m  ✓[0m[90m wrong param type #0[0m
    [32m  ✓[0m[90m wrong param type #2[0m
    [32m  ✓[0m[90m wrong param type #2[0m
[0m    p5.prototype.noDebugMode[0m
    [32m  ✓[0m[90m should be a function[0m
[0m  p5.Matrix[0m
[0m    construction[0m
    [32m  ✓[0m[90m new p5.Matrix()[0m
    [32m  ✓[0m[90m new p5.Matrix(array)[0m
    [32m  ✓[0m[90m new p5.Matrix(mat3)[0m
    [32m  ✓[0m[90m identity()[0m
[0m    set[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    get / copy[0m
    [32m  ✓[0m[90m get[0m
    [32m  ✓[0m[90m copy[0m
[0m    mult[0m
    [32m  ✓[0m[90m self[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    apply[0m
    [32m  ✓[0m[90m self[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    scale[0m
    [32m  ✓[0m[90m p5.Vector[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    rotate[0m
    [32m  ✓[0m[90m p5.Vector[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m  p5.Camera[0m
[0m    createCamera()[0m
    [32m  ✓[0m[90m creates a p5.Camera object[0m
    [32m  ✓[0m[90m createCamera attaches p5.Camera to renderer[0m
[0m    Rotation[0m
    [32m  ✓[0m[90m Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m
    [32m  ✓[0m[90m Pan() with negative parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m
    [32m  ✓[0m[90m Pan(0) sets correct matrix w/o changing eyeXYZ or upXYZ[0m
    [32m  ✓[0m[90m Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ[0m
    [32m  ✓[0m[90m Tilt() with negative parameter sets correct matrix w/o     changing eyeXYZ[0m
    [32m  ✓[0m[90m Tilt(0) sets correct matrix w/o changing eyeXYZ[0m
    [32m  ✓[0m[90m LookAt() should set centerXYZ without changing eyeXYZ or     upXYZ[0m
[0m    Rotation with angleMode(DEGREES)[0m

    [32m  ✓[0m[90m Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m

    [32m  ✓[0m[90m Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ[0m
[0m    Position / Orientation[0m

    [32m  ✓[0m[90m Move() with positive parameters sets correct matrix[0m

    [32m  ✓[0m[90m Move() with negative parameters sets correct matrix[0m

    [32m  ✓[0m[90m Move(0,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition() with positive parameters sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition() with negative parameters sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition(0,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(1,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,1,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,0,1) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(-1,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,-1,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,0,-1) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit() ensures altitude phi <= PI[0m

    [32m  ✓[0m[90m _orbit() ensures altitude phi > 0[0m

    [32m  ✓[0m[90m _orbit() ensures radius > 0[0m
[0m      Camera()[0m

      [32m  ✓[0m[90m Camera() with positive parameters sets eye, center, and       up XYZ properties[0m

      [32m  ✓[0m[90m Camera() with negative parameters sets eye, center, and       up XYZ properties[0m
[0m    Projection[0m
[0m      ortho()[0m

      [32m  ✓[0m[90m ortho() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m ortho() sets projection matrix correctly[0m

      [32m  ✓[0m[90m ortho() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m ortho() with sets cameraType to custom[0m
[0m      perspective()[0m

      [32m  ✓[0m[90m perspective() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m perspective() sets projection matrix correctly[0m

      [32m  ✓[0m[90m perspective() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m perspective() with no parameters sets cameraType to default[0m
[0m      frustum()[0m

      [32m  ✓[0m[90m frustum() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m frustum() sets projection matrix correctly[0m

      [32m  ✓[0m[90m frustum() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m frustum() sets cameraType to custom[0m
[0m    Helper Functions[0m

    [32m  ✓[0m[90m copy() returns a new p5.Camera object[0m

    [32m  ✓[0m[90m _getLocalAxes() returns three normalized, orthogonal vectors[0m
[0m    RendererGL Current Camera[0m

    [32m  ✓[0m[90m _isActive() returns true for a camera created with createCamera(),     and false for another p5.Camera[0m

    [32m  ✓[0m[90m setCamera() correctly sets RendererGL current camera[0m

    [32m  ✓[0m[90m Camera's Renderer is correctly set after setAttributes[0m
[0m  p5.RendererGL[0m
[0m    createCanvas(w, h, WEBGL)[0m

    [32m  ✓[0m[90m creates a p5.RendererGL renderer[0m
[0m    default stroke shader[0m
    [32m  ✓[0m[90m check activate and deactivating fill and stroke[0m
[0m    push() and pop() work in WEBGL Mode[0m

    [32m  ✓[0m[90m push/pop and translation works as expected in WEBGL Mode[0m

    [32m  ✓[0m[90m push/pop and directionalLight() works[0m

    [32m  ✓[0m[90m push/pop and ambientLight() works[0m

    [32m  ✓[0m[90m push/pop and pointLight() works[0m

    [32m  ✓[0m[90m push/pop and specularColor() works[0m

    [32m  ✓[0m[90m push/pop and spotLight() works[0m

    [32m  ✓[0m[90m push/pop and noLights() works[0m

    [32m  ✓[0m[90m push/pop and texture() works[0m

    [32m  ✓[0m[90m push/pop and shader() works with fill[0m[33m (47ms)[0m

    [32m  ✓[0m[90m push/pop builds/unbuilds stack properly[0m
[0m    loadpixels()[0m

    [32m  ✓[0m[90m loadPixels color check[0m

    [32m  ✓[0m[90m get() singlePixel color and size, with loadPixels[0m
[0m    get()[0m

    [32m  ✓[0m[90m get() size check[0m

    [32m  ✓[0m[90m get() can create p5.Image[0m

    [32m  ✓[0m[90m get() singlePixel color and size[0m
[0m    GL Renderer clear()[0m


    [32m  ✓[0m[90m webgl graphics background draws into webgl canvas[0m[31m (470ms)[0m


    [32m  ✓[0m[90m transparent GL graphics with GL canvas[0m[31m (468ms)[0m


    [32m  ✓[0m[90m clear color with rgba arguments[0m[33m (70ms)[0m


    [32m  ✓[0m[90m semi-transparent GL graphics with GL canvas[0m[31m (456ms)[0m

    [32m  ✓[0m[90m webgl graphics background draws into 2D canvas[0m

    [32m  ✓[0m[90m transparent GL graphics with 2D canvas[0m

    [32m  ✓[0m[90m semi-transparent GL graphics with 2D canvas[0m
[0m    blendMode()[0m

    [32m  ✓[0m[90m blendMode sets _curBlendMode correctly[0m

BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
    [32m  ✓[0m[90m blendMode doesnt change when mode unavailable in 3D[0m

    [32m  ✓[0m[90m blendModes change pixel colors as expected[0m[31m (558ms)[0m
[0m    BufferDef[0m

    [32m  ✓[0m[90m render buffer properties are correctly set[0m[31m (210ms)[0m
[0m    tint() in WEBGL mode[0m

    [32m  ✓[0m[90m default tint value is set and not null[0m

    [32m  ✓[0m[90m tint value is modified correctly when tint() is called[0m

    [32m  ✓[0m[90m tint should be reset after draw loop[0m[33m (68ms)[0m
[0m    beginShape() in WEBGL mode[0m

    [32m  ✓[0m[90m QUADS mode converts into triangles[0m[31m (215ms)[0m

    [32m  ✓[0m[90m QUADS mode makes edges for quad outlines[0m[31m (204ms)[0m

    [32m  ✓[0m[90m QUAD_STRIP mode makes edges for strip outlines[0m[31m (215ms)[0m
[0m  p5.Shader[0m
[0m    Shader[0m

    [32m  ✓[0m[90m Light Shader[0m

    [32m  ✓[0m[90m Color Shader definition[0m

    [32m  ✓[0m[90m Immediate Mode Shader definition[0m

    [32m  ✓[0m[90m Normal Shader definition[0m

    [32m  ✓[0m[90m Color Shader is set after fill()[0m

    [32m  ✓[0m[90m Normal Shader is set after normalMaterial()[0m

    [32m  ✓[0m[90m Light shader set after ambientMaterial()[0m

    [32m  ✓[0m[90m Light shader set after specularMaterial()[0m

    [32m  ✓[0m[90m Light shader set after emissiveMaterial()[0m

    [32m  ✓[0m[90m Able to setUniform empty arrays[0m

    [32m  ✓[0m[90m Able to set shininess[0m

    [32m  ✓[0m[90m Shader is reset after resetShader is called[0m

    [32m  ✓[0m[90m isTextureShader returns true if there is a sampler[0m

    [32m  ✓[0m[90m isTextureShader returns false if there is no sampler[0m

    [32m  ✓[0m[90m isLightShader returns true if there are lighting uniforms[0m

    [32m  ✓[0m[90m isLightShader returns false if there are no lighting uniforms[0m

    [32m  ✓[0m[90m isNormalShader returns true if there is a normal attribute[0m
    [32m  ✓[0m[90m isNormalShader returns false if there is no normal attribute[0m
    [32m  ✓[0m[90m isStrokeShader returns true if there is a stroke weight uniform[0m
    [32m  ✓[0m[90m isStrokeShader returns false if there is no stroke weight uniform[0m
[0m  p5.Texture[0m
[0m    p5.Texture[0m
    [32m  ✓[0m[90m Create and cache a single texture with p5.Image[0m
    [32m  ✓[0m[90m Create and cache multiple p5.Image textures[0m
    [32m  ✓[0m[90m Set filter mode to linear[0m
    [32m  ✓[0m[90m Set filter mode to nearest[0m
    [32m  ✓[0m[90m Set wrap mode to clamp[0m


    [32m  ✓[0m[90m Set wrap mode to repeat[0m


    [32m  ✓[0m[90m Set wrap mode to mirror[0m


    [32m  ✓[0m[90m Set textureMode to NORMAL[0m


    [32m  ✓[0m[90m Set textureMode to IMAGE[0m


    [32m  ✓[0m[90m Set global wrap mode to clamp[0m


    [32m  ✓[0m[90m Set global wrap mode to repeat[0m


    [32m  ✓[0m[90m Set global wrap mode to mirror[0m
[0m  light[0m
[0m    Light[0m

    [32m  ✓[0m[90m lightFalloff is initialised and set properly[0m

    [32m  ✓[0m[90m specularColor is initialised and set properly[0m

    [32m  ✓[0m[90m noLights works[0m
[0m    spotlight inputs[0m

    [32m  ✓[0m[90m default[0m

    [32m  ✓[0m[90m color,positions,directions[0m

    [32m  ✓[0m[90m color,positions,directions,angle[0m

    [32m  ✓[0m[90m color,positions,directions,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions,angle[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions,angle[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions,angle,conc[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions,angle,conc[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3,angle,conc[0m
[0m  Test in preload() with success callback[0m
  [32m  ✓[0m[90m Load asynchronously and use success callback[0m
[0m  setup() after preload() with success callback[0m
  [32m  ✓[0m[90m should be loaded if preload() finished[0m
[0m  setup() after preload() without success callback[0m
  [32m  ✓[0m[90m should be loaded now preload() finished[0m
[0m  Test in preload() with success callback[0m
  [32m  ✓[0m[90m Load asynchronously and use success callback[0m
[0m  setup() after preload() with success callback[0m
  [32m  ✓[0m[90m should be loaded if preload() finished[0m
  [32m  ✓[0m[90m gifProperties should be correct after preload[0m
  [32m  ✓[0m[90m should be able to modify gifProperties state[0m
[36m [0m[36m 10 pending[0m
[92m [0m[32m 1655 passing[0m[90m (38s)[0m
[0m[0m
[0m  describe[0m
[0m    p5.prototype.describe[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no params[0m
    [32m  ✓[0m[90m err when LABEL at param #0[0m
    [32m  ✓[0m[90m should create description as fallback[0m
    [32m  ✓[0m[90m should not add extra period if string ends in "."[0m
    [32m  ✓[0m[90m should not add period if string ends in "!" or "?[0m
    [32m  ✓[0m[90m should create description when called after describeElement()[0m
    [32m  ✓[0m[90m should create Label adjacent to canvas[0m
    [32m  ✓[0m[90m should create Label adjacent to canvas when label of element already exists[0m
[0m    p5.prototype.describeElement[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0 and #1[0m
    [32m  ✓[0m[90m no params[0m
    [32m  ✓[0m[90m err when LABEL at param #0[0m
    [32m  ✓[0m[90m err when LABEL at param #1[0m
    [32m  ✓[0m[90m should create element description as fallback[0m
    [32m  ✓[0m[90m should not add extra ":" if element name ends in colon[0m
    [32m  ✓[0m[90m should replace ";", ",", "." for ":" in element name[0m
    [32m  ✓[0m[90m should create element description when called after describe()[0m
    [32m  ✓[0m[90m should create element label adjacent to canvas[0m
    [32m  ✓[0m[90m should create element label adjacent to canvas when called after describe()[0m
[0m  outputs[0m
[0m    p5.prototype.textOutput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should create output as fallback[0m
    [32m  ✓[0m[90m should create output as label[0m
    [32m  ✓[0m[90m should create text output for arc()[0m[33m (56ms)[0m
    [32m  ✓[0m[90m should create text output for ellipse()[0m
    [32m  ✓[0m[90m should create text output for triangle()[0m
[0m    p5.prototype.gridOutput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m should create output as fallback[0m
    [32m  ✓[0m[90m should create output as label[0m
    [32m  ✓[0m[90m should create text output for quad()[0m[33m (45ms)[0m
    [32m  ✓[0m[90m should create text output for point()[0m
    [32m  ✓[0m[90m should create text output for triangle()[0m
[0m  color/p5.ColorConversion[0m
[0m    rgbaToHSBA[0m
    [32m  ✓[0m[90m rgba converts to hsba[0m
[0m    hsbaToRGBA[0m
    [32m  ✓[0m[90m hsba converts to rgba[0m
    [32m  ✓[0m[90m handles maximum hue value[0m
[0m    hslaToRGBA[0m
    [32m  ✓[0m[90m hsla converts to rgba[0m
    [32m  ✓[0m[90m handles maximum hue value[0m
[0m    rgbaToHSLA[0m
    [32m  ✓[0m[90m rgba converts to hsla (low lightness)[0m
    [32m  ✓[0m[90m rgba converts to hsla (high lightness)[0m
[0m    hslaToHSBA[0m
    [32m  ✓[0m[90m hsla converts to hsba[0m
[0m    hsbaToHSLA[0m
    [32m  ✓[0m[90m hsba converts to hsla[0m
[0m  color/CreatingReading[0m
[0m    p5.prototype.alpha[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.red, green, blue[0m
    [32m  ✓[0m[90m red(): no friendly-err-msg[0m
    [32m  ✓[0m[90m green(): no friendly-err-msg[0m
    [32m  ✓[0m[90m blue(): no friendly-err-msg[0m
[0m    p5.prototype.hue, brightness, lightness, saturation[0m
    [32m  ✓[0m[90m hue(): no friendly-err-msg[0m
    [32m  ✓[0m[90m brightness(): no friendly-err-msg[0m
    [32m  ✓[0m[90m lightness(): no friendly-err-msg[0m
    [32m  ✓[0m[90m saturation(): no friendly-err-msg[0m
[0m    p5.prototype.lerpColor[0m
    [32m  ✓[0m[90m should correctly get lerp colors in RGB[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSL[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSB[0m
    [32m  ✓[0m[90m should not extrapolate[0m
    [32m  ✓[0m[90m missing param #2[0m
[0m    p5.prototype.lerpColor with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in RGB with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSL with alpha[0m
    [32m  ✓[0m[90m should correctly get lerp colors in HSB with alpha[0m
    [32m  ✓[0m[90m should not extrapolate[0m
[0m  p5.Color[0m
[0m    p5.prototype.color(r,g,b)[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m shouldn't set HSBA property before hsb access func is called[0m
    [32m  ✓[0m[90m shouldn't set HSLA property before hsb access func is called[0m
    [32m  ✓[0m[90m color(): missing param #0 + throws error[0m
[0m    p5.prototype.color("#rgb")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
    [32m  ✓[0m[90m should not be able to pass css & alpha[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rgba")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rrggbb")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("#rrggbbaa")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m invalid hex values resolve to white[0m
[0m      spot check[0m
      [32m  ✓[0m[90m numeric hex values[0m
      [32m  ✓[0m[90m alphabetic hex values[0m
      [32m  ✓[0m[90m alphanumeric hex values[0m
[0m    p5.prototype.color("rgb(r,g,b)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m invalid RGB values resolve to white[0m
[0m    p5.prototype.color("rgb(r%,g%,b%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m spot check decimal percentage values[0m
    [32m  ✓[0m[90m invalid percentage values default to white[0m
[0m    p5.prototype.color("rgba(r,g,b,a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m invalid RGBA values resolve to white[0m
[0m    p5.prototype.color("rgba(r%,g%,b%,a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check variant spacing[0m
    [32m  ✓[0m[90m spot check decimal percentage values[0m
    [32m  ✓[0m[90m invalid RGBA percentage values resolve to white[0m
[0m    p5.prototype.color("hsl(h, s%, l%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsla(h, s%, l%, a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsb(h, s%, b%)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("hsba(h, s%, b%, a)")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color("svgnamedcolor")[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m spot check color keywords[0m
[0m    p5.prototype.color([])[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
[0m    p5.prototype.color(r,g,b,a)[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/brightness/lightness[0m
    [32m  ✓[0m[90m should correctly get RGBA values[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    in default mode[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in RGB mode with custom range[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly get RGBA property[0m
    [32m  ✓[0m[90m should correctly render color string[0m
    [32m  ✓[0m[90m should correctly get RGBA property after overwrite[0m
[0m    p5.Color in HSL mode[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSL mode with Alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/lightness/alpha[0m
[0m    p5.Color in HSL mode with custom range[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSL mode with RGB string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSL mode with HSL string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSL mode with HSB string[0m
    [32m  ✓[0m[90m should correctly get HSLA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m can be modified with alpha setter[0m
    [32m  ✓[0m[90m can be modified with rgb setters[0m
[0m    p5.Color in HSB mode with Alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGBA property[0m
    [32m  ✓[0m[90m should correctly get hue/saturation/brightness/alpha[0m
[0m    p5.Color in HSB mode with custom range[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with RGB string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with HSB string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in HSB mode with HSL string[0m
    [32m  ✓[0m[90m should correctly get HSBA property[0m
    [32m  ✓[0m[90m should correctly convert to RGBA[0m
    [32m  ✓[0m[90m should correctly render color string[0m
[0m    p5.Color in RGB mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in RGB mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSB mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSB mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSL mode with grayscale value[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color in HSL mode with grayscale value and alpha[0m
    [32m  ✓[0m[90m should create instance of p5.Color[0m
    [32m  ✓[0m[90m should correctly set RGB levels[0m
[0m    p5.Color.prototype.toString[0m
    [32m  ✓[0m[90m should generate (r,g,b,a) color string with 0-1 normalized alpha[0m
    [32m  ✓[0m[90m should consistently generate the same output[0m
    [32m  ✓[0m[90m should not mutate color levels[0m
[0m  color/Setting[0m
[0m    p5.prototype.erase[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should set renderer to erasing state[0m
    [32m  ✓[0m[90m should cache renderer fill[0m
    [32m  ✓[0m[90m should cache renderer stroke[0m
    [32m  ✓[0m[90m should cache renderer blend[0m
    [32m  ✓[0m[90m should set fill strength[0m
    [32m  ✓[0m[90m should set stroke strength[0m
[0m    p5.RendererGL.prototype.erase[0m
    [32m  ✓[0m[90m should set renderer to erasing state[0m
    [32m  ✓[0m[90m should cache renderer fill[0m
    [32m  ✓[0m[90m should cache renderer stroke[0m
    [32m  ✓[0m[90m should cache renderer blend[0m
    [32m  ✓[0m[90m should set fill strength[0m
    [32m  ✓[0m[90m should set stroke strength[0m
    [32m  ✓[0m[90m should set default values when no arguments[0m
[0m    p5.prototype.noErase[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should turn off renderer erasing state[0m

    [32m  ✓[0m[90m should restore cached renderer fill[0m

    [32m  ✓[0m[90m should restore cached renderer stroke[0m
[0m    p5.RendererGL.prototype.noErase[0m

    [32m  ✓[0m[90m should turn off renderer erasing state[0m

    [32m  ✓[0m[90m should restore cached renderer fill[0m

    [32m  ✓[0m[90m should restore cached renderer stroke[0m
[0m    p5.prototype.colorMode[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m should set mode to RGB[0m

    [32m  ✓[0m[90m should correctly set color RGB maxes[0m

    [32m  ✓[0m[90m should set mode to HSL[0m

    [32m  ✓[0m[90m should correctly set color HSL maxes[0m

    [32m  ✓[0m[90m should set mode to HSB[0m

    [32m  ✓[0m[90m should correctly set color HSB maxes[0m
[0m    p5.Color components[0m

    [32m  ✓[0m[90m setRed() correctly sets red component[0m

    [32m  ✓[0m[90m setGreen() correctly sets green component[0m

    [32m  ✓[0m[90m setBlue() correctly sets blue component[0m

    [32m  ✓[0m[90m setAlpha correctly sets alpha component[0m

    [32m  ✓[0m[90m changing the red/green/blue/alpha components should clear the cached HSL/HSB values[0m
[0m  2D Primitives[0m
[0m    p5.prototype.arc[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #4, #5[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.ellipse[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.line[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m no friendly-err-msg, 3D[0m
    [32m  ✓[0m[90m missing param #3[0m
    [32m  ✓[0m[90m missing param #4 [0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.point[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m no friendly-err-msg, 3D[0m
    [32m  ✓[0m[90m missing param #1[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.quad[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, 2D[0m
    [32m  ✓[0m[90m missing param #7[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.rect[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, format I[0m
    [32m  ✓[0m[90m no friendly-err-msg, format II[0m
    [32m  ✓[0m[90m missing param #4[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.triangle[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m missing param #5[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.square[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg, format I[0m
    [32m  ✓[0m[90m no friendly-err-msg, format II[0m
    [32m  ✓[0m[90m missing param #2[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype._normalizeArcAngles[0m
    [32m  ✓[0m[90m start/stop both at zero[0m
    [32m  ✓[0m[90m start/stop same but non-zero[0m
    [32m  ✓[0m[90m start/stop both close to zero, start < stop[0m
    [32m  ✓[0m[90m start/stop both close to zero, start > stop[0m
    [32m  ✓[0m[90m start/stop both close to same non-zero, start < stop[0m
    [32m  ✓[0m[90m start/stop both close to same non-zero, start > stop[0m
    [32m  ✓[0m[90m start/stop around zero but not close, start < stop[0m
    [32m  ✓[0m[90m start/stop around zero but not close, start > stop[0m
    [32m  ✓[0m[90m start/stop away from zero and not close, start < stop[0m[33m (63ms)[0m
    [32m  ✓[0m[90m start/stop away from zero and not close, start > stop[0m
    [32m  ✓[0m[90m scaling correction, quadrants 1 and 3[0m
    [32m  ✓[0m[90m scaling correction, quadrants 2 and 4[0m
[0m  Attributes[0m
[0m    p5.prototype.ellipseMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rectMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.noSmooth[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.prototype.smooth[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.prototype.strokeCap[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.strokeJoin[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.strokeWeight[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m  Curves[0m
[0m    p5.prototype.bezier[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #6, #7[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.bezierPoint[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Bezier Curve[0m
[0m    p5.prototype.bezierTangent[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Bezier Curve[0m
[0m    p5.prototype.curve[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #6, #7[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.curvePoint[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Catmull-Rom Curve[0m
[0m    p5.prototype.curveTangent[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number: missing param #0~4[0m
    [32m  ✓[0m[90m should return the correct point on a Catmull-Rom Curve[0m
[0m  Environment[0m
[0m    p5.frameCount[0m
    [32m  ✓[0m[90m starts at zero[0m[33m (64ms)[0m
    [32m  ✓[0m[90m matches draw calls[0m[31m (223ms)[0m
[0m    p5.prototype.focused[0m
    [32m  ✓[0m[90m it should return true on focus[0m
    [32m  ✓[0m[90m it should return true on blur[0m
[0m    p5.prototype.cursor[0m
    [32m  ✓[0m[90m should change cursor to cross[0m
[0m    p5.prototype.noCursor[0m
    [32m  ✓[0m[90m should change cursor to none[0m
[0m    p5.prototype.frameRate[0m
    [32m  ✓[0m[90m returns 0 on first draw call[0m
    [32m  ✓[0m[90m returns current frame rate after first draw call[0m[33m (45ms)[0m
    [32m  ✓[0m[90m wrong param type. throws error.[0m
    [32m  ✓[0m[90m p5.prototype.getFrameRate[0m
[0m    Canvas dimensions[0m
    [32m  ✓[0m[90m p5.prototype.width[0m
    [32m  ✓[0m[90m p5.prototype.height[0m
[0m    p5.prototype.pixelDensity[0m
    [32m  ✓[0m[90m returns the pixel density[0m
    [32m  ✓[0m[90m sets the pixel density[0m
    [32m  ✓[0m[90m wrong param type. throws validationError.[0m
[0m    p5.prototype.displayDensity[0m
    [32m  ✓[0m[90m returns the pixel density of the display[0m
    [32m  ✓[0m[90m pixelDensity does not change display density[0m
[0m  Error Helpers[0m
[0m    friendly error logger[0m
    [32m  ✓[0m[90m basic[0m
[0m    validateParameters: Numbers + optional Constant[0m
    [32m  ✓[0m[90m arc(): no friendly-err-msg[0m
    [32m  ✓[0m[90m arc(): missing param #4, #5[0m
    [32m  ✓[0m[90m arc(): missing param #0[0m
    [32m  ✓[0m[90m arc(): missing param #4[0m
    [32m  ✓[0m[90m arc(): missing param #5[0m
    [32m  ✓[0m[90m arc(): missing param #6, no friendly-err-msg[0m
    [32m  ✓[0m[90m arc(): wrong param type at #0[0m
[0m    validateParameters: Numbers + optional Constant[0m
    [32m  ✓[0m[90m rect(): no friendly-err-msg[0m
    [32m  ✓[0m[90m rect(): wrong param type at #0[0m
[0m    validateParameters: class, multi-types + optional Numbers[0m
    [32m  ✓[0m[90m ambientLight(): no friendly-err-msg[0m
[0m    validateParameters: trailing undefined arguments[0m
    [32m  ✓[0m[90m color: missing params #1 #2[0m
    [32m  ✓[0m[90m random: missing params #0 #1 (both optional)[0m
[0m    validateParameters: multi-format[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): no friendly-err-msg[0m
    [32m  ✓[0m[90m color(): optional parameter, incorrect type[0m
    [32m  ✓[0m[90m color(): extra parameter[0m
    [32m  ✓[0m[90m color(): incorrect element type[0m
    [32m  ✓[0m[90m color(): incorrect parameter count[0m
[0m    helpForMisusedAtTopLevelCode[0m
    [32m  ✓[0m[90m help for constants is shown[0m
    [32m  ✓[0m[90m help for functions is shown[0m[33m (49ms)[0m
    [32m  ✓[0m[90m help for variables is shown[0m
[0m  p5.Element[0m
[0m    p5.Element.prototype.parent[0m
    [32m  ✓[0m[90m attaches child to parent[0m
    [32m  ✓[0m[90m attaches child to parent using classname[0m
    [32m  ✓[0m[90m attaches child to parent using classname[0m
    [32m  ✓[0m[90m returns the parent[0m
[0m    p5.Element.prototype.id[0m
    [32m  ✓[0m[90m attaches child to parent[0m
    [32m  ✓[0m[90m returns the id[0m
[0m    p5.Element.prototype.mousePressed[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
[0m    p5.Element.prototype.mouseClicked[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.doubleClicked[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseWheel[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
[0m    p5.Element.prototype.touchStarted[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.touchMoved[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.touchEnded[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseReleased[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseMoved[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseOver[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.mouseOut[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.dragOver[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    p5.Element.prototype.dragLeave[0m
    [32m  ✓[0m[90m attaches and gets events[0m
    [32m  ✓[0m[90m attaches multiple handlers and only latest gets events[0m
    [32m  ✓[0m[90m detaches and does not get events[0m
[0m    operating with element classes[0m
    [32m  ✓[0m[90m should add class to element[0m
    [32m  ✓[0m[90m should remove class from element with only one class[0m
    [32m  ✓[0m[90m should remove class from element with several classes[0m
    [32m  ✓[0m[90m should return true if element has specified class[0m
    [32m  ✓[0m[90m should return false if element has not specified class[0m
    [32m  ✓[0m[90m should return false if element has class that is partially similar as specified class[0m
    [32m  ✓[0m[90m should toggle specified class on element[0m
[0m  Graphics[0m
[0m    p5.prototype.createGraphics[0m
    [32m  ✓[0m[90m it creates a graphics[0m
[0m    p5.Graphics[0m
    [32m  ✓[0m[90m it has necessary properties[0m
    [32m  ✓[0m[90m it has consistent sizes[0m
    [32m  ✓[0m[90m its canvas has consistent sizes[0m
    [32m  ✓[0m[90m it has a valid pixels array[0m
[0m    p5.Graphics.pixelDensity[0m
    [32m  ✓[0m[90m it can change density[0m
    [32m  ✓[0m[90m it keeps valid sizes after change[0m
    [32m  ✓[0m[90m its canvas keeps valid sizes after change[0m
    [32m  ✓[0m[90m it keeps a valid pixel array after change[0m
[0m    p5.Graphics.resizeCanvas[0m
    [32m  ✓[0m[90m it can call resizeCanvas[0m
    [32m  ✓[0m[90m it resizes properly with pixelDensity 1[0m
    [32m  ✓[0m[90m its canvas resizes properly with pixelDensity 1[0m
    [32m  ✓[0m[90m it resizes properly the pixels array with density 1[0m
    [32m  ✓[0m[90m it resizes properly with pixelDensity 2[0m
    [32m  ✓[0m[90m its canvas resizes properly with pixelDensity 2[0m
    [32m  ✓[0m[90m it resizes properly the pixels array with density 2[0m
[0m  preloads[0m
[0m    From external sources[0m
    [32m  ✓[0m[90m Extension preload causes setup to wait[0m
    [32m  ✓[0m[90m Extension preload error causes setup to not execute[0m
[0m      addCallbacks[0m
      [32m  ✓[0m[90m Extension is passed all arguments when not using addCallbacks[0m
      [32m  ✓[0m[90m Extension gets stripped arguments when using addCallbacks[0m
      [32m  ✓[0m[90m Extension with addCallbacks supports success callback[0m
[0m      legacyPreload[0m
      [32m  ✓[0m[90m Extension legacy preload causes setup to wait[0m
      [32m  ✓[0m[90m Extension legacy preload error causes setup to not execute[0m
      [32m  ✓[0m[90m Extension legacy preload returns objects correctly[0m
      [32m  ✓[0m[90m Extension legacy preload returns arrays correctly[0m
[0m  Rendering[0m
[0m    p5.prototype.createCanvas[0m
    [32m  ✓[0m[90m should have correct initial colors[0m
[0m    p5.prototype.resizeCanvas[0m
    [32m  ✓[0m[90m should resize canvas[0m
    [32m  ✓[0m[90m should restore fill color[0m
    [32m  ✓[0m[90m should restore stroke color[0m
    [32m  ✓[0m[90m should restore stroke weight[0m
    [32m  ✓[0m[90m should restore stroke cap[0m
[0m    p5.prototype.blendMode[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should be able to ADD[0m
    [32m  ✓[0m[90m should be able to MULTIPLY[0m
[0m    p5.prototype.setAttributes[0m
    [32m  ✓[0m[90m _glAttributes should be null at start[0m
    [32m  ✓[0m[90m _glAttributes should modify with setAttributes[0m
    [32m  ✓[0m[90m _glAttributes.antialias modify with smooth()[0m
[0m    webgl assertions[0m
    [32m  ✓[0m[90m rotateX() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m rotateY() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m rotateZ() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m camera() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m perspective() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ortho() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m frustum() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m orbitControl() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ambientLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m directionalLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m pointLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m lights() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m specularColor() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m spotLight() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m model() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m createShader() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m shader() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m normalMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m texture() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ambientMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m emissiveMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m specularMaterial() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m shininess() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m lightFalloff() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m plane() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m box() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m sphere() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m cylinder() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m cone() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m ellipsoid() should throw a WEBGL assertion Error[0m
    [32m  ✓[0m[90m torus() should throw a WEBGL assertion Error[0m
[0m  Structure[0m
[0m    p5.prototype.loop and p5.prototype.noLoop[0m
    [32m  ✓[0m[90m noLoop should stop[0m[31m (101ms)[0m
    [32m  ✓[0m[90m loop should restart[0m[31m (101ms)[0m
[0m    p5.prototype.push and p5.prototype.pop[0m
    [32m  ✓[0m[90m leak no state after fill()[0m
    [32m  ✓[0m[90m leak no state after noFill()[0m
    [32m  ✓[0m[90m leak no state after stroke()[0m
    [32m  ✓[0m[90m leak no state after noStroke()[0m
    [32m  ✓[0m[90m leak no state after tint()[0m
    [32m  ✓[0m[90m leak no state after noTint()[0m
    [32m  ✓[0m[90m leak no state after strokeWeight()[0m
    [32m  ✓[0m[90m leak no state after strokeCap()[0m
    [32m  ✓[0m[90m leak no state after strokeJoin()[0m
    [32m  ✓[0m[90m leak no state after imageMode()[0m
    [32m  ✓[0m[90m leak no state after rectMode()[0m
    [32m  ✓[0m[90m leak no state after ellipseMode()[0m
    [32m  ✓[0m[90m leak no state after colorMode()[0m
    [32m  ✓[0m[90m leak no state after textAlign()[0m
    [32m  ✓[0m[90m leak no state after textFont()[0m
    [32m  ✓[0m[90m leak no state after textStyle()[0m
    [32m  ✓[0m[90m leak no state after textSize()[0m
    [32m  ✓[0m[90m leak no state after textLeading()[0m
[0m    p5.prototype.redraw[0m
    [32m  ✓[0m[90m resets the rendering matrix between frames[0m
    [32m  ✓[0m[90m instance redraw is independent of window[0m[31m (1272ms)[0m
[0m    loop[0m
    [32m  ✓[0m[90m loop in setup does not call draw[0m
    [32m  ✓[0m[90m loop in draw does not call draw[0m
[0m  Transform[0m
[0m    p5.prototype.rotate[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #1[0m
[0m    p5.prototype.rotateX[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rotateY[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.rotateZ[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m throws error. should be used in WEBGL mode[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.scale[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.shearX[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.shearY[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.translate[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0[0m

    [32m  ✓[0m[90m missing param #1[0m
[0m  Version[0m
  [32m  ✓[0m[90m exists on p5 object[0m
  [32m  ✓[0m[90m exists on instance of p5 sketch[0m
[0m  Vertex[0m
[0m    p5.prototype.beginShape[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.quadraticVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #3[0m
    [32m  ✓[0m[90m missing param #5[0m
    [32m  ✓[0m[90m _friendlyError is called. vertex() should be used once before quadraticVertex()[0m
[0m    p5.prototype.bezierVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #6[0m
    [32m  ✓[0m[90m missing param #8-9[0m
    [32m  ✓[0m[90m _friendlyError is called. vertex() should be used once before bezierVertex()[0m
[0m    p5.prototype.curveVertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing param #1[0m
[0m    p5.prototype.endShape[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
[0m    p5.prototype.vertex[0m
    [32m  ✓[0m[90m should be a function[0m
    [36m  - missing param #1[0m
    [36m  - wrong param type at #0[0m
[0m  Dictionary Objects[0m
[0m    p5.prototype.stringDict[0m
    [32m  ✓[0m[90m should be created[0m
    [32m  ✓[0m[90m has correct structure[0m
    [32m  ✓[0m[90m should have correct size[0m
    [32m  ✓[0m[90m should add new key-value pairs[0m
    [32m  ✓[0m[90m should add objects[0m
    [32m  ✓[0m[90m should change existing values[0m
    [32m  ✓[0m[90m should clear[0m
[0m    p5.prototype.numberDict[0m
    [32m  ✓[0m[90m should be created[0m
    [32m  ✓[0m[90m has correct structure[0m
    [32m  ✓[0m[90m should have correct size[0m
    [32m  ✓[0m[90m should add new key-value pairs[0m
    [32m  ✓[0m[90m should change existing values[0m
    [32m  ✓[0m[90m should add values together[0m
    [32m  ✓[0m[90m should subtract from value[0m
    [32m  ✓[0m[90m should divide from value[0m
    [32m  ✓[0m[90m should multiply value[0m
    [32m  ✓[0m[90m should find minimum value[0m
    [32m  ✓[0m[90m should find maximum value[0m
    [32m  ✓[0m[90m should clear[0m
[0m  local storage[0m
[0m    all keys and type keys should exist in local storage[0m
    [32m  ✓[0m[90m boolean storage retrieval should work[0m
    [32m  ✓[0m[90m boolean storage should store the correct type ID[0m
    [32m  ✓[0m[90m object storage should work[0m
    [32m  ✓[0m[90m object storage retrieval should store the correct type ID[0m
    [32m  ✓[0m[90m number storage retrieval should work[0m
    [32m  ✓[0m[90m number storage should store the correct type ID[0m
    [32m  ✓[0m[90m string storage retrieval should work[0m
    [32m  ✓[0m[90m string storage should store the correct type ID[0m
    [32m  ✓[0m[90m p5 Color should retrieve as p5 Color[0m
    [32m  ✓[0m[90m p5 Vector should retrieve as p5 Vector[0m
[0m    should be able to remove all items[0m
    [32m  ✓[0m[90m boolean should be removable[0m
    [32m  ✓[0m[90m number should be removable[0m
    [32m  ✓[0m[90m object should be removable[0m
    [32m  ✓[0m[90m string should be removable[0m
    [32m  ✓[0m[90m color should be removable[0m
    [32m  ✓[0m[90m vector should be removable[0m
[0m  DOM[0m
[0m    p5.prototype.select[0m
    [32m  ✓[0m[90m should return only one p5.element if match is found[0m
    [32m  ✓[0m[90m should find element by class name[0m
    [32m  ✓[0m[90m should find element by class name from given container[0m
    [32m  ✓[0m[90m should return null when no matches are found by class name[0m
    [32m  ✓[0m[90m should find element by tag name[0m
    [32m  ✓[0m[90m should find element by tag name from given container[0m
    [32m  ✓[0m[90m should return null when no matches are found by tag name[0m
    [32m  ✓[0m[90m should select element in container using CSS selector with ID[0m
    [32m  ✓[0m[90m should select element in container using CSS selector with class name[0m
[0m    p5.prototype.selectAll[0m
    [32m  ✓[0m[90m should return an array[0m
    [32m  ✓[0m[90m should return empty array when no matching classes are found[0m
    [32m  ✓[0m[90m should find all elements with matching class name[0m
    [32m  ✓[0m[90m should find all elements with matching class name in given container[0m
    [32m  ✓[0m[90m should find all elements with matching tag name[0m
    [32m  ✓[0m[90m should find all elements with matching tag name in given container[0m
    [32m  ✓[0m[90m should find all elements in container using CSS selector with id[0m
[0m    p5.prototype.removeElements[0m
    [32m  ✓[0m[90m should remove all elements created by p5 except Canvas[0m
[0m    p5.Element.prototype.changed[0m
    [32m  ✓[0m[90m should trigger callback when element changes[0m
    [32m  ✓[0m[90m should not trigger callback after changed(false) is called[0m
[0m    p5.Element.prototype.input[0m
    [32m  ✓[0m[90m should trigger callback when input is provided[0m
    [32m  ✓[0m[90m should not trigger callback after input(false) is called[0m
[0m    p5.prototype.createDiv[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of div type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of div[0m
[0m    p5.prototype.createP[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of p type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of p[0m
[0m    p5.prototype.createSpan[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of span type[0m
    [32m  ✓[0m[90m should set given param as innerHTML of span[0m
[0m    p5.prototype.createImg[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of image type[0m
    [32m  ✓[0m[90m should set src of image from params[0m
    [32m  ✓[0m[90m should set alt from params if given[0m
    [32m  ✓[0m[90m should set crossOrigin from params if given[0m
    [32m  ✓[0m[90m should trigger callback when image is loaded[0m
[0m    p5.prototype.createA[0m
    [32m  ✓[0m[90m should return a p5.Element of anchor type[0m
    [32m  ✓[0m[90m creates anchor with given link & text[0m
    [32m  ✓[0m[90m creates anchor with given target[0m
[0m    p5.prototype.createSlider[0m
    [32m  ✓[0m[90m should return a p5.Element of slider type[0m
    [32m  ✓[0m[90m should set min and max values[0m
    [32m  ✓[0m[90m should set slider position[0m
    [32m  ✓[0m[90m should set step value[0m
[0m    p5.prototype.createButton[0m
    [32m  ✓[0m[90m should return a p5.Element of button type[0m
    [32m  ✓[0m[90m should trigger callback when mouse is pressed[0m
[0m    p5.prototype.createCheckbox[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element with checkbox as descendant[0m
    [32m  ✓[0m[90m calling createCheckbox(label) should create checkbox and set its label[0m
    [32m  ✓[0m[90m calling createCheckbox(label, true) should create a checked checkbox and set its label[0m
    [32m  ✓[0m[90m calling checked() should return checked value of checkbox[0m
    [32m  ✓[0m[90m calling checked(true) should set checked value of checkbox[0m
[0m    p5.prototype.createSelect[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of select HTML Element[0m
    [32m  ✓[0m[90m should return p5.Element when select element is passed[0m
    [32m  ✓[0m[90m calling option(newName) should add a new option[0m
    [32m  ✓[0m[90m calling option(name, newValue) should update value of option[0m
    [32m  ✓[0m[90m calling value() should return current selected option[0m
    [32m  ✓[0m[90m calling selected() should return all selected options[0m
    [32m  ✓[0m[90m calling selected(value) should updated selectedIndex[0m
    [32m  ✓[0m[90m calling disable() should disable the whole dropdown[0m
    [32m  ✓[0m[90m should disable an option when disable() method invoked with option name[0m
[0m    p5.prototype.createRadio[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of radio type[0m
    [32m  ✓[0m[90m should return p5.Element from existing radio Element[0m
    [32m  ✓[0m[90m calling option(value) should return existing radio element[0m
    [32m  ✓[0m[90m calling option(newValue) should create a new radio input[0m
    [32m  ✓[0m[90m calling option(value, label) should set label of option[0m
    [32m  ✓[0m[90m should use given name for all options[0m
    [32m  ✓[0m[90m calling remove(value) should remove option[0m
    [32m  ✓[0m[90m calling value() should return selected value[0m
    [32m  ✓[0m[90m calling selected(value) should select a value and return it[0m
    [32m  ✓[0m[90m calling selected() should return the currently selected option[0m
    [32m  ✓[0m[90m calling disable() should disable all the radio inputs[0m
[0m    p5.prototype.createColorPicker[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of input[color] type[0m
    [32m  ✓[0m[90m should accept a p5.Color as param[0m
    [32m  ✓[0m[90m should accept a string as param[0m
    [32m  ✓[0m[90m calling color() should return the current color as p5.color[0m
    [32m  ✓[0m[90m calling value() should return hex string of color[0m
[0m    p5.prototype.createInput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of input type[0m
    [32m  ✓[0m[90m should set given value as input[0m
    [32m  ✓[0m[90m should create input of given type and value[0m
[0m    p5.prototype.createFileInput[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return input of file input[0m
    [32m  ✓[0m[90m should trigger callback on input change event[0m
    [32m  ✓[0m[90m should accept multiple files if specified[0m
    [32m  ✓[0m[90m should trigger callback for each file if multiple files are given[0m
[0m    p5.prototype.createVideo[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of HTMLVideoElement[0m
    [32m  ✓[0m[90m should accept a singular media source[0m
    [32m  ✓[0m[90m should accept multiple media sources[0m
    [32m  ✓[0m[90m should trigger callback on canplaythrough event[0m
[0m    p5.prototype.createAudio[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of HTMLAudioElement[0m
    [32m  ✓[0m[90m should accept a singular media source[0m
    [32m  ✓[0m[90m should accept multiple media sources[0m
    [32m  ✓[0m[90m should trigger callback on canplaythrough event[0m
[0m    p5.prototype.createCapture[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return p5.Element of video type[0m
    [32m  ✓[0m[90m should throw error if getUserMedia is not supported[0m
    [32m  ✓[0m[90m triggers the callback after loading metadata[0m
    [32m  ✓[0m[90m should have playsinline attribute to empty string on DOM element[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a p5.Element of appropriate type[0m
    [32m  ✓[0m[90m should set given content as innerHTML[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should add provided string to class names[0m
    [32m  ✓[0m[90m should not add class name, if already exists[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.prototype.createElement[0m
[0m    p5.Element.prototype.addClass[0m
[0m    p5.Element.prototype.removeClass[0m
    [32m  ✓[0m[90m should remove provided string from class names[0m
    [32m  ✓[0m[90m should not throw error if class name not exists[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return true for existing class name[0m
    [32m  ✓[0m[90m should return false for non-existing class name[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.Element.prototype.hasClass[0m
[0m    p5.Element.prototype.toggleClass[0m
    [32m  ✓[0m[90m should remove an existing class name[0m
    [32m  ✓[0m[90m should add an non-existing class name[0m
[0m    p5.Element.prototype.child[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return all child nodes by default[0m
    [32m  ✓[0m[90m should append p5 element as child[0m
    [32m  ✓[0m[90m should append dom element as child[0m
    [32m  ✓[0m[90m should append element as child from a given id[0m
    [32m  ✓[0m[90m should not throw error if mathcing element is not found from a given id[0m
[0m    p5.Element.prototype.center[0m
    [32m  ✓[0m[90m should be a function[0m
[0m    p5.Element.prototype.html[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the inner HTML of element if no argument is given[0m
    [32m  ✓[0m[90m should replace the inner HTML of element[0m
    [32m  ✓[0m[90m should append to the inner HTML if second param is true[0m
    [32m  ✓[0m[90m should replace the inner HTML if second param is false[0m
[0m    p5.Element.prototype.position[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return current position if no args are given[0m
    [32m  ✓[0m[90m should set default position as absolute[0m
    [32m  ✓[0m[90m should set given params as properties[0m
[0m    p5.prototype.drop[0m
{}
    [32m  ✓[0m[90m drop fires multiple events[0m
[0m  Keyboard Events[0m
[0m    p5.prototype.keyIsPressed[0m
    [32m  ✓[0m[90m keyIsPressed should be a boolean[0m
    [32m  ✓[0m[90m keyIsPressed should be true on key press[0m
    [32m  ✓[0m[90m keyIsPressed should be true on multiple key presses[0m
    [32m  ✓[0m[90m keyIsPressed should be false on key up[0m
[0m    p5.prototype.isKeyPressed[0m
    [32m  ✓[0m[90m isKeyPressed should be a boolean[0m
    [32m  ✓[0m[90m isKeyPressed should be true on key press[0m
    [32m  ✓[0m[90m isKeyPressed should be false on key up[0m
[0m    p5.prototype.key[0m
    [32m  ✓[0m[90m key should be a string[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
[0m    p5.prototype.keyCode[0m
    [32m  ✓[0m[90m keyCode should be a number[0m
    [32m  ✓[0m[90m key should return the key pressed[0m
[0m    keyPressed[0m
    [32m  ✓[0m[90m keyPressed must run when key is pressed[0m
    [32m  ✓[0m[90m keyPressed functions on multiple instances must run once[0m
[0m    keyReleased[0m
    [32m  ✓[0m[90m keyReleased must run when key is released[0m
    [32m  ✓[0m[90m keyReleased functions on multiple instances must run once[0m
[0m    keyTyped[0m
    [32m  ✓[0m[90m keyTyped must run when key is pressed[0m
    [32m  ✓[0m[90m keyTyped functions on multiple instances must run once[0m
[0m    p5.prototype.keyIsDown[0m
    [32m  ✓[0m[90m keyIsDown should return a boolean[0m
    [32m  ✓[0m[90m keyIsDown should return true if key is down[0m
    [32m  ✓[0m[90m keyIsDown should return false if key is not down[0m
[0m  Mouse Events[0m
[0m    p5.prototype._hasMouseInteracted[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be a boolean[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be false before mouse interaction[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be true on mouse interaction[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be true on touch interaction[0m
[0m    p5.prototype.mouseX[0m
    [32m  ✓[0m[90m mouseX should be a number[0m
    [32m  ✓[0m[90m mouseX should be current horizontal position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m mouseX should be current horizontal position of touch relative to the canvas[0m
[0m    p5.prototype.mouseY[0m
    [32m  ✓[0m[90m mouseY should be a number[0m
    [32m  ✓[0m[90m mouseY should be current vertical position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m mouseY should be current vertical position of touch relative to the canvas[0m
[0m    p5.prototype.pmouseX[0m
    [32m  ✓[0m[90m pmouseX should be a number[0m
    [32m  ✓[0m[90m pmouseX should be previous horizontal position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m pmouseX should be previous horizontal position of touch relative to the canvas[0m
[0m    p5.prototype.pmouseY[0m
    [32m  ✓[0m[90m pmouseY should be a number[0m
    [32m  ✓[0m[90m pmouseY should be previous vertical position of mouse relative to the canvas[0m
    [32m  ✓[0m[90m pmouseY should be previous vertical position of touch relative to the canvas[0m
[0m    p5.prototype.winMouseX[0m
    [32m  ✓[0m[90m winMouseX should be a number[0m
    [32m  ✓[0m[90m winMouseX should be current horizontal position of mouse relative to the window[0m
    [32m  ✓[0m[90m winMouseX should be current horizontal position of touch relative to the window[0m
[0m    p5.prototype.winMouseY[0m
    [32m  ✓[0m[90m winMouseY should be a number[0m
    [32m  ✓[0m[90m winMouseY should be current vertical position of mouse relative to the window[0m
    [32m  ✓[0m[90m winMouseY should be current vertical position of touch relative to the window[0m
[0m    p5.prototype.pwinMouseX[0m
    [32m  ✓[0m[90m pwinMouseX should be a number[0m
    [32m  ✓[0m[90m pwinMouseX should be previous horizontal position of mouse relative to the window[0m
    [32m  ✓[0m[90m pwinMouseX should be previous horizontal position of touch relative to the window[0m
[0m    p5.prototype.pwinMouseY[0m
    [32m  ✓[0m[90m pwinMouseY should be a number[0m
    [32m  ✓[0m[90m pwinMouseY should be previous vertical position of mouse relative to the window[0m
    [32m  ✓[0m[90m pwinMouseY should be previous vertical position of touch relative to the window[0m
[0m    p5.prototype.mouseButton[0m
    [32m  ✓[0m[90m _hasMouseInteracted should be a number[0m
    [32m  ✓[0m[90m mouseButton should 0 for uninitialised[0m
    [32m  ✓[0m[90m mouseButton should be "left" on left mouse button click[0m
    [32m  ✓[0m[90m mouseButton should be "center" on auxillary mouse button click[0m
    [32m  ✓[0m[90m mouseButton should be "right" on right mouse button click[0m
[0m    p5.prototype.mouseIsPressed[0m
    [32m  ✓[0m[90m mouseIsPressed should be a boolean[0m
    [32m  ✓[0m[90m mouseIsPressed should be false if mouse is not pressed[0m
    [32m  ✓[0m[90m mouseIsPressed should be true if mouse is pressed[0m
[0m    mouseMoved[0m
    [32m  ✓[0m[90m mouseMoved function must run when mouse is moved[0m
{}
    [32m  ✓[0m[90m mouseMoved functions on multiple instances must run once[0m
{}
{}
[0m    mouseDragged[0m
    [32m  ✓[0m[90m mouseDragged function must run when mouse is dragged[0m
    [32m  ✓[0m[90m mouseDragged functions on multiple instances must run once[0m
[0m    mousePressed[0m
    [32m  ✓[0m[90m mousePressed function must run when mouse is pressed[0m
    [32m  ✓[0m[90m mousePressed functions on multiple instances must run once[0m
[0m    mouseReleased[0m
    [32m  ✓[0m[90m mouseReleased function must run when mouse is released[0m
    [32m  ✓[0m[90m mouseReleased functions on multiple instances must run once[0m
[0m    mouseClicked[0m
    [32m  ✓[0m[90m mouseClicked function must run when mouse is clicked[0m
    [32m  ✓[0m[90m mouseClicked functions on multiple instances must run once[0m
[0m    doubleClicked[0m
    [32m  ✓[0m[90m doubleClicked function must run when mouse is double clicked[0m
    [32m  ✓[0m[90m doubleClicked functions on multiple instances must run once[0m
[0m    mouseWheel[0m
    [32m  ✓[0m[90m mouseWheel function must run when mouse wheel event is detected[0m
    [32m  ✓[0m[90m mouseWheel functions on multiple instances must run once[0m
[0m  Touch Events[0m
[0m    p5.prototype.touches[0m
    [32m  ✓[0m[90m should be an empty array[0m
    [32m  ✓[0m[90m should be an array of multiple touches[0m
    [32m  ✓[0m[90m should contain the touch registered[0m
[0m    touchStarted[0m
    [32m  ✓[0m[90m touchStarted should be fired when a touch is registered[0m
    [32m  ✓[0m[90m should be fired when a touch starts over the element[0m
    [32m  ✓[0m[90m touchStarted functions on multiple instances must run once[0m
[0m    touchMoved[0m
    [32m  ✓[0m[90m touchMoved should be fired when a touchmove is registered[0m
    [32m  ✓[0m[90m should be fired when a touchmove is registered over the element[0m
    [32m  ✓[0m[90m touchMoved functions on multiple instances must run once[0m
[0m    touchEnded[0m
    [32m  ✓[0m[90m touchEnded must run when a touch is registered[0m
    [32m  ✓[0m[90m should be fired when a touch starts over the element[0m
    [32m  ✓[0m[90m touchEnded functions on multiple instances must run once[0m
[0m  Acceleration Events[0m
[0m    acceleration[0m
    [32m  ✓[0m[90m accelerationX should be 20[0m
    [32m  ✓[0m[90m accelerationY should be 40[0m
    [32m  ✓[0m[90m accelerationZ should be 60[0m
[0m    previous acceleration[0m
    [32m  ✓[0m[90m pAccelerationX should be 20[0m
    [32m  ✓[0m[90m pAccelerationY should be 40[0m
    [32m  ✓[0m[90m pAccelerationZ should be 60[0m
[0m    rotation[0m
    [32m  ✓[0m[90m rotationX should be 45[0m
    [32m  ✓[0m[90m rotationY should be 90[0m
    [32m  ✓[0m[90m rotationZ should be 10[0m
[0m    previous rotation[0m
    [32m  ✓[0m[90m pRotationX should be 45[0m
    [32m  ✓[0m[90m pRotationY should be 90[0m
    [32m  ✓[0m[90m pRotationZ should be 10[0m
[0m    deviceMoved[0m
    [32m  ✓[0m[90m deviceMoved must run when device is moved more than the threshold value[0m
    [32m  ✓[0m[90m deviceMoved should not run when device is moved less than the threshold value[0m
    [32m  ✓[0m[90m p5.prototype.setMoveThreshold[0m
[0m    deviceTurned[0m
    [32m  ✓[0m[90m deviceTurned must run when device is turned more than 90 degrees[0m
    [32m  ✓[0m[90m turnAxis should be X[0m
[0m    deviceShaken[0m
    [32m  ✓[0m[90m deviceShaken must run when device acceleration is more than the threshold value[0m
    [32m  ✓[0m[90m deviceMoved should not run when device acceleration is less than the threshold value[0m
    [32m  ✓[0m[90m p5.prototype.setShakeThreshold[0m
[0m  p5.Image[0m
[0m    p5.prototype.createImage[0m
    [32m  ✓[0m[90m it creates an image[0m
[0m    p5.Image[0m
    [32m  ✓[0m[90m it has necessary properties[0m
    [32m  ✓[0m[90m height and width are correct[0m
[0m    p5.Image.prototype.resize[0m
    [32m  ✓[0m[90m it should resize the image[0m
[0m  loading images[0m
  [32m  ✓[0m[90m should call successCallback when image loads[0m


  [32m  ✓[0m[90m should call failureCallback when unable to load image[0m
  [32m  ✓[0m[90m should draw image with defaults[0m[31m (104ms)[0m
  [32m  ✓[0m[90m static image should not have gifProperties[0m[31m (113ms)[0m
  [32m  ✓[0m[90m single frame GIF should not have gifProperties[0m
  [32m  ✓[0m[90m first frame of GIF should be painted after load[0m
  [32m  ✓[0m[90m animated gifs work with no disposal[0m
  [32m  ✓[0m[90m animated gifs work with background disposal[0m
  [32m  ✓[0m[90m animated gifs work with previous disposal[0m
  [36m  - Test in preload() with success callback[0m
  [36m  - Test in setup() after preload()[0m
[0m  loading animated gif images[0m
  [32m  ✓[0m[90m should call successCallback when image loads[0m


  [32m  ✓[0m[90m should call failureCallback when unable to load image[0m
  [32m  ✓[0m[90m should construct gifProperties correctly after preload[0m
[0m  displaying images[0m
  [32m  ✓[0m[90m tint() with color[0m[31m (1544ms)[0m
  [32m  ✓[0m[90m tint() with alpha[0m[31m (1432ms)[0m
  [32m  ✓[0m[90m tint() with color and alpha[0m[31m (1418ms)[0m
[0m  pixels[0m
[0m    p5.Image.get[0m
    [32m  ✓[0m[90m get(x,y) works with integers[0m
    [32m  ✓[0m[90m get(x,y) returns 0s for out of bounds arguments[0m
    [32m  ✓[0m[90m get() returns a copy when no arguments are supplied[0m
    [32m  ✓[0m[90m get(x,y,w,h) works[0m[31m (387ms)[0m
    [32m  ✓[0m[90m rounds down when given decimal numbers[0m
[0m    p5.Image.pixels[0m
    [32m  ✓[0m[90m should be an array of pixels[0m
    [32m  ✓[0m[90m should store r, g, b, a values for each pixel[0m
    [32m  ✓[0m[90m should store correct r, g, b, a values for each pixel[0m
[0m    p5.Image.set[0m
    [32m  ✓[0m[90m set(x,y) changes color of pixel (x, y)[0m
[0m    p5.Image.blend[0m
    [32m  ✓[0m[90m should copy a region of pixels using the specified blend mode[0m
    [32m  ✓[0m[90m wrong parameter at #8[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m missing parameter at #3 [0m
    [32m  ✓[0m[90m missing parameter at #8 [0m
[0m    p5.Image.copy[0m
    [32m  ✓[0m[90m should copy a region of pixels[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #0[0m
    [32m  ✓[0m[90m missing parameter at #3 [0m
[0m  Filters[0m
  [32m  ✓[0m[90m threshold filter. less than threshold[0m
  [32m  ✓[0m[90m threshold filter. greater than threshold[0m
  [32m  ✓[0m[90m gray filter[0m
  [32m  ✓[0m[90m opaque filter[0m
  [32m  ✓[0m[90m invert filter[0m
[0m  downloading animated gifs[0m
[0m    p5.prototype.saveGif[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should not throw an error[0m
    [32m  ✓[0m[90m should download a gif[0m
[0m  p5.prototype.saveCanvas[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m[31m (151ms)[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m
  [32m  ✓[0m[90m no friendly-err-msg III[0m
  [32m  ✓[0m[90m no friendly-err-msg IV[0m
  [32m  ✓[0m[90m no friendly-err-msg V[0m
  [32m  ✓[0m[90m no friendly-err-msg VI[0m
  [32m  ✓[0m[90m should download a png file[0m
  [32m  ✓[0m[90m should download a jpg file I[0m
  [32m  ✓[0m[90m should download a jpg file II[0m
[0m  p5.prototype.saveFrames[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m[31m (100ms)[0m
  [32m  ✓[0m[90m should get frames in callback (png)[0m[31m (502ms)[0m
  [32m  ✓[0m[90m should get frames in callback (jpg)[0m[31m (501ms)[0m
[0m  Files[0m
[0m    httpDo()[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should work when provided with just a path[0m
    [32m  ✓[0m[90m should accept method parameter[0m
    [32m  ✓[0m[90m should accept type parameter[0m
    [32m  ✓[0m[90m should accept method and type parameter together[0m

    [32m  ✓[0m[90m should pass error object to error callback function[0m
    [32m  ✓[0m[90m should return a promise[0m

    [32m  ✓[0m[90m should return a promise that rejects on error[0m
{ status: 404, ok: false }
[0m    p5.prototype.saveStrings[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m no friendly-err-msg III[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
    [32m  ✓[0m[90m should download a file with expected contents with CRLF[0m
[0m    p5.prototype.saveJSON[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg I[0m
    [32m  ✓[0m[90m no friendly-err-msg II[0m
    [32m  ✓[0m[90m no friendly-err-msg III[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
[0m    p5.prototype.writeFile[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should download a file with expected contents (text)[0m
[0m    p5.prototype.downloadFile[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should download a file with expected contents[0m
[0m    p5.prototype.save[0m
[0m      saving images[0m
      [32m  ✓[0m[90m should be a function[0m
      [32m  ✓[0m[90m should download a png file[0m
      [32m  ✓[0m[90m should download a jpg file[0m
[0m      saving strings and json[0m
      [32m  ✓[0m[90m should download a text file[0m
      [32m  ✓[0m[90m should download a json file[0m
[0m  loadBytes[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (51ms)[0m

  [32m  ✓[0m[90m error callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m returns the correct object[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON[0m
[0m  loadStrings[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (55ms)[0m

  [32m  ✓[0m[90m error callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m
  [32m  ✓[0m[90m returns an array of strings[0m
  [32m  ✓[0m[90m passes an array to success callback[0m
  [32m  ✓[0m[90m should include empty strings[0m
  [32m  ✓[0m[90m can load file with many lines[0m
[0m  loadXML[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (52ms)[0m

  [32m  ✓[0m[90m error callback is called[0m[33m (54ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data[0m
[0m  loadJSON[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (55ms)[0m

  [32m  ✓[0m[90m error callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (56ms)[0m
  [32m  ✓[0m[90m returns an object for object JSON.[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON.[0m
  [36m  - returns an array for array JSON.[0m
  [32m  ✓[0m[90m passes an array to success callback for array JSON.[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSONP.[0m
  [32m  ✓[0m[90m passes an array to success callback for array JSONP.[0m
[0m  loadTable[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

{ status: 404, ok: false }
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (52ms)[0m

  [32m  ✓[0m[90m error callback is called[0m[33m (55ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (57ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object to success callback for object JSON[0m
  [32m  ✓[0m[90m csv option returns the correct data[0m
  [32m  ✓[0m[90m using the header option works[0m
  [32m  ✓[0m[90m allows the csv and header options together[0m
  [32m  ✓[0m[90m CSV files should handle commas within quoted fields[0m
  [32m  ✓[0m[90m CSV files should handle escaped quotes and returns within quoted fields[0m
[0m  saveTable[0m
  [32m  ✓[0m[90m should be a function[0m
  [32m  ✓[0m[90m no friendly-err-msg I[0m
  [32m  ✓[0m[90m no friendly-err-msg II[0m
  [32m  ✓[0m[90m should download a file with expected contents[0m
  [32m  ✓[0m[90m should download a file with expected contents (tsv)[0m
  [32m  ✓[0m[90m should download a file with expected contents (html)[0m
[0m  loadImage[0m


  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m
  [32m  ✓[0m[90m error prevents sketch continuing[0m



{ isTrusted: true }
  [32m  ✓[0m[90m error callback is called[0m[33m (59ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (58ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m
[0m  loadModel[0m
  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m
Sorry, the file type is invalid. Only OBJ and STL files are supported.
  [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (52ms)[0m
  [32m  ✓[0m[90m error callback is called[0m[33m (51ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[31m (78ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m
  [32m  ✓[0m[90m resolves STL file correctly[0m
  [32m  ✓[0m[90m resolves STL file correctly with explicit extension[0m
  [32m  ✓[0m[90m resolves STL file correctly with case insensitive extension[0m
[0m  loadShader[0m

  [32m  ✓[0m[90m _friendlyFileLoadError is called[0m


{ status: 404, ok: false }
  [32m  ✓[0m[90m error with vert prevents sketch continuing[0m[33m (51ms)[0m

{ status: 404, ok: false }
  [32m  ✓[0m[90m error with frag prevents sketch continuing[0m[33m (51ms)[0m

  [32m  ✓[0m[90m error callback is called for vert[0m[33m (55ms)[0m

  [32m  ✓[0m[90m error callback is called for frag[0m[33m (56ms)[0m
  [32m  ✓[0m[90m loading correctly triggers setup[0m
  [32m  ✓[0m[90m success callback is called[0m[33m (58ms)[0m
  [32m  ✓[0m[90m returns an object with correct data[0m
  [32m  ✓[0m[90m passes an object with correct data to callback[0m
[0m  Calculation[0m
[0m    p5.prototype.abs[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return an absolute value[0m
[0m    p5.prototype.ceil[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return ceil value given negative value[0m
    [32m  ✓[0m[90m should return a ceil value given positive value[0m
    [32m  ✓[0m[90m should return same number[0m
[0m    p5.prototype.dist[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return correct distance[0m
    [32m  ✓[0m[90m should return positive  distance[0m
    [32m  ✓[0m[90m should return correct distance[0m
    [32m  ✓[0m[90m should return positive  distance[0m
    [32m  ✓[0m[90m should not underflow[0m
    [32m  ✓[0m[90m should not overflow[0m
    [32m  ✓[0m[90m should return 0 for identical 2D points[0m
    [32m  ✓[0m[90m should return 0 for identical 3D points[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at infinity (2D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at -infinity (2D)[0m
    [32m  ✓[0m[90m should handle overflow correctly (2D)[0m
    [32m  ✓[0m[90m should handle rounding correctly (2D)[0m
    [32m  ✓[0m[90m should handle string parameters correctly (2D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at infinity (3D)[0m
    [32m  ✓[0m[90m should return infinity if coordinate of a point is at -infinity (3D)[0m
    [32m  ✓[0m[90m should handle overflow correctly (3D)[0m
    [32m  ✓[0m[90m should handle rounding correctly (3D)[0m
    [32m  ✓[0m[90m should handle string parameters correctly (3D)[0m
[0m    p5.prototype.exp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return exp value given negative value[0m
    [32m  ✓[0m[90m should return exp value given positive value[0m
    [32m  ✓[0m[90m should return 1[0m
[0m    p5.prototype.floor[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return floor value given negative value[0m
    [32m  ✓[0m[90m should return a floor value given positive value[0m
    [32m  ✓[0m[90m should return same number[0m
[0m    p5.prototype.lerp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return start[0m
    [32m  ✓[0m[90m should return average[0m
    [32m  ✓[0m[90m should return stop[0m
[0m    p5.prototype.log[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return log value given negative value[0m
    [32m  ✓[0m[90m should return log value given positive value[0m
    [32m  ✓[0m[90m should return 0[0m
[0m    p5.prototype.mag[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return correct magitude[0m
    [32m  ✓[0m[90m should return positive magnitude given negative inputs[0m
[0m    p5.prototype.map[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return scaled value[0m
    [32m  ✓[0m[90m should extrapolate by default[0m
    [32m  ✓[0m[90m shaould clamp correctly[0m
[0m    p5.prototype.max[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return larger left argument[0m
    [32m  ✓[0m[90m should return larger right argument[0m
    [32m  ✓[0m[90m should return single value[0m
    [32m  ✓[0m[90m should return larger value from array[0m
    [32m  ✓[0m[90m should return larger value from array[0m
    [32m  ✓[0m[90m should return single value from array[0m
[0m    p5.prototype.min[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return smaller right  argument[0m
    [32m  ✓[0m[90m should return smaller left  argument[0m
    [32m  ✓[0m[90m should return single value[0m
    [32m  ✓[0m[90m should return smaller value from array[0m
    [32m  ✓[0m[90m should return smaller value from array[0m
    [32m  ✓[0m[90m should return single value from array[0m
[0m    p5.prototype.norm[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return scaled decimal value[0m
[0m    p5.prototype.constrain[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return same number[0m
    [32m  ✓[0m[90m should return lower bound[0m
    [32m  ✓[0m[90m should return upper bound[0m
[0m    p5.prototype.sq[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return sauare value[0m
    [32m  ✓[0m[90m should return squared value given negative number[0m
[0m    p5.prototype.pow[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return pow for negative exponential[0m
    [32m  ✓[0m[90m should return pow for positive exponential[0m
[0m    p5.prototype.round[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should round down[0m
    [32m  ✓[0m[90m should round up from midpoint[0m
    [32m  ✓[0m[90m should round up[0m
    [32m  ✓[0m[90m should round two decimal places[0m
    [32m  ✓[0m[90m should round very small numbers to zero[0m
    [32m  ✓[0m[90m should round very small numbers to zero when decimal places are specified[0m
[0m    p5.prototype.sqrt[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return square root[0m
[0m  Noise[0m
[0m    p5.prototype.noise[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return a number 0 < n < 1[0m
[0m    p5.prototype.noiseSeed[0m
    [32m  ✓[0m[90m should return a number 0 < n < 1[0m
    [32m  ✓[0m[90m should return same sequence of numbers[0m
[0m  p5.Vector[0m
[0m    p5.prototype.setHeading() RADIANS[0m
    [32m  ✓[0m[90m should have heading() value of 1 (RADIANS)[0m
[0m    p5.prototype.setHeading() DEGREES[0m
    [32m  ✓[0m[90m should have heading() value of 1 (DEGREES)[0m
[0m    p5.prototype.createVector()[0m
    [32m  ✓[0m[90m should create instance of p5.Vector[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 0[0m
[0m    p5.prototype.createVector()[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,3[0m
[0m    new p5.Vector()[0m
    [32m  ✓[0m[90m should set constant to DEGREES[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 0[0m
[0m    new p5.Vector(1, 2, 3)[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,3[0m
[0m    new p5.Vector(1,2,undefined)[0m
    [32m  ✓[0m[90m should have x, y, z be initialized to 1,2,0[0m
[0m    p5.prototype.rotate() RADIANS[0m
    [32m  ✓[0m[90m should have x, y, z rotated to 0, -1, 0 (RADIANS)[0m
[0m    p5.prototype.rotate() DEGREES[0m
    [32m  ✓[0m[90m should have x, y, z rotated to 0, -1, 0 (DEGREES)[0m
[0m    p5.prototype.angleBetween()[0m
    [32m  ✓[0m[90m should not trip on rounding issues in 2D space[0m
    [32m  ✓[0m[90m should not trip on rounding issues in 3D space[0m
    [32m  ✓[0m[90m should return NaN for zero vector[0m
[0m    set()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the vector's x, y, z[0m
[0m      with Array[0m
      [32m  ✓[0m[90m [2,4] should set x === 2, y === 4, z === 0[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the array's 0,1,2 index[0m
[0m      set(1,2,3)[0m
      [32m  ✓[0m[90m should have x, y, z be initialized to the 1, 2, 3[0m
[0m    copy()[0m
    [32m  ✓[0m[90m should not return the same instance[0m
    [32m  ✓[0m[90m should return the calling object's x, y, z[0m
[0m    add()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should add x, y, z  from the vector argument[0m
[0m      with Array[0m
      [32m  ✓[0m[90m should add the array's 0,1,2 index[0m
[0m        add([2, 4])[0m
        [32m  ✓[0m[90m should add the x and y components[0m
[0m      add(3,5)[0m
      [32m  ✓[0m[90m should add the x and y components[0m
[0m      add(2,3,4)[0m
      [32m  ✓[0m[90m should add the x, y, z components[0m
[0m      p5.Vector.add(v1, v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be sum of the two p5.Vectors[0m
[0m    rem()[0m
    [32m  ✓[0m[90m should give same vector if nothing passed as parameter[0m
    [32m  ✓[0m[90m should give correct output if passed only one numeric value[0m
    [32m  ✓[0m[90m should give correct output if passed two numeric value[0m
    [32m  ✓[0m[90m should give correct output if passed three numeric value[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should return correct output if only one component is non-zero[0m
      [32m  ✓[0m[90m should return correct output if x component is zero[0m
      [32m  ✓[0m[90m should return correct output if all components are non-zero[0m
      [32m  ✓[0m[90m should return same vector if all components are zero[0m
[0m      with negative vectors[0m
      [32m  ✓[0m[90m should return correct output[0m
[0m      with Arrays[0m
      [32m  ✓[0m[90m should return remainder of vector components for 3D vector[0m
      [32m  ✓[0m[90m should return remainder of vector components for 2D vector[0m
      [32m  ✓[0m[90m should return correct output if x,y components are zero for 2D vector[0m
      [32m  ✓[0m[90m should return same vector if any vector component is non-finite number[0m
[0m      p5.Vector.rem(v1,v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be v1 % v2[0m
[0m    sub()[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should sub x, y, z  from the vector argument[0m
[0m      with Array[0m
      [32m  ✓[0m[90m should subtract from the array's 0,1,2 index[0m
[0m        sub([2, 4])[0m
        [32m  ✓[0m[90m should sub the x and y components[0m
[0m      sub(3,5)[0m
      [32m  ✓[0m[90m should subtract the x and y components[0m
[0m      sub(2,3,4)[0m
      [32m  ✓[0m[90m should subtract the x, y, z components[0m
[0m      p5.Vector.sub(v1, v2)[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should be v1 - v2[0m
[0m    mult()[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should not change x, y, z if no argument is given[0m
p5.Vector.prototype.mult: x, y, or z arguments are either undefined or not a finite number
    [32m  ✓[0m[90m should not change x, y, z if n is not a finite number[0m
[0m      with scalar[0m
      [32m  ✓[0m[90m multiply the x, y, z with the scalar[0m
[0m      v0.mult(v1)[0m
      [32m  ✓[0m[90m should do component wise multiplication[0m
[0m      v0.mult(arr)[0m
      [32m  ✓[0m[90m should do component wise multiplication from an array[0m
[0m      p5.Vector.mult(v, n)[0m
      [32m  ✓[0m[90m should return a new p5.Vector[0m
      [32m  ✓[0m[90m should multiply the scalar[0m
[0m      p5.Vector.mult(v, v[0m
      [32m  ✓[0m[90m should return new vector from component wise multiplication[0m
[0m      p5.Vector.mult(v, arr[0m
      [32m  ✓[0m[90m should return new vector from component wise multiplication with an array[0m
[0m    div()[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should not change x, y, z if no argument is given[0m
p5.Vector.prototype.div: x, y, or z arguments are either undefined or not a finite number
    [32m  ✓[0m[90m should not change x, y, z if n is not a finite number[0m
[0m      with scalar[0m
      [32m  ✓[0m[90m divide the x, y, z with the scalar[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if n is 0[0m
[0m      p5.Vector.div(v, n)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should return a new p5.Vector[0m
      [32m  ✓[0m[90m should divide the scalar[0m
[0m      v0.div(v1)[0m
      [32m  ✓[0m[90m should do component wise division[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if v3 contains 0[0m
[0m      v0.div(arr)[0m
      [32m  ✓[0m[90m should do component wise division with an array[0m
p5.Vector.prototype.div: divide by 0
      [32m  ✓[0m[90m should not change x, y, z if array contains 0[0m
[0m      p5.Vector.div(v, v[0m
      [32m  ✓[0m[90m should return new vector from component wise division[0m
[0m      p5.Vector.div(v, arr[0m
      [32m  ✓[0m[90m should return new vector from component wise division with an array[0m
[0m    dot[0m
    [32m  ✓[0m[90m should return a number[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should be the dot product of the vector[0m
[0m      with x, y, z[0m
      [32m  ✓[0m[90m should be the dot product with x, y[0m
      [32m  ✓[0m[90m should be the dot product with x, y, z[0m
[0m      p5.Vector.dot(v, n)[0m
      [32m  ✓[0m[90m should return a number[0m
      [32m  ✓[0m[90m should be the dot product of the two vectors[0m
[0m    cross[0m
    [32m  ✓[0m[90m should return a new product[0m
[0m      with p5.Vector[0m
      [32m  ✓[0m[90m should cross x, y, z  from the vector argument[0m
[0m      p5.Vector.cross(v1, v2)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should return neither v1 nor v2[0m
      [32m  ✓[0m[90m should the cross product of v1 and v2[0m
[0m    dist[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should return distance between two vectors[0m
    [32m  ✓[0m[90m should return distance between two vectors[0m
    [32m  ✓[0m[90m should be commutative[0m
[0m    p5.Vector.dist(v1, v2)[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m should be commutative[0m
[0m    normalize[0m
[0m      v.normalize()[0m
      [32m  ✓[0m[90m should return the same object[0m
      [32m  ✓[0m[90m unit vector should not change values[0m
      [32m  ✓[0m[90m 2,2,1 should normalize to ~0.66,0.66,0.33[0m
[0m      p5.Vector.normalize(v)[0m
      [32m  ✓[0m[90m should not be undefined[0m
      [32m  ✓[0m[90m should not return same object v[0m
      [32m  ✓[0m[90m unit vector 1,0,0 should normalize to 1,0,0[0m
      [32m  ✓[0m[90m 2,2,1 should normalize to ~0.66,0.66,0.33[0m
[0m    limit[0m
    [32m  ✓[0m[90m should return the same object[0m
[0m      with a vector larger than the limit[0m
      [32m  ✓[0m[90m should limit the vector[0m
[0m      with a vector smaller than the limit[0m
      [32m  ✓[0m[90m should not limit the vector[0m
[0m    setMag[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should set the magnitude of the vector[0m
    [32m  ✓[0m[90m should set the magnitude of the vector[0m
[0m    heading[0m
    [32m  ✓[0m[90m should return a number[0m
    [32m  ✓[0m[90m heading for vector pointing right is 0[0m
    [32m  ✓[0m[90m heading for vector pointing down is PI/2[0m
    [32m  ✓[0m[90m heading for vector pointing left is PI[0m
[0m    rotate[0m
    [32m  ✓[0m[90m should return the same object[0m
    [32m  ✓[0m[90m should rotate the vector[0m
    [32m  ✓[0m[90m should rotate the vector[0m
[0m    lerp[0m
    [32m  ✓[0m[90m should return the same object[0m
[0m      with x, y, z, amt[0m
      [32m  ✓[0m[90m should lerp x by amt[0m
      [32m  ✓[0m[90m should lerp y by amt[0m
      [32m  ✓[0m[90m should lerp z by amt[0m
[0m      with no amt[0m
      [32m  ✓[0m[90m should assume 0 amt[0m
[0m    p5.Vector.lerp(v1, v2, amt)[0m
    [32m  ✓[0m[90m should not be undefined[0m
    [32m  ✓[0m[90m should be a p5.Vector[0m
    [32m  ✓[0m[90m should return neither v1 nor v2[0m
    [32m  ✓[0m[90m should res to be [1, 1, 1][0m
[0m    p5.Vector.fromAngle(angle)[0m
    [32m  ✓[0m[90m should be a p5.Vector with values (0,1)[0m
[0m    p5.Vector.random2D()[0m
    [32m  ✓[0m[90m should be a unit p5.Vector[0m
[0m    p5.Vector.random3D()[0m
    [32m  ✓[0m[90m should be a unit p5.Vector[0m
[0m    v1.angleBetween(v2)[0m
    [32m  ✓[0m[90m should be a Number[0m
[0m      with [1,0,0] and [2,2,0][0m
      [32m  ✓[0m[90m should be 45 deg difference[0m
[0m      with [2,0,0] and [-2,0,0][0m
      [32m  ✓[0m[90m should be 180 deg difference[0m
[0m      with [2,0,0] and [-2,-2,0][0m
      [32m  ✓[0m[90m should be 135 deg difference[0m
      [32m  ✓[0m[90m should be commutative[0m
[0m    array[0m
    [32m  ✓[0m[90m should return an array[0m
    [32m  ✓[0m[90m should return an with the x y and z components[0m
[0m    reflect[0m
    [32m  ✓[0m[90m should return a p5.Vector[0m
    [32m  ✓[0m[90m should update this[0m
    [32m  ✓[0m[90m x-normal should flip incoming x component and maintain y,z components[0m
    [32m  ✓[0m[90m y-normal should flip incoming y component and maintain x,z components[0m
    [32m  ✓[0m[90m z-normal should flip incoming z component and maintain x,y components[0m
    [32m  ✓[0m[90m angle of incidence should match angle of reflection[0m
[0m  Random[0m
[0m    p5.prototype.random[0m
[0m      random()[0m
      [32m  ✓[0m[90m should return a number[0m
      [32m  ✓[0m[90m should return a number 0 <= n < 1[0m
      [32m  ✓[0m[90m should return same sequence of numbers[0m
[0m      random(5)[0m
      [32m  ✓[0m[90m should return a number 0 <= n < 5[0m
[0m      random(1, 10)[0m
      [32m  ✓[0m[90m should return a number 1 <= n < 10[0m
[0m      random(["apple", "pear", "orange", "grape"])[0m
      [32m  ✓[0m[90m should return a fruit[0m
[0m    instance mode[0m
    [32m  ✓[0m[90m should be independent[0m
[0m    p5.prototype.randomGaussian[0m
[0m      instance mode[0m
      [32m  ✓[0m[90m should be independent[0m
[0m      randomGaussian(42, 0)[0m
      [32m  ✓[0m[90m should return 42[0m
[0m  Trigonometry[0m
[0m    p5.prototype.angleMode[0m
    [32m  ✓[0m[90m should set constant to DEGREES[0m
    [32m  ✓[0m[90m should set constant to RADIANS[0m
    [32m  ✓[0m[90m wrong param type[0m
    [32m  ✓[0m[90m should return radians[0m
    [32m  ✓[0m[90m should return degrees[0m
    [32m  ✓[0m[90m should always be RADIANS or DEGREES[0m
[0m    p5.prototype.degrees[0m
    [32m  ✓[0m[90m should return the angle in radians when angleMode is DEGREES[0m
    [32m  ✓[0m[90m should return the angle in radians when angleMode is RADIANS[0m
[0m    p5.prototype.radians[0m
    [32m  ✓[0m[90m should return the angle in degrees when angleMode is RADIANS[0m
    [32m  ✓[0m[90m should return the angle in degrees when angleMode is DEGREES[0m
[0m    p5.prototype.asin[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.atan[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.acos[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.sin[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.cos[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.tan[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m    p5.prototype.atan2[0m
    [32m  ✓[0m[90m should handle degrees[0m
    [32m  ✓[0m[90m should handle radians[0m
[0m  Typography Attributes[0m
[0m    p5.prototype.textAlign[0m
    [32m  ✓[0m[90m wrong param at #0[0m
    [32m  ✓[0m[90m wrong param at #1[0m
    [32m  ✓[0m[90m wrong param at #0. vertAlign as #0 param.[0m
    [32m  ✓[0m[90m wrong param at #1. horizAlign as #1 param.[0m
[0m    p5.prototype.textLeading[0m
    [32m  ✓[0m[90m sets and gets the spacing value[0m
    [32m  ✓[0m[90m should work for negative spacing value[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [36m  - wrong param type at #0[0m
[0m    p5.prototype.textSize[0m
    [32m  ✓[0m[90m sets and gets the font size[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [36m  - wrong param type at #0[0m
[0m    p5.prototype.textStyle[0m
    [32m  ✓[0m[90m sets and gets the font style[0m
    [32m  ✓[0m[90m wrong param at #0[0m
[0m    p5.prototype.textWidth[0m
    [32m  ✓[0m[90m should return a number for char input[0m
    [32m  ✓[0m[90m should return a number for string input.[0m
    [32m  ✓[0m[90m should return a number for number input[0m
[0m    p5.prototype.textAscent[0m
    [32m  ✓[0m[90m should return a number[0m
[0m    p5.prototype.textDescent[0m
    [32m  ✓[0m[90m should return a number[0m
[0m    p5.prototype.textWrap[0m
    [32m  ✓[0m[90m should throw error for non-constant input[0m
    [32m  ✓[0m[90m returns textWrap text attribute[0m
[0m  Loading Displaying Fonts[0m
[0m    p5.prototype.loadFont[0m

    [32m  ✓[0m[90m _friendlyFileLoadError is called[0m

    [32m  ✓[0m[90m error prevents sketch continuing[0m[33m (62ms)[0m

    [32m  ✓[0m[90m error callback is called[0m[33m (56ms)[0m
    [32m  ✓[0m[90m loading correctly triggers setup[0m
    [32m  ✓[0m[90m success callback is called[0m[33m (60ms)[0m
    [32m  ✓[0m[90m returns a p5.Font object[0m
    [32m  ✓[0m[90m passes a p5.Font object to success callback[0m
[0m    p5.prototype.textFont[0m
    [32m  ✓[0m[90m sets the current font as Georgia[0m
    [32m  ✓[0m[90m sets the current font as Helvetica[0m
    [32m  ✓[0m[90m sets the current font and text size[0m
[0m  p5.Font[0m
[0m    p5.Font.prototype.textBounds[0m
    [32m  ✓[0m[90m returns a tight bounding box for the given text string[0m
[0m    p5.Font.prototype.textToPoints[0m
    [32m  ✓[0m[90m returns array of points[0m[31m (77ms)[0m
[0m  Array[0m
[0m    p5.prototype.append[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return an array with appended value[0m
[0m    p5.prototype.arrayCopy[0m
    [32m  ✓[0m[90m should be a function[0m
[0m      src, dst[0m
      [32m  ✓[0m[90m should return fully copied array[0m
[0m      src, dst, len[0m
      [32m  ✓[0m[90m should return an array with first 2 elements copied over[0m
      [32m  ✓[0m[90m should return an array with first 4 elements copied over[0m
[0m      src, srcPosition, dst, dstPosition, length[0m
      [32m  ✓[0m[90m should copy src[1 - 2] to dst[0 - 1][0m
      [32m  ✓[0m[90m should copy src[1 - 2] to dst [1 - 2][0m
      [32m  ✓[0m[90m should copy src[3 - 4] to dst[0 - 1][0m
[0m    p5.prototype.concat[0m
    [32m  ✓[0m[90m should concat empty arrays[0m
    [32m  ✓[0m[90m should concat arrays[0m
[0m    p5.prototype.reverse[0m
    [32m  ✓[0m[90m should reverse empty array[0m
    [32m  ✓[0m[90m should reverse array[0m
[0m    p5.prototype.shorten[0m
    [32m  ✓[0m[90m should not have error for shortening empty array[0m
    [32m  ✓[0m[90m should shorten array[0m
[0m    p5.prototype.shuffle[0m
    [32m  ✓[0m[90m should contain all the elements of the original array[0m
[0m    p5.prototype.sort[0m
    [32m  ✓[0m[90m should not have error for sorting empty array[0m
    [32m  ✓[0m[90m should sort alphabetic array lexicographically[0m
    [32m  ✓[0m[90m should sort numerical array from smallest to largest[0m
    [32m  ✓[0m[90m should sort numerical array from smallest to largest for only first 2 elements[0m
[0m    p5.prototype.splice[0m
    [32m  ✓[0m[90m should insert 4 into position 1[0m
    [32m  ✓[0m[90m should splice in array of values[0m
[0m    p5.prototype.subset[0m
    [32m  ✓[0m[90m should get subset from index 1 to end[0m
    [32m  ✓[0m[90m should subset arr[1 - 2][0m
[0m  Conversion[0m
[0m    p5.prototype.float[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert a string to its floating point representation[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return Infinity for Infinity[0m
    [32m  ✓[0m[90m should return -Infinity for -Infinity[0m
    [32m  ✓[0m[90m should return array of floating points and Nan[0m
[0m    p5.prototype.int[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert false to its integer representation i.e. 0[0m
    [32m  ✓[0m[90m should convert true to its integer representation i.e. 1[0m
    [32m  ✓[0m[90m should convert a string to its integer representation[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return Infinity for Infinity[0m
    [32m  ✓[0m[90m should return -Infinity for -Infinity[0m
    [32m  ✓[0m[90m should convert float to its integer representation[0m
    [32m  ✓[0m[90m should return array of integers and NaN[0m
[0m    p5.prototype.str[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert false to string[0m
    [32m  ✓[0m[90m should convert true to string[0m
    [32m  ✓[0m[90m should convert a number to string[0m
    [32m  ✓[0m[90m should return array of strings[0m
[0m    p5.prototype.boolean[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should convert 1 to true[0m
    [32m  ✓[0m[90m should convert a number to true[0m
    [32m  ✓[0m[90m should return true for Infinity[0m
    [32m  ✓[0m[90m should convert 0 to false[0m
    [32m  ✓[0m[90m should convert a string to false[0m
    [32m  ✓[0m[90m should convert a string to false[0m
    [32m  ✓[0m[90m should convert "true" to true[0m
    [32m  ✓[0m[90m should return false for empty string[0m
    [32m  ✓[0m[90m should return array of boolean[0m
[0m    p5.prototype.byte[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return 127 for 127[0m
    [32m  ✓[0m[90m should return -128 for 128[0m
    [32m  ✓[0m[90m should return 23 for 23.4[0m
    [32m  ✓[0m[90m should return 1 for true[0m
    [32m  ✓[0m[90m should return 23 for "23.4"[0m
    [32m  ✓[0m[90m should return NaN for invalid string[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.char[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the char representation of the number[0m
    [32m  ✓[0m[90m should return the char representation of the string[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.unchar[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the integer representation of char[0m
    [32m  ✓[0m[90m should return array of numbers[0m
[0m    p5.prototype.hex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the hex representation of the number[0m
    [32m  ✓[0m[90m should return FFFFFFFF for Infinity[0m
    [32m  ✓[0m[90m should return 00000000 for -Infinity[0m
    [32m  ✓[0m[90m should return array[0m
[0m    p5.prototype.unhex[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return the integer representation of hex[0m
    [32m  ✓[0m[90m should return the NaN for empty string[0m
    [36m  - should return the NaN for invalid hex string[0m
    [32m  ✓[0m[90m should return array of numbers[0m
[0m  String functions[0m
[0m    p5.prototype.join[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return joined string[0m
[0m    p5.prototype.match[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.matchAll[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct array of strings[0m
[0m    p5.prototype.nf[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfc[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfp[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.nfs[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct string[0m
    [32m  ✓[0m[90m should return correct string[0m
[0m    p5.prototype.split[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.splitTokens[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct index of match strings[0m
[0m    p5.prototype.trim[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return correct strings[0m
[0m  time and date[0m
[0m    p5.prototype.year[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this year[0m
[0m    p5.prototype.day[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return todays day[0m
[0m    p5.prototype.month[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return today's month[0m
[0m    p5.prototype.hour[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this hour[0m
[0m    p5.prototype.second[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return this second[0m
[0m    p5.prototype.minute[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m should return a number that is this minute[0m
[0m    p5.prototype.millis[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m result should be a number[0m
    [32m  ✓[0m[90m result should be greater than running time[0m[33m (51ms)[0m
    [32m  ✓[0m[90m result should be > newResult[0m[33m (51ms)[0m
[0m  3D Primitives[0m
[0m    p5.prototype.plane[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height param #1.[0m[31m (210ms)[0m
    [32m  ✓[0m[90m wrong param type at #0[0m[31m (211ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (212ms)[0m
[0m    p5.prototype.box[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0 and #2[0m[31m (209ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height, depth; param #1, #2.[0m[31m (196ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing depth param #2.[0m[31m (202ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (194ms)[0m
[0m    p5.prototype.sphere[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m[31m (233ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (254ms)[0m
[0m    p5.prototype.cylinder[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m[31m (201ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing height; param #1[0m[31m (213ms)[0m
    [36m  - wrong param type at #4[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (216ms)[0m
[0m    p5.prototype.cone[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0 and #1[0m[31m (189ms)[0m

    [32m  ✓[0m[90m no friendly-err-msg. missing height; param #1[0m[31m (199ms)[0m
    [36m  - wrong param type at #4[0m

    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (196ms)[0m
[0m    p5.prototype.ellipsoid[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m wrong param type at #0 and #1[0m[31m (269ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #1 #2[0m[31m (202ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (209ms)[0m
[0m    p5.prototype.torus[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m wrong param type at #0[0m
    [32m  ✓[0m[90m no friendly-err-msg. missing param #1[0m[31m (212ms)[0m
    [32m  ✓[0m[90m no friendly-err-msg. no parameters[0m[31m (223ms)[0m
[0m    p5.RendererGL.prototype.ellipse[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m[31m (208ms)[0m
    [32m  ✓[0m[90m missing param #2[0m[31m (209ms)[0m
    [32m  ✓[0m[90m missing param #2[0m[31m (198ms)[0m
    [32m  ✓[0m[90m wrong param type at #0[0m[31m (209ms)[0m
Cannot apply a stroke to an ellipse with more than 50 detail
    [32m  ✓[0m[90m no friendly-err-msg. detail parameter > 50[0m
[0m    p5.RendererGL.prototype.arc[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m no friendly-err-msg[0m[31m (202ms)[0m
    [32m  ✓[0m[90m missing param #4, #5[0m
    [32m  ✓[0m[90m wrong param type at #0[0m[31m (190ms)[0m
Cannot apply a stroke to an arc with more than 50 detail
    [32m  ✓[0m[90m no friendly-err-msg. detail parameter > 50[0m
    [32m  ✓[0m[90m no friendly-err-msg. default mode[0m[31m (207ms)[0m
[0m  Interaction[0m
[0m    p5.prototype.orbitControl[0m
    [32m  ✓[0m[90m should be a function[0m
    [32m  ✓[0m[90m missing params. no friendly-err-msg[0m
    [32m  ✓[0m[90m wrong param type #0[0m
[0m    p5.prototype.debugMode[0m

    [32m  ✓[0m[90m should be a function[0m

    [32m  ✓[0m[90m missing params. no friendly-err-msg[0m

    [32m  ✓[0m[90m wrong param type #0[0m

    [32m  ✓[0m[90m wrong param type #2[0m

    [32m  ✓[0m[90m wrong param type #2[0m
[0m    p5.prototype.noDebugMode[0m

    [32m  ✓[0m[90m should be a function[0m
[0m  p5.Matrix[0m
[0m    construction[0m
    [32m  ✓[0m[90m new p5.Matrix()[0m
    [32m  ✓[0m[90m new p5.Matrix(array)[0m
    [32m  ✓[0m[90m new p5.Matrix(mat3)[0m
    [32m  ✓[0m[90m identity()[0m
[0m    set[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    get / copy[0m
    [32m  ✓[0m[90m get[0m
    [32m  ✓[0m[90m copy[0m
[0m    mult[0m
    [32m  ✓[0m[90m self[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    apply[0m
    [32m  ✓[0m[90m self[0m
    [32m  ✓[0m[90m p5.Matrix[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    scale[0m
    [32m  ✓[0m[90m p5.Vector[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m    rotate[0m
    [32m  ✓[0m[90m p5.Vector[0m
    [32m  ✓[0m[90m array[0m
    [32m  ✓[0m[90m arguments[0m
[0m  p5.Camera[0m
[0m    createCamera()[0m

    [32m  ✓[0m[90m creates a p5.Camera object[0m

    [32m  ✓[0m[90m createCamera attaches p5.Camera to renderer[0m
[0m    Rotation[0m

    [32m  ✓[0m[90m Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m

    [32m  ✓[0m[90m Pan() with negative parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m

    [32m  ✓[0m[90m Pan(0) sets correct matrix w/o changing eyeXYZ or upXYZ[0m

    [32m  ✓[0m[90m Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ[0m

    [32m  ✓[0m[90m Tilt() with negative parameter sets correct matrix w/o     changing eyeXYZ[0m

    [32m  ✓[0m[90m Tilt(0) sets correct matrix w/o changing eyeXYZ[0m

    [32m  ✓[0m[90m LookAt() should set centerXYZ without changing eyeXYZ or     upXYZ[0m
[0m    Rotation with angleMode(DEGREES)[0m

    [32m  ✓[0m[90m Pan() with positive parameter sets correct matrix w/o changing     eyeXYZ or upXYZ[0m

    [32m  ✓[0m[90m Tilt() with positive parameter sets correct Matrix w/o     changing eyeXYZ[0m
[0m    Position / Orientation[0m

    [32m  ✓[0m[90m Move() with positive parameters sets correct matrix[0m

    [32m  ✓[0m[90m Move() with negative parameters sets correct matrix[0m

    [32m  ✓[0m[90m Move(0,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition() with positive parameters sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition() with negative parameters sets correct matrix[0m

    [32m  ✓[0m[90m SetPosition(0,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(1,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,1,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,0,1) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(-1,0,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,-1,0) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit(0,0,-1) sets correct matrix[0m

    [32m  ✓[0m[90m _orbit() ensures altitude phi <= PI[0m

    [32m  ✓[0m[90m _orbit() ensures altitude phi > 0[0m

    [32m  ✓[0m[90m _orbit() ensures radius > 0[0m
[0m      Camera()[0m

      [32m  ✓[0m[90m Camera() with positive parameters sets eye, center, and       up XYZ properties[0m

      [32m  ✓[0m[90m Camera() with negative parameters sets eye, center, and       up XYZ properties[0m
[0m    Projection[0m
[0m      ortho()[0m

      [32m  ✓[0m[90m ortho() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m ortho() sets projection matrix correctly[0m

      [32m  ✓[0m[90m ortho() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m ortho() with sets cameraType to custom[0m
[0m      perspective()[0m

      [32m  ✓[0m[90m perspective() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m perspective() sets projection matrix correctly[0m

      [32m  ✓[0m[90m perspective() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m perspective() with no parameters sets cameraType to default[0m
[0m      frustum()[0m

      [32m  ✓[0m[90m frustum() sets renderer uPMatrix[0m

      [32m  ✓[0m[90m frustum() sets projection matrix correctly[0m

      [32m  ✓[0m[90m frustum() with no parameters specified (sets default)[0m

      [32m  ✓[0m[90m frustum() sets cameraType to custom[0m
[0m    Helper Functions[0m

    [32m  ✓[0m[90m copy() returns a new p5.Camera object[0m

    [32m  ✓[0m[90m _getLocalAxes() returns three normalized, orthogonal vectors[0m
[0m    RendererGL Current Camera[0m

    [32m  ✓[0m[90m _isActive() returns true for a camera created with createCamera(),     and false for another p5.Camera[0m

    [32m  ✓[0m[90m setCamera() correctly sets RendererGL current camera[0m

    [32m  ✓[0m[90m Camera's Renderer is correctly set after setAttributes[0m
[0m  p5.RendererGL[0m
[0m    createCanvas(w, h, WEBGL)[0m

    [32m  ✓[0m[90m creates a p5.RendererGL renderer[0m
[0m    default stroke shader[0m
    [32m  ✓[0m[90m check activate and deactivating fill and stroke[0m
[0m    push() and pop() work in WEBGL Mode[0m

    [32m  ✓[0m[90m push/pop and translation works as expected in WEBGL Mode[0m

    [32m  ✓[0m[90m push/pop and directionalLight() works[0m

    [32m  ✓[0m[90m push/pop and ambientLight() works[0m

    [32m  ✓[0m[90m push/pop and pointLight() works[0m

    [32m  ✓[0m[90m push/pop and specularColor() works[0m

    [32m  ✓[0m[90m push/pop and spotLight() works[0m

    [32m  ✓[0m[90m push/pop and noLights() works[0m

    [32m  ✓[0m[90m push/pop and texture() works[0m

    [32m  ✓[0m[90m push/pop and shader() works with fill[0m[33m (46ms)[0m

    [32m  ✓[0m[90m push/pop builds/unbuilds stack properly[0m
[0m    loadpixels()[0m

    [32m  ✓[0m[90m loadPixels color check[0m

    [32m  ✓[0m[90m get() singlePixel color and size, with loadPixels[0m
[0m    get()[0m

    [32m  ✓[0m[90m get() size check[0m

    [32m  ✓[0m[90m get() can create p5.Image[0m

    [32m  ✓[0m[90m get() singlePixel color and size[0m
[0m    GL Renderer clear()[0m


    [32m  ✓[0m[90m webgl graphics background draws into webgl canvas[0m[31m (424ms)[0m


    [32m  ✓[0m[90m transparent GL graphics with GL canvas[0m[31m (414ms)[0m


    [32m  ✓[0m[90m clear color with rgba arguments[0m[33m (57ms)[0m


    [32m  ✓[0m[90m semi-transparent GL graphics with GL canvas[0m[31m (391ms)[0m

    [32m  ✓[0m[90m webgl graphics background draws into 2D canvas[0m

    [32m  ✓[0m[90m transparent GL graphics with 2D canvas[0m

    [32m  ✓[0m[90m semi-transparent GL graphics with 2D canvas[0m
[0m    blendMode()[0m

    [32m  ✓[0m[90m blendMode sets _curBlendMode correctly[0m

BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
BURN, OVERLAY, HARD_LIGHT, SOFT_LIGHT, and DODGE only work for blendMode in 2D mode.
    [32m  ✓[0m[90m blendMode doesnt change when mode unavailable in 3D[0m

    [32m  ✓[0m[90m blendModes change pixel colors as expected[0m[31m (531ms)[0m
[0m    BufferDef[0m

    [32m  ✓[0m[90m render buffer properties are correctly set[0m[31m (197ms)[0m
[0m    tint() in WEBGL mode[0m

    [32m  ✓[0m[90m default tint value is set and not null[0m

    [32m  ✓[0m[90m tint value is modified correctly when tint() is called[0m

    [32m  ✓[0m[90m tint should be reset after draw loop[0m[33m (56ms)[0m
[0m    beginShape() in WEBGL mode[0m

    [32m  ✓[0m[90m QUADS mode converts into triangles[0m[31m (218ms)[0m

    [32m  ✓[0m[90m QUADS mode makes edges for quad outlines[0m[31m (205ms)[0m

    [32m  ✓[0m[90m QUAD_STRIP mode makes edges for strip outlines[0m[31m (199ms)[0m
[0m  p5.Shader[0m
[0m    Shader[0m

    [32m  ✓[0m[90m Light Shader[0m

    [32m  ✓[0m[90m Color Shader definition[0m

    [32m  ✓[0m[90m Immediate Mode Shader definition[0m

    [32m  ✓[0m[90m Normal Shader definition[0m

    [32m  ✓[0m[90m Color Shader is set after fill()[0m

    [32m  ✓[0m[90m Normal Shader is set after normalMaterial()[0m

    [32m  ✓[0m[90m Light shader set after ambientMaterial()[0m

    [32m  ✓[0m[90m Light shader set after specularMaterial()[0m

    [32m  ✓[0m[90m Light shader set after emissiveMaterial()[0m

    [32m  ✓[0m[90m Able to setUniform empty arrays[0m

    [32m  ✓[0m[90m Able to set shininess[0m

    [32m  ✓[0m[90m Shader is reset after resetShader is called[0m

    [32m  ✓[0m[90m isTextureShader returns true if there is a sampler[0m

    [32m  ✓[0m[90m isTextureShader returns false if there is no sampler[0m

    [32m  ✓[0m[90m isLightShader returns true if there are lighting uniforms[0m

    [32m  ✓[0m[90m isLightShader returns false if there are no lighting uniforms[0m

    [32m  ✓[0m[90m isNormalShader returns true if there is a normal attribute[0m

    [32m  ✓[0m[90m isNormalShader returns false if there is no normal attribute[0m

    [32m  ✓[0m[90m isStrokeShader returns true if there is a stroke weight uniform[0m

    [32m  ✓[0m[90m isStrokeShader returns false if there is no stroke weight uniform[0m
[0m  p5.Texture[0m
[0m    p5.Texture[0m


    [32m  ✓[0m[90m Create and cache a single texture with p5.Image[0m


    [32m  ✓[0m[90m Create and cache multiple p5.Image textures[0m


    [32m  ✓[0m[90m Set filter mode to linear[0m


    [32m  ✓[0m[90m Set filter mode to nearest[0m


    [32m  ✓[0m[90m Set wrap mode to clamp[0m


    [32m  ✓[0m[90m Set wrap mode to repeat[0m


    [32m  ✓[0m[90m Set wrap mode to mirror[0m


    [32m  ✓[0m[90m Set textureMode to NORMAL[0m


    [32m  ✓[0m[90m Set textureMode to IMAGE[0m


    [32m  ✓[0m[90m Set global wrap mode to clamp[0m


    [32m  ✓[0m[90m Set global wrap mode to repeat[0m


    [32m  ✓[0m[90m Set global wrap mode to mirror[0m
[0m  light[0m
[0m    Light[0m

    [32m  ✓[0m[90m lightFalloff is initialised and set properly[0m

    [32m  ✓[0m[90m specularColor is initialised and set properly[0m

    [32m  ✓[0m[90m noLights works[0m
[0m    spotlight inputs[0m

    [32m  ✓[0m[90m default[0m

    [32m  ✓[0m[90m color,positions,directions[0m

    [32m  ✓[0m[90m color,positions,directions,angle[0m

    [32m  ✓[0m[90m color,positions,directions,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions,angle[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions,angle[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,directions,angle,conc[0m

    [32m  ✓[0m[90m color,p1,p2,p3,directions,angle,conc[0m

    [32m  ✓[0m[90m color,positions,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,directions,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,positions,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m color,p1,p2,p3,r1,r2,r3,angle,conc[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3,angle[0m

    [32m  ✓[0m[90m c1,c2,c3,p1,p2,p3,r1,r2,r3,angle,conc[0m
[0m  Test in preload() with success callback[0m
  [32m  ✓[0m[90m Load asynchronously and use success callback[0m
[0m  setup() after preload() with success callback[0m
  [32m  ✓[0m[90m should be loaded if preload() finished[0m
[0m  setup() after preload() without success callback[0m
  [32m  ✓[0m[90m should be loaded now preload() finished[0m
[0m  Test in preload() with success callback[0m
  [32m  ✓[0m[90m Load asynchronously and use success callback[0m
[0m  setup() after preload() with success callback[0m
  [32m  ✓[0m[90m should be loaded if preload() finished[0m
  [32m  ✓[0m[90m gifProperties should be correct after preload[0m
  [32m  ✓[0m[90m should be able to modify gifProperties state[0m
[36m [0m[36m 10 pending[0m
[92m [0m[32m 1596 passing[0m[90m (34s)[0m

Running "mochaTest:test" (mochaTest) task


  helpers/modeAdjust
    ✓ should set mode to corner
    ✓ should set mode to corners
    ✓ should set mode to radius
    ✓ should set mode to center

  docs preprocessor
    mergeOverloadedMethods()
      ✓ should merge methods with the same name
      ✓ should not merge methods from different classes
      ✓ should not merge properties
    renderDescriptionsAsMarkdown
      ✓ should work


  8 passing (41ms)


Running "nyc:report" (nyc) task

=============================== Coverage summary ===============================
Statements   : 68.74% ( 8421/12251 )
Branches     : 57.39% ( 3239/5644 )
Functions    : 73.47% ( 903/1229 )
Lines        : 69.28% ( 8227/11875 )
================================================================================
Handlebars: Access has been denied to resolve the property "statements" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "branches" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "functions" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details
Handlebars: Access has been denied to resolve the property "lines" because it is not an "own property" of its parent.
You can add a runtime option to disable the check or this warning:
See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details

Done.
+ cd /testbed
+ git config --global --add safe.directory /testbed
+ cd /testbed
+ git checkout c9fb107b94ffa5f2b905509a0407588b85476b02 test/manual-test-examples/webgl/geometryImmediate/sketch.js test/unit/webgl/p5.RendererGL.js
Updated 1 path from fe0196f8
+ git apply --verbose --reject -
Checking patch test/manual-test-examples/webgl/geometryImmediate/sketch.js...
Checking patch test/unit/webgl/p5.RendererGL.js...
Applied patch test/manual-test-examples/webgl/geometryImmediate/sketch.js cleanly.
Applied patch test/unit/webgl/p5.RendererGL.js cleanly.
+ : '>>>>> Start Test Output'
+ sed -i 's/concurrency:[[:space:]]*[0-9][0-9]*/concurrency: 1/g' Gruntfile.js
+ stdbuf -o 1M ./node_modules/.bin/grunt test --quiet --force
Browserslist: caniuse-lite is outdated. Please run:
npx browserslist@latest --update-db

Why you should do it regularly:
https://github.com/browserslist/browserslist#browsers-data-updating
=============================================
simple-git has supported promises / async await since version 2.6.0.
 Importing from 'simple-git/promise' has been deprecated and will be
 removed by July 2022.

To upgrade, change all 'simple-git/promise' imports to just 'simple-git'
=============================================
+ : '>>>>> End Test Output'
+ git checkout c9fb107b94ffa5f2b905509a0407588b85476b02 test/manual-test-examples/webgl/geometryImmediate/sketch.js test/unit/webgl/p5.RendererGL.js
Updated 2 paths from fe0196f8
