|
1 | 1 | import Triangle from '../Triangle'
|
2 | 2 |
|
3 | 3 | describe('Triangle', () => {
|
4 |
| - describe('Triangle created with sides', () => { |
5 |
| - const triangle = new Triangle(3, 4, 5) |
| 4 | + describe('Constructor', () => { |
| 5 | + test('creates a triangle with base and height', () => { |
| 6 | + const triangle = new Triangle(5, 10) |
| 7 | + expect(triangle).toBeInstanceOf(Triangle) |
| 8 | + expect(triangle.base).toBe(5) |
| 9 | + expect(triangle.height).toBe(10) |
| 10 | + expect(triangle.sides).toEqual([5, null, null]) |
| 11 | + }) |
| 12 | + |
| 13 | + test('creates a triangle with three sides', () => { |
| 14 | + const triangle = new Triangle(3, 4, 5) |
| 15 | + expect(triangle).toBeInstanceOf(Triangle) |
| 16 | + expect(triangle.sides).toEqual([3, 4, 5]) |
| 17 | + expect(triangle.base).toBe(3) // Assuming base is one of the sides |
| 18 | + expect(triangle.height).toBe(null) |
| 19 | + }) |
6 | 20 |
|
7 |
| - test('The area of a triangle with sides 3, 4, 5', () => { |
8 |
| - expect(parseFloat(triangle.area().toFixed(2))).toEqual(6.0) |
| 21 | + test('throws an error if invalid number of arguments', () => { |
| 22 | + expect(() => new Triangle()).toThrow( |
| 23 | + 'Invalid number of arguments. Use either (base, height) or (sideA, sideB, sideC).' |
| 24 | + ) |
| 25 | + expect(() => new Triangle(1)).toThrow( |
| 26 | + 'Invalid number of arguments. Use either (base, height) or (sideA, sideB, sideC).' |
| 27 | + ) |
9 | 28 | })
|
10 | 29 |
|
11 |
| - test('The perimeter of a triangle with sides 3, 4, 5', () => { |
12 |
| - expect(parseFloat(triangle.perimeter().toFixed(2))).toEqual(12.0) |
| 30 | + test('throws an error if the triangle is invalid', () => { |
| 31 | + expect(() => new Triangle(1, 2, 3)).toThrow( |
| 32 | + 'Invalid triangle: The sum of any two sides must be greater than the third side.' |
| 33 | + ) |
13 | 34 | })
|
14 | 35 | })
|
15 | 36 |
|
16 |
| - describe('Triangle created with base and height', () => { |
17 |
| - const triangle = new Triangle(6, 4) |
| 37 | + describe('Area Calculation', () => { |
| 38 | + test('calculates area correctly using base and height', () => { |
| 39 | + const triangle = new Triangle(5, 10) |
| 40 | + expect(triangle.area()).toBe(25) |
| 41 | + }) |
| 42 | + |
| 43 | + test("calculates area correctly using Heron's formula", () => { |
| 44 | + const triangle = new Triangle(3, 4, 5) |
| 45 | + expect(triangle.area()).toBe(6) // Area of a 3-4-5 triangle |
| 46 | + }) |
| 47 | + }) |
18 | 48 |
|
19 |
| - test('The area of a triangle with base 6 and height 4', () => { |
20 |
| - expect(parseFloat(triangle.area().toFixed(2))).toEqual(12.0) |
| 49 | + describe('Perimeter Calculation', () => { |
| 50 | + test('calculates perimeter correctly for three sides', () => { |
| 51 | + const triangle = new Triangle(3, 4, 5) |
| 52 | + expect(triangle.perimeter()).toBe(12) // 3 + 4 + 5 |
21 | 53 | })
|
22 | 54 |
|
23 |
| - test('The perimeter calculation throws an error for base-height triangle', () => { |
| 55 | + test('throws an error if not all sides are known', () => { |
| 56 | + const triangle = new Triangle(5, 10) |
24 | 57 | expect(() => triangle.perimeter()).toThrow(
|
25 | 58 | 'Cannot calculate perimeter: not all sides are known.'
|
26 | 59 | )
|
27 | 60 | })
|
28 | 61 | })
|
29 | 62 |
|
30 |
| - describe('Invalid triangle creation', () => { |
31 |
| - test('Creating a triangle with invalid sides throws an error', () => { |
32 |
| - expect(() => new Triangle(1, 1, 10)).toThrow( |
33 |
| - 'Invalid triangle: The sum of any two sides must be greater than the third side.' |
| 63 | + describe('Getters', () => { |
| 64 | + test('base getter returns correct value', () => { |
| 65 | + const triangle = new Triangle(5, 10) |
| 66 | + expect(triangle.base).toBe(5) |
| 67 | + }) |
| 68 | + |
| 69 | + test('height getter returns correct value', () => { |
| 70 | + const triangle = new Triangle(5, 10) |
| 71 | + expect(triangle.height).toBe(10) |
| 72 | + }) |
| 73 | + |
| 74 | + test('sides getter returns correct values', () => { |
| 75 | + const triangle = new Triangle(3, 4, 5) |
| 76 | + expect(triangle.sides).toEqual([3, 4, 5]) |
| 77 | + }) |
| 78 | + }) |
| 79 | + |
| 80 | + describe('String Representation', () => { |
| 81 | + test('returns correct string representation for base and height', () => { |
| 82 | + const triangle = new Triangle(5, 10) |
| 83 | + expect(triangle.toString()).toBe( |
| 84 | + 'Triangle: base = 5, height = 10, sides = 5, unknown, unknown, area = 25, perimeter = unknown' |
34 | 85 | )
|
35 | 86 | })
|
36 | 87 |
|
37 |
| - test('Creating a triangle with invalid number of arguments throws an error', () => { |
38 |
| - expect(() => new Triangle(1)).toThrow( |
39 |
| - 'Invalid number of arguments. Use either (base, height) or (sideA, sideB, sideC).' |
| 88 | + test('returns correct string representation for three sides', () => { |
| 89 | + const triangle = new Triangle(3, 4, 5) |
| 90 | + expect(triangle.toString()).toBe( |
| 91 | + 'Triangle: base = 3, height = unknown, sides = 3, 4, 5, area = 6, perimeter = 12' |
40 | 92 | )
|
41 | 93 | })
|
42 | 94 | })
|
|
0 commit comments