peaks-similarity
Version:
Peaks similarity - calculate the similarity between 2 ordered arrays of peaks
312 lines (290 loc) • 6.02 kB
JavaScript
import { it, expect, test } from 'vitest';
import { Comparator } from '..';
test('We check that array of points are not converted and are normalized', () => {
const comparator = new Comparator();
comparator.setPeaks1([
[],
[],
]);
comparator.setPeaks2([
[],
[],
]);
expect(comparator.getExtract1()).toStrictEqual([
[],
[],
]);
expect(comparator.getExtract2()).toStrictEqual([
[],
[],
]);
});
test('We check that [[x1,x2,x3,...],[y1,y2,y3,...]] is converted and normalized', () => {
const comparator = new Comparator({});
comparator.setPeaks1([
[],
[],
]);
comparator.setPeaks2([
[],
[],
]);
expect(comparator.getExtract1()).toStrictEqual([
[],
[],
]);
expect(comparator.getExtract2()).toStrictEqual([
[],
[],
]);
});
test('We check that from / to options works', () => {
const comparator = new Comparator({ from: 1, to: 2 });
comparator.setPeaks1([
[],
[],
]);
comparator.setPeaks2([
[],
[],
]);
expect(comparator.getExtract1()).toStrictEqual([
[],
[],
]);
expect(comparator.getExtract2()).toStrictEqual([[2], [1]]);
});
test('We check that from / to options works and can be changed', () => {
const comparator = new Comparator();
comparator.setPeaks1([
[],
[],
]);
comparator.setPeaks2([
[],
[],
]);
comparator.setFromTo(1, 2);
expect(comparator.getExtract1()).toStrictEqual([
[],
[],
]);
expect(comparator.getExtract2()).toStrictEqual([[2], [1]]);
});
test('We check that we can change the peaks', () => {
const comparator = new Comparator();
comparator.setPeaks1([[1], [2]]);
comparator.setPeaks2([
[],
[],
]);
comparator.setFromTo(1, 2);
comparator.setPeaks1([
[],
[],
]);
expect(comparator.getExtract1()).toStrictEqual([
[],
[],
]);
expect(comparator.getExtract2()).toStrictEqual([[2], [1]]);
});
test('We check similarity of identical spectra', () => {
const comparator = new Comparator();
comparator.setTrapezoid(0.2, 0.2);
comparator.setPeaks1([
[],
[],
]);
comparator.setPeaks2([
[],
[],
]);
const similarity = comparator.getSimilarity();
expect(similarity.similarity).toBe(1);
expect(similarity.extractInfo1.sum).toBe(5);
expect(similarity.extractInfo1.min).toBe(2);
expect(similarity.extractInfo1.max).toBe(3);
});
test('We check similarity without overlap', () => {
const comparator = new Comparator();
comparator.setTrapezoid(0.2, 0.2);
it('getSimilarity', () => {
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0.5);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0);
});
});
test('We check similarity with overlap', () => {
const comparator = new Comparator();
comparator.setTrapezoid(2, 2);
it('getSimilarity', () => {
expect(
comparator.getSimilarity(
[
[],
[],
],
[[1, 1]],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0.5);
});
});
test('We check similarity with overlap of trapezoid', () => {
const comparator = new Comparator();
comparator.setTrapezoid(4, 2);
it('getSimilarity', () => {
expect(
comparator.getSimilarity(
[
[],
[],
],
[[1, 1]],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[[1, 1]],
[
[],
[],
],
).similarity,
).toBe(1);
expect(comparator.getSimilarity([[1, 1]], [[4, 1]]).similarity).toBe(0.0);
expect(
comparator.getSimilarity(
[[1, 1]],
[
[],
[],
],
).similarity,
).toBe(0.5);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0.5);
expect(comparator.getSimilarity([[1, 1]], [[2.5, 1]]).similarity).toBe(0.5);
expect(
comparator.getSimilarity(
[
[],
[],
],
[[2.5, 1]],
).similarity,
).toBe(1);
expect(
comparator.getSimilarity(
[
[],
[],
],
[[2.5, 1]],
).similarity,
).toBe(0.75);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0.75);
expect(
comparator.getSimilarity(
[
[],
[],
],
[
[],
[],
],
).similarity,
).toBe(0.625);
});
});