tests_image_labeling.test.js

import {Size} from '../../src/image/size.js';
import {LabelingFilter} from '../../src/image/labelingFilter.js';
import {generateWorkerMessage} from '../../src/image/labelingThread.js';

/**
 * Tests for the 'image/LabelingFilter.js' file.
 */

/* global QUnit */
QUnit.module('image');

/**
 * Tests for {@link LabelingFilter}.
 *
 * @function module:tests/image~LabelingFilter-class
 */
QUnit.test('LabelingFilter class', function (assert) {
  const labelingFilter = new LabelingFilter();

  // Basic labels
  const imgSize0 = new Size([3, 3, 2]);
  /* eslint-disable @stylistic/js/array-element-newline */
  const imgBuffer0 = new Uint8Array([
    0, 0, 0,
    0, 1, 1,
    0, 1, 1,
    0, 0, 0,
    0, 1, 1,
    0, 1, 1,
  ]);
  /* eslint-enable @stylistic/js/array-element-newline */

  const imgEvent0 = generateWorkerMessage(imgBuffer0, imgSize0);
  const labels0 = labelingFilter.run(imgEvent0);

  assert.notStrictEqual(
    typeof labels0,
    'undefined',
    'Expected labels returned for basic label'
  );
  assert.equal(
    labels0.length,
    1,
    'Expected number of labels for basic label'
  );
  assert.equal(
    labels0[0].id,
    1,
    'Expected id #1 for basic label'
  );
  assert.equal(
    labels0[0].count,
    8,
    'Expected id #1 count for basic label'
  );
  assert.deepEqual(
    labels0[0].centroidIndex,
    [1.5, 1.5, 0.5],
    'Expected id #1 centroidIndex for basic label'
  );

  // Touching labels of different ids
  const imgSize1 = new Size([3, 3, 2]);
  /* eslint-disable @stylistic/js/array-element-newline */
  const imgBuffer1 = new Uint8Array([
    2, 2, 2,
    3, 1, 1,
    3, 1, 1,
    2, 2, 2,
    3, 1, 1,
    3, 1, 1,
  ]);
  /* eslint-enable @stylistic/js/array-element-newline */

  const imgEvent1 = generateWorkerMessage(imgBuffer1, imgSize1);
  const labels1 = labelingFilter.run(imgEvent1);

  assert.notStrictEqual(
    typeof labels1,
    'undefined',
    'Expected labels returned for multiple labels'
  );
  assert.equal(
    labels1.length,
    3,
    'Expected number of labels for multiple labels'
  );

  assert.equal(
    labels1[0].id,
    2,
    'Expected id #2 for multiple labels'
  );
  assert.equal(
    labels1[0].count,
    6,
    'Expected id #2 count for multiple labels'
  );
  assert.deepEqual(
    labels1[0].centroidIndex,
    [1, 0, 0.5],
    'Expected id #2 centroidIndex for multiple labels'
  );

  assert.equal(
    labels1[1].id,
    3,
    'Expected id #3 for multiple labels'
  );
  assert.equal(
    labels1[1].count,
    4,
    'Expected id #3 count for multiple labels'
  );
  assert.deepEqual(
    labels1[1].centroidIndex,
    [0, 1.5, 0.5],
    'Expected id #3 centroidIndex for multiple labels'
  );

  assert.equal(
    labels1[2].id,
    1,
    'Expected id #1 for multiple labels'
  );
  assert.equal(
    labels1[2].count,
    8,
    'Expected id #1 count for multiple labels'
  );
  assert.deepEqual(
    labels1[2].centroidIndex,
    [1.5, 1.5, 0.5],
    'Expected id #1 centroidIndex for multiple labels'
  );

});