'use strict' var pxls = require('./') var Ndarray = require('ndarray') var t = require('tape') var zeros = require('ndarray-scratch').zeros var isBrowser = require('is-browser') t('4-channel array', t => { t.deepEqual(pxls([0,0,0,1, 1,1,1,1]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([[0,0,0,1], [1,1,1,1]]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([[[0,0,0,1], [1,1,1,1]]]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([[0,0,0,1, 1,1,1,1]]), [0,0,0,255, 255,255,255,255]) t.end() }) t('3-channel array', t => { t.deepEqual(pxls([0,0,1, 1,1,1], 3), [0,0,255,255, 255,255,255,255]) t.deepEqual(pxls([[0,0,0,1], [1,1,1,1]]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([[[0,0,0,1], [1,1,1,1]]]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([[0,0,0,1, 1,1,1,1]]), [0,0,0,255, 255,255,255,255]) t.end() }) t('1-channel array', t => { t.deepEqual(pxls([0,1], 1), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([0,.5], 1), [0,0,0,255, 127,127,127,255]) t.deepEqual(pxls([0,255], 1), [0,0,0,255, 255,255,255,255]) t.end() }) t('shapes', t => { t.deepEqual(pxls([0,0,0,1, 1,1,1,1], [1,1]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([0,0,0, 1,1,1, 1,1,0], [3,1]), [0,0,0,255, 255,255,255,255, 255,255,0,255]) t.deepEqual(pxls([0,0,0, 1,1,1, 1,1,0], [1,3]), [0,0,0,255, 255,255,255,255, 255,255,0,255]) t.end() }) t('4-channel ndarray', t => { var x = zeros([5, 3]) t.deepEqual(pxls(x), [ 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255 ]) t.end() }) t('3-channel ndarray', t => { var x = zeros([3, 5, 3]) t.deepEqual(pxls(x), [ 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255 ]) t.end() }) t('1-channel ndarray', t => { var x = zeros([3, 5, 1]) t.deepEqual(pxls(x), [ 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255 ]) t.end() }) t('ImageData or alike', t => { var data if (isBrowser) { data = document.createElement('canvas').getContext('2d').createImageData(3,5) } else { data = { data: new Uint8ClampedArray(3 * 5 * 4), width: 3, height: 5 } } t.deepEqual(pxls(data), [ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ]) t.end() }) t('DOM containers', t => { if (!isBrowser) return t.end() var context = document.createElement('canvas').getContext('2d') context.canvas.width = 3 context.canvas.height = 5 var fix = [ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ] context.canvas.toBlob(async function (blob) { let file = new File([blob], 'x.png') let bmpromise = createImageBitmap(blob) let bm = await bmpromise let canvas = context.canvas let idata = context.getImageData(0,0,canvas.width,canvas.height) t.deepEqual(pxls(idata), fix) t.deepEqual(pxls(idata.data), fix) t.deepEqual(pxls(canvas), fix) t.deepEqual(pxls(context), fix) t.deepEqual(pxls(bm), fix) let im = new Image() im.src = canvas.toDataURL() im.onload = function () { t.deepEqual(pxls(im), fix) t.end() } }) }) t('playing aroung', t => { t.deepEqual(pxls([0,0,0,0,1,1,1,1]), [0,0,0,0,255,255,255,255]) t.deepEqual(pxls([0,0,0,0,255,255,255,255]), [0,0,0,0,255,255,255,255]) t.deepEqual(pxls([0,255],1), [0,0,0,255,255,255,255,255]) // bad step t.deepEqual(pxls([0,0,1,1,0,0,1,1], 2), [0,0,255,255, 0,0,255,255]) t.end() }) t('readme', t => { t.deepEqual(pxls([[0,0,0], [1,1,1]]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([0, 1], 1), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls([0,0,0, 1,1,1], [2,1]), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls(new Ndarray([0,1], [2,1])), [0,0,0,255, 255,255,255,255]) t.deepEqual(pxls(new Ndarray([0,0,0,1,1,1], [2,1,3])), [0,0,0,255, 255,255,255,255]) t.end() }) t('arraybuffer, buffer', t => { var b = new Uint8Array([0,0,0,1,0,0,0,1]) t.deepEqual(b, [0,0,0,1,0,0,0,1]) t.deepEqual(pxls(b.buffer), [0,0,0,1,0,0,0,1]) t.deepEqual(pxls(Buffer.from(b.buffer)), [0,0,0,1,0,0,0,1]) t.end() }) t('float array', t => { var arr = new Float32Array([0,0,1,1]) t.deepEqual(pxls(arr), [0,0,255,255]) t.end() }) t('regl')