word2vector-json-ts
Version:
TypeScript library for processing Word2Vec output vectors in JSON format.
84 lines (72 loc) • 2.82 kB
text/typescript
import { Vector } from '../src/Vector';
import { getCosSimilarity } from '../src/utils/getCosSimilarity';
describe('getCosSimilarity', () => {
it('should calculate cosine similarity for two valid vectors', () => {
const vector1 = new Vector([1, 2, 3]);
const vector2 = new Vector([4, 5, 6]);
const similarity = getCosSimilarity(vector1, vector2);
expect(similarity.toFixed(10)).toBe((0.9746318462).toFixed(10));
});
it('should return 1 for identical vectors', () => {
const vector1 = new Vector([1, 2, 3]);
const vector2 = new Vector([1, 2, 3]);
const similarity = getCosSimilarity(vector1, vector2);
expect(similarity).toBe(1);
});
it('should return 0 for orthogonal vectors', () => {
const vector1 = new Vector([1, 0]);
const vector2 = new Vector([0, 1]);
const similarity = getCosSimilarity(vector1, vector2);
expect(similarity).toBe(0);
});
describe('Errors', () => {
it('should throw an error if first vector has a different dimension than second', () => {
const vector1 = new Vector([1, 2, 3]);
const vector2 = new Vector([4, 5]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
it('should throw an error if second vector has a different dimension than first', () => {
const vector1 = new Vector([1, 2, 3]);
const vector2 = new Vector([4, 5]);
expect(
() => getCosSimilarity(vector2, vector1)).toThrow();
});
it('should throw an error if the first of the vectors is a zero vector', () => {
const vector1 = new Vector([0, 0, 0]);
const vector2 = new Vector([1, 2, 3]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
it('should throw an error if the second of the vectors is a zero vector', () => {
const vector1 = new Vector([0, 0, 0]);
const vector2 = new Vector([1, 2, 3]);
expect(
() => getCosSimilarity(vector2, vector1)).toThrow();
});
it('should throw an error if inputs are not of type Vector', () => {
const vector1 = [1, 2, 3] as unknown as Vector;
const vector2 = new Vector([4, 5, 6]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
it('should throw an error if vectors are empty', () => {
const vector1 = new Vector([]);
const vector2 = new Vector([]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
it('should throw an error if the first vector has a magnitude of 0', () => {
const vector1 = new Vector([0, 0, 0]);
const vector2 = new Vector([1, 2, 3]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
it('should throw an error if the second vector has a magnitude of 0', () => {
const vector1 = new Vector([1, 2, 3]);
const vector2 = new Vector([0, 0, 0]);
expect(
() => getCosSimilarity(vector1, vector2)).toThrow();
});
});
});