Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit 240bd04

Browse files
committed
kmeans: add unit test for justadudewhohacks#379
1 parent d30605a commit 240bd04

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

test/tests/core/core.test.js

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,24 @@ describe('core', () => {
8181

8282
describe('kmeans', () => {
8383
funcShouldRequireArgs(() => cv.kmeans());
84-
const points = [
84+
const points2 = [
8585
[0, 0], [1000, 900], [-1000, -900], [-1100, -1000], [1100, 1000], [10, 10]
8686
].map(([x, y]) => new cv.Point(x, y));
87+
8788
const k = 3;
8889
const termCriteria = new cv.TermCriteria(cv.termCriteria.COUNT, 100, 0.8);
8990
const attempts = 10;
9091
const flags = cv.KMEANS_RANDOM_CENTERS;
9192

9293
it('should return labels and centers', () => {
93-
const ret = cv.kmeans(points, k, termCriteria, attempts, flags);
94+
const ret = cv.kmeans(points2, k, termCriteria, attempts, flags);
9495

9596
expect(ret).to.have.property('labels').to.be.an('array').lengthOf(6);
9697
expect(ret).to.have.property('centers').to.be.an('array').lengthOf(k);
9798
});
9899

99100
it('should return correct labels', () => {
100-
const ret = cv.kmeans(points, k, termCriteria, attempts, flags);
101+
const ret = cv.kmeans(points2, k, termCriteria, attempts, flags);
101102

102103
const l0 = ret.labels[0];
103104
const l1 = ret.labels[1];
@@ -106,7 +107,7 @@ describe('core', () => {
106107
});
107108

108109
it('should return correct centers', () => {
109-
const ret = cv.kmeans(points, k, termCriteria, attempts, flags);
110+
const ret = cv.kmeans(points2, k, termCriteria, attempts, flags);
110111

111112
const l0 = ret.labels[0];
112113
const l1 = ret.labels[1];
@@ -118,8 +119,30 @@ describe('core', () => {
118119
expect(ret.centers[l2].x).to.equal(-1050);
119120
expect(ret.centers[l2].y).to.equal(-950);
120121
});
121-
});
122+
123+
// related to https://github.com/justadudewhohacks/opencv4nodejs/issues/379
124+
const points3 = [
125+
[255, 0, 0], [255, 0, 0], [255, 0, 255], [255, 0, 255], [255, 255, 255]
126+
].map(([r, g, b]) => new cv.Vec3(r, g, b));
127+
128+
it('should return correct centers with Vec3', () => {
129+
const ret = cv.kmeans(points3, k, termCriteria, attempts, flags);
122130

131+
const l0 = ret.labels[0];
132+
const l1 = ret.labels[1];
133+
const l2 = ret.labels[2];
134+
expect(ret.centers[l0].x).to.equal(255);
135+
expect(ret.centers[l0].y).to.equal(0);
136+
expect(ret.centers[l0].z).to.equal(0);
137+
expect(ret.centers[l1].x).to.equal(255);
138+
expect(ret.centers[l1].y).to.equal(0);
139+
expect(ret.centers[l1].z).to.equal(255);
140+
expect(ret.centers[l2].x).to.equal(255);
141+
expect(ret.centers[l2].y).to.equal(255);
142+
expect(ret.centers[l2].y).to.equal(255);
143+
});
144+
});
145+
123146
describe('cartToPolar', () => {
124147
const x = new cv.Mat([[0, 1, 100]], cv.CV_32F);
125148
const y = new cv.Mat([[0, 1, 100]], cv.CV_32F);

0 commit comments

Comments
 (0)