import { SeqNode, GenericSeqNode, CharSeqNode, generateCharSeqNodes } from "../src/SeqNode"; import { SimilarityFunction } from "../src/types"; describe("CharSeqNode", function () { it("CharSeqNode constructor", function () { const charSeqNode = new CharSeqNode("A") const charSeqNode2 = new CharSeqNode("B", 2) expect(charSeqNode.transTime).toBeUndefined() expect(charSeqNode2.transTime).toBe(2) }) it("generates a list of CharSeqNode from a string", function () { const nodes: CharSeqNode[] = generateCharSeqNodes("TGAC") expect(nodes.map((node: CharSeqNode) => node.label)).toStrictEqual(["T", "G", "A", "C"]) const nodesWithTransTime: CharSeqNode[] = generateCharSeqNodes("TG", [4, 3]) expect(nodesWithTransTime.map((node: CharSeqNode) => [node.label, node.transTime])). toStrictEqual([["T", 4], ["G", 3]]) }) }) describe("Sequence Node", function () { it("creates a sequence node", function () { const node = new SeqNode('mylabel', [0, 1, 2]) expect(node.label).toEqual('mylabel') expect(node.featureVector).toEqual([0,1,2]) expect(node.transTime).toEqual(0) }); it("computes euclidean distance to another sequence node", function () { const node = new SeqNode('mylabel', [0, 0, 1]) const node2 = new SeqNode('mylabel', [0, 0, 1]) expect(node.computeSimilarity(node2)).toEqual(1) node2.featureVector = [0,0,0] expect(node.computeSimilarity(node2)).toEqual(0.5) }) it("calculates Minkowski distance to another sequence node", function () { const node = new SeqNode('mylabel', [0, 0, 1]) const node2 = new SeqNode('mylabel', [0, 0, 1]) expect(node.computeSimilarity(node2, SimilarityFunction.Minkowski)).toEqual(1) node2.featureVector = [0,1,0] expect(node.computeSimilarity(node2, SimilarityFunction.Minkowski)).toEqual(1/3) }) it("calculates a temporal penalty", function () { const node = new GenericSeqNode('mylabel,', 0) const penalty = node.computeTemporalPenalty(10, 20) expect(penalty).toEqual(0.125) }) });