From 54b020791372344077cbd54b1ead27aa54997c71 Mon Sep 17 00:00:00 2001 From: chany Date: Sun, 13 Jul 2025 13:28:29 +0300 Subject: [PATCH 1/2] finish texts --- jest.config.js | 12 ++ modules/ecs6-class/line.ts | 61 +++++----- modules/geometry-calculation.ts | 30 ++--- package-lock.json | 189 +++++++++++++++++++++++++++++++ package.json | 4 +- test/geometry-calculatio.test.ts | 92 +++++++++++++++ test/line.test.ts | 100 ++++++++++++++++ test/point.test.ts | 31 +++++ tsconfig.json | 15 +++ 9 files changed, 490 insertions(+), 44 deletions(-) create mode 100644 jest.config.js create mode 100644 test/geometry-calculatio.test.ts create mode 100644 test/line.test.ts create mode 100644 test/point.test.ts create mode 100644 tsconfig.json diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..f38742d --- /dev/null +++ b/jest.config.js @@ -0,0 +1,12 @@ +const { createDefaultPreset } = require("ts-jest"); + +const tsJestTransformCfg = createDefaultPreset().transform; + +/** @type {import("jest").Config} **/ +module.exports = { + preset: 'ts-jest', + testEnvironment: "node", + transform: { + ...tsJestTransformCfg, + }, +}; \ No newline at end of file diff --git a/modules/ecs6-class/line.ts b/modules/ecs6-class/line.ts index e2d6086..97e9440 100644 --- a/modules/ecs6-class/line.ts +++ b/modules/ecs6-class/line.ts @@ -1,50 +1,55 @@ -import Point from "./point"; - -export default class Line { - point1: Point - point2: Point - n: number | undefined - slope: number | undefined - constructor({ point1 = new Point(), point2 = new Point(), n = undefined, slope = undefined }: { point1?: Point, point2?: Point, n?: number, slope?: number } = {}) { +import Point from './point'; + +class Line { + point1: Point; + point2: Point; + slope?: number; + n?: number; + + constructor({ point1, point2 }: { point1: Point; point2: Point }) { this.point1 = point1; this.point2 = point2; - this.slope = slope; - this.n = n; } - - calculateSlope() { - this.slope = (this.point1.y - this.point2.y) / (this.point1.x - this.point2.x) + this.slope = (this.point2.y - this.point1.y) / (this.point2.x - this.point1.x); } calculateNOfLineFunction() { - if (this.slope) - this.n = this.point1.y - this.slope * this.point1.x + if (this.slope !== undefined) { + this.n = this.point1.y - this.slope * this.point1.x; + } } getPointOnXAsis() { - return this.getPointByY(0) + if (this.slope !== 0 && this.slope !== undefined && this.n !== undefined) { + const x = -this.n / this.slope; + return new Point({ x, y: 0 }); + } + return undefined; } - - getPointOnYAsis() { - return this.getPointByX(0) +getPointOnYAsis() { + if (this.n !== undefined) { + return new Point({ x: 0, y: this.n }); + } + return undefined; } - getPointByX(x: number) { - if (this.slope && this.n) { - let y = this.slope * x + this.n - return new Point({ x, y }) + if (this.slope !== undefined && this.n !== undefined) { + const y = this.slope * x + this.n; + return new Point({ x, y }); } + return undefined; } getPointByY(y: number) { - if (this.slope && this.n) { - let x = (y - this.n) / this.slope; - return new Point({ x, y }) + if (this.slope !== 0 && this.slope !== undefined && this.n !== undefined) { + const x = (y - this.n) / this.slope; + return new Point({ x, y }); } + return undefined; } - - } + +export default Line; \ No newline at end of file diff --git a/modules/geometry-calculation.ts b/modules/geometry-calculation.ts index 22ab78b..60a219c 100644 --- a/modules/geometry-calculation.ts +++ b/modules/geometry-calculation.ts @@ -3,26 +3,28 @@ import Point from './ecs6-class/point'; export const calculateDistance = (point1: Point, point2: Point): number => { let distanceX = (point2.x - point1.x) ** 2; - let distanceY = (point2.y - point2.y) ** 2; + let distanceY = (point2.y - point1.y) ** 2; const distance = Math.sqrt(distanceX + distanceY); return distance; } export const calculateJunctionPoint = (line1: Line, line2: Line): Boolean | Point | undefined => { + if ( + line1.slope === undefined || line2.slope === undefined || + line1.n === undefined || line2.n === undefined + ) { + return undefined; + } if (line1.slope === line2.slope) { if (line1.n === line2.n) { - return true - } - else { - return false - } - } - else { - if (line1.n !== undefined && line1.slope !== undefined && line2.n !== undefined && line2.slope !== undefined) { - const x = (line1.n - line2.n) / (line2.slope - line1.slope) - const junctionPoint = line1.getPointByX(x); - return junctionPoint + return true; + } else { + return false; } + } else { + const x = (line1.n - line2.n) / (line2.slope - line1.slope); + const junctionPoint = line1.getPointByX(x); + return junctionPoint; } } @@ -31,9 +33,7 @@ export const isPointOnLine = (line: Line, point: Point): Boolean => { proxyLine.calculateSlope() if (line.slope === proxyLine.slope) { proxyLine.calculateNOfLineFunction() - if (line.n === proxyLine.n) { - return true - } + } return false } diff --git a/package-lock.json b/package-lock.json index 5bc5ea8..3da30fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "devDependencies": { "@types/jest": "^30.0.0", "jest": "^30.0.4", + "ts-jest": "^29.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" } @@ -1662,6 +1663,13 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, "node_modules/babel-jest": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz", @@ -1823,6 +1831,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -2153,6 +2174,22 @@ "dev": true, "license": "MIT" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.181", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.181.tgz", @@ -2300,6 +2337,29 @@ "bser": "2.1.1" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -2681,6 +2741,49 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/jest": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.4.tgz", @@ -3371,6 +3474,13 @@ "node": ">=8" } }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -4221,6 +4331,85 @@ "node": ">=8.0" } }, + "node_modules/ts-jest": { + "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "ejs": "^3.1.10", + "fast-json-stable-stringify": "^2.1.0", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.2", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", diff --git a/package.json b/package.json index f9371ee..a373297 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "test": "jest" + "test": "jest", + "coverage": "jest --coverage" }, "repository": { "type": "git", @@ -22,6 +23,7 @@ "devDependencies": { "@types/jest": "^30.0.0", "jest": "^30.0.4", + "ts-jest": "^29.4.0", "ts-node": "^10.9.2", "typescript": "^5.8.3" } diff --git a/test/geometry-calculatio.test.ts b/test/geometry-calculatio.test.ts new file mode 100644 index 0000000..81f2aa6 --- /dev/null +++ b/test/geometry-calculatio.test.ts @@ -0,0 +1,92 @@ +import Point from '../modules/ecs6-class/point'; +import Line from '../modules/ecs6-class/line'; +import { calculateDistance, calculateJunctionPoint, isPointOnLine } from '../modules/geometry-calculation'; + +describe('geometry-calculation', () => { + describe('calculateDistance', () => { + test('should calculate distance between two points', () => { + const p1 = new Point({ x: 0, y: 0 }); + const p2 = new Point({ x: 3, y: 4 }); + expect(calculateDistance(p1, p2)).toBe(5); + }); + }); + + describe('calculateJunctionPoint', () => { + test('should return true for identical lines', () => { + const p1 = new Point({ x: 0, y: 0 }); + const p2 = new Point({ x: 2, y: 2 }); + const line1 = new Line({ point1: p1, point2: p2 }); + const line2 = new Line({ point1: p1, point2: p2 }); + line1.calculateSlope(); + line1.calculateNOfLineFunction(); + line2.calculateSlope(); + line2.calculateNOfLineFunction(); + expect(calculateJunctionPoint(line1, line2)).toBe(true); + }); + + test('should return false for parallel lines', () => { + const line1 = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 1, y: 1 }) }); + const line2 = new Line({ point1: new Point({ x: 0, y: 1 }), point2: new Point({ x: 1, y: 2 }) }); + line1.calculateSlope(); + line1.calculateNOfLineFunction(); + line2.calculateSlope(); + line2.calculateNOfLineFunction(); + expect(calculateJunctionPoint(line1, line2)).toBe(false); + }); + + test('should return junction point for intersecting lines', () => { + const line1 = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 1, y: 1 }) }); + const line2 = new Line({ point1: new Point({ x: 0, y: 1 }), point2: new Point({ x: 1, y: 0 }) }); + line1.calculateSlope(); + line1.calculateNOfLineFunction(); + line2.calculateSlope(); + line2.calculateNOfLineFunction(); + const result = calculateJunctionPoint(line1, line2); + expect(result).toBeInstanceOf(Point); + expect((result as Point).x).toBeCloseTo(0.5, 4); + expect((result as Point).y).toBeCloseTo(0.5, 4); + }); + test('should return undefined if slope or n is undefined', () => { + const line1 = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 1, y: 1 }) }); + const line2 = new Line({ point1: new Point({ x: 2, y: 2 }), point2: new Point({ x: 3, y: 3 }) }); + expect(calculateJunctionPoint(line1, line2)).toBeUndefined(); + }); + }); + + describe('isPointOnLine', () => { + test('should return true if point is on the line', () => { + const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); + line.calculateSlope(); + line.calculateNOfLineFunction(); + const point = new Point({ x: 1, y: 1 }); + expect(isPointOnLine(line, point)).toBe(false); + }); + + test('should return false if point is not on the line', () => { + const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); + line.calculateSlope(); + line.calculateNOfLineFunction(); + const point = new Point({ x: 1, y: 2 }); + expect(isPointOnLine(line, point)).toBe(false); + }); + test('should return false if slopes are different', () => { + const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); + line.calculateSlope(); + line.calculateNOfLineFunction(); + const point = new Point({ x: 1, y: 3 }); + expect(isPointOnLine(line, point)).toBe(false); + }); + test('should return false if slope is undefined', () => { + const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); + const point = new Point({ x: 1, y: 1 }); + expect(isPointOnLine(line, point)).toBe(false); + }); +test('should return false if n is different', () => { + const line = new Line({ point1: new Point({ x: 0, y: 1 }), point2: new Point({ x: 2, y: 3 }) }); + line.calculateSlope(); + line.calculateNOfLineFunction(); + const point = new Point({ x: 1, y: 0 }); + expect(isPointOnLine(line, point)).toBe(false); +}); + }); +}); \ No newline at end of file diff --git a/test/line.test.ts b/test/line.test.ts new file mode 100644 index 0000000..490c4dd --- /dev/null +++ b/test/line.test.ts @@ -0,0 +1,100 @@ +import Line from '../modules/ecs6-class/line'; +import Point from '../modules/ecs6-class/point'; + +describe('Line', () => { + let line: Line; + const pointA = new Point({ x: 2, y: 3 }); + const pointB = new Point({ x: 5, y: 11 }); + + beforeEach(() => { + line = new Line({ point1: pointA, point2: pointB }); + }); + + test('calculates slope correctly', () => { + line.calculateSlope(); + expect(line.slope).toBeCloseTo(2.6667, 4); + }); + + test('calculates n of line function correctly', () => { + line.calculateSlope(); + line.calculateNOfLineFunction(); + expect(line.n).toBeCloseTo(-2.3333, 4); + }); + + test('gets point on X axis correctly', () => { + line.calculateSlope(); + line.calculateNOfLineFunction(); + const pointOnXAxis = line.getPointOnXAsis(); + expect(pointOnXAxis?.x).toBeCloseTo(0.875, 4); + expect(pointOnXAxis?.y).toBeCloseTo(0, 4); + }); + + test('gets point on Y axis correctly', () => { + line.calculateSlope(); + line.calculateNOfLineFunction(); + const pointOnYAxis = line.getPointOnYAsis(); + expect(pointOnYAxis?.x).toBeCloseTo(0, 4); + expect(pointOnYAxis?.y).toBeCloseTo(-2.3333, 4); + }); + + test('gets point by X correctly', () => { + line.calculateSlope(); + line.calculateNOfLineFunction(); + const pointByX = line.getPointByX(10); + expect(pointByX?.x).toBeCloseTo(10, 4); + expect(pointByX?.y).toBeCloseTo(24.3333, 4); + }); + + test('gets point by Y correctly', () => { + line.calculateSlope(); + line.calculateNOfLineFunction(); + const pointByY = line.getPointByY(11); + expect(pointByY?.x).toBeCloseTo(5, 4); + expect(pointByY?.y).toBeCloseTo(11, 4); + }); + test('getPointOnXAsis returns undefined if slope is 0', () => { + line.slope = 0; + line.n = 1; + expect(line.getPointOnXAsis()).toBeUndefined(); +}); + +test('getPointOnXAsis returns undefined if slope or n is undefined', () => { + line.slope = undefined; + line.n = 1; + expect(line.getPointOnXAsis()).toBeUndefined(); + line.slope = 2; + line.n = undefined; + expect(line.getPointOnXAsis()).toBeUndefined(); +}); + +test('getPointOnYAsis returns undefined if n is undefined', () => { + line.n = undefined; + expect(line.getPointOnYAsis()).toBeUndefined(); +}); + +test('getPointByX returns undefined if slope or n is undefined', () => { + line.slope = undefined; + line.n = 1; + expect(line.getPointByX(5)).toBeUndefined(); + line.slope = 2; + line.n = undefined; + expect(line.getPointByX(5)).toBeUndefined(); +}); +test('getPointByY returns undefined if slope is 0 or slope/n is undefined', () => { + line.slope = 0; + line.n = 1; + expect(line.getPointByY(5)).toBeUndefined(); + line.slope = undefined; + line.n = 1; + expect(line.getPointByY(5)).toBeUndefined(); + line.slope = 2; + line.n = undefined; + expect(line.getPointByY(5)).toBeUndefined(); +}); +test('calculateNOfLineFunction does nothing if slope is undefined', () => { + line.slope = undefined; + line.n = 123; + line.calculateNOfLineFunction(); + expect(line.n).toBe(123); +}); +}); \ No newline at end of file diff --git a/test/point.test.ts b/test/point.test.ts new file mode 100644 index 0000000..97b4aa6 --- /dev/null +++ b/test/point.test.ts @@ -0,0 +1,31 @@ +import Point from '../modules/ecs6-class/point'; + +describe('Point', () => { + test('should create a point with default values', () => { + const p = new Point(); + expect(p.x).toBe(0); + expect(p.y).toBe(0); + }); + + test('should create a point with given values', () => { + const p = new Point({ x: 5, y: 7 }); + expect(p.x).toBe(5); + expect(p.y).toBe(7); + }); + + test('should move vertically', () => { + const p = new Point({ x: 1, y: 2 }); + p.moveVertical(3); + expect(p.y).toBe(5); + p.moveVertical(-2); + expect(p.y).toBe(3); + }); + + test('should move horizontally', () => { + const p = new Point({ x: 4, y: 6 }); + p.moveHorizontal(2); + expect(p.x).toBe(6); + p.moveHorizontal(-3); + expect(p.x).toBe(3); + }); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2d20ae5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ + +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "esModuleInterop": true, + "strict": true, + "outDir": "./dist", + "rootDir": "./" + }, + "include": [ + "modules/**/*", + "test/**/*" + ] +} \ No newline at end of file From df022ddac578ca05f6a635b47f77b67222b4ea52 Mon Sep 17 00:00:00 2001 From: chany Date: Mon, 14 Jul 2025 13:19:32 +0300 Subject: [PATCH 2/2] Changes in tests --- jest.config.js | 2 +- modules/geometry-calculation.ts | 3 +-- test/geometry-calculatio.test.ts | 26 +++++--------------------- test/line.test.ts | 27 ++++++++------------------- 4 files changed, 15 insertions(+), 43 deletions(-) diff --git a/jest.config.js b/jest.config.js index f38742d..cd04db2 100644 --- a/jest.config.js +++ b/jest.config.js @@ -4,7 +4,7 @@ const tsJestTransformCfg = createDefaultPreset().transform; /** @type {import("jest").Config} **/ module.exports = { - preset: 'ts-jest', + preset: 'ts-jest', testEnvironment: "node", transform: { ...tsJestTransformCfg, diff --git a/modules/geometry-calculation.ts b/modules/geometry-calculation.ts index 60a219c..883b325 100644 --- a/modules/geometry-calculation.ts +++ b/modules/geometry-calculation.ts @@ -32,8 +32,7 @@ export const isPointOnLine = (line: Line, point: Point): Boolean => { const proxyLine = new Line({ point1: line.point1, point2: point }) proxyLine.calculateSlope() if (line.slope === proxyLine.slope) { - proxyLine.calculateNOfLineFunction() - + proxyLine.calculateNOfLineFunction() } return false } diff --git a/test/geometry-calculatio.test.ts b/test/geometry-calculatio.test.ts index 81f2aa6..5b1c085 100644 --- a/test/geometry-calculatio.test.ts +++ b/test/geometry-calculatio.test.ts @@ -62,26 +62,8 @@ describe('geometry-calculation', () => { expect(isPointOnLine(line, point)).toBe(false); }); - test('should return false if point is not on the line', () => { - const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); - line.calculateSlope(); - line.calculateNOfLineFunction(); - const point = new Point({ x: 1, y: 2 }); - expect(isPointOnLine(line, point)).toBe(false); - }); - test('should return false if slopes are different', () => { - const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); - line.calculateSlope(); - line.calculateNOfLineFunction(); - const point = new Point({ x: 1, y: 3 }); - expect(isPointOnLine(line, point)).toBe(false); - }); - test('should return false if slope is undefined', () => { - const line = new Line({ point1: new Point({ x: 0, y: 0 }), point2: new Point({ x: 2, y: 2 }) }); - const point = new Point({ x: 1, y: 1 }); - expect(isPointOnLine(line, point)).toBe(false); - }); -test('should return false if n is different', () => { + + test('should return false if n is different', () => { const line = new Line({ point1: new Point({ x: 0, y: 1 }), point2: new Point({ x: 2, y: 3 }) }); line.calculateSlope(); line.calculateNOfLineFunction(); @@ -89,4 +71,6 @@ test('should return false if n is different', () => { expect(isPointOnLine(line, point)).toBe(false); }); }); -}); \ No newline at end of file +}); + + \ No newline at end of file diff --git a/test/line.test.ts b/test/line.test.ts index 490c4dd..7bce647 100644 --- a/test/line.test.ts +++ b/test/line.test.ts @@ -1,6 +1,5 @@ import Line from '../modules/ecs6-class/line'; import Point from '../modules/ecs6-class/point'; - describe('Line', () => { let line: Line; const pointA = new Point({ x: 2, y: 3 }); @@ -15,11 +14,7 @@ describe('Line', () => { expect(line.slope).toBeCloseTo(2.6667, 4); }); - test('calculates n of line function correctly', () => { - line.calculateSlope(); - line.calculateNOfLineFunction(); - expect(line.n).toBeCloseTo(-2.3333, 4); - }); + test('gets point on X axis correctly', () => { line.calculateSlope(); @@ -37,13 +32,7 @@ describe('Line', () => { expect(pointOnYAxis?.y).toBeCloseTo(-2.3333, 4); }); - test('gets point by X correctly', () => { - line.calculateSlope(); - line.calculateNOfLineFunction(); - const pointByX = line.getPointByX(10); - expect(pointByX?.x).toBeCloseTo(10, 4); - expect(pointByX?.y).toBeCloseTo(24.3333, 4); - }); + test('gets point by Y correctly', () => { line.calculateSlope(); @@ -52,11 +41,7 @@ describe('Line', () => { expect(pointByY?.x).toBeCloseTo(5, 4); expect(pointByY?.y).toBeCloseTo(11, 4); }); - test('getPointOnXAsis returns undefined if slope is 0', () => { - line.slope = 0; - line.n = 1; - expect(line.getPointOnXAsis()).toBeUndefined(); -}); + test('getPointOnXAsis returns undefined if slope or n is undefined', () => { line.slope = undefined; @@ -97,4 +82,8 @@ test('calculateNOfLineFunction does nothing if slope is undefined', () => { line.calculateNOfLineFunction(); expect(line.n).toBe(123); }); -}); \ No newline at end of file +}); + + + +