summary refs log tree commit diff stats
path: root/javascript/triangle/triangle.spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/triangle/triangle.spec.js')
-rw-r--r--javascript/triangle/triangle.spec.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/javascript/triangle/triangle.spec.js b/javascript/triangle/triangle.spec.js
new file mode 100644
index 0000000..afa2aef
--- /dev/null
+++ b/javascript/triangle/triangle.spec.js
@@ -0,0 +1,104 @@
+import { Triangle } from './triangle';
+
+describe('Triangle', () => {
+  describe('equilateral triangle', () => {
+    test('all sides are equal', () => {
+      const triangle = new Triangle(2, 2, 2);
+      expect(triangle.isEquilateral).toBe(true);
+    });
+
+    test('any side is unequal', () => {
+      const triangle = new Triangle(2, 3, 2);
+      expect(triangle.isEquilateral).toBe(false);
+    });
+
+    test('no sides are equal', () => {
+      const triangle = new Triangle(5, 4, 6);
+      expect(triangle.isEquilateral).toBe(false);
+    });
+
+    test('all zero sides is not a triangle', () => {
+      const triangle = new Triangle(0, 0, 0);
+      expect(triangle.isEquilateral).toBe(false);
+    });
+
+    test('sides may be floats', () => {
+      const triangle = new Triangle(0.5, 0.5, 0.5);
+      expect(triangle.isEquilateral).toBe(true);
+    });
+  });
+
+  describe('isosceles triangle', () => {
+    test('last two sides are equal', () => {
+      const triangle = new Triangle(3, 4, 4);
+      expect(triangle.isIsosceles).toBe(true);
+    });
+
+    test('first two sides are equal', () => {
+      const triangle = new Triangle(4, 4, 3);
+      expect(triangle.isIsosceles).toBe(true);
+    });
+
+    test('first and last sides are equal', () => {
+      const triangle = new Triangle(4, 3, 4);
+      expect(triangle.isIsosceles).toBe(true);
+    });
+
+    test('equilateral triangles are also isosceles', () => {
+      const triangle = new Triangle(4, 4, 4);
+      expect(triangle.isIsosceles).toBe(true);
+    });
+
+    test('no sides are equal', () => {
+      const triangle = new Triangle(2, 3, 4);
+      expect(triangle.isIsosceles).toBe(false);
+    });
+
+    test('first triangle inequality violation', () => {
+      const triangle = new Triangle(1, 1, 3);
+      expect(triangle.isIsosceles).toBe(false);
+    });
+
+    test('second triangle inequality violation', () => {
+      const triangle = new Triangle(1, 3, 1);
+      expect(triangle.isIsosceles).toBe(false);
+    });
+
+    test('third triangle inequality violation', () => {
+      const triangle = new Triangle(3, 1, 1);
+      expect(triangle.isIsosceles).toBe(false);
+    });
+
+    test('sides may be floats', () => {
+      const triangle = new Triangle(0.5, 0.4, 0.5);
+      expect(triangle.isIsosceles).toBe(true);
+    });
+  });
+
+  describe('scalene triangle', () => {
+    test('no sides are equal', () => {
+      const triangle = new Triangle(5, 4, 6);
+      expect(triangle.isScalene).toBe(true);
+    });
+
+    test('all sides are equal', () => {
+      const triangle = new Triangle(4, 4, 4);
+      expect(triangle.isScalene).toBe(false);
+    });
+
+    test('two sides are equal', () => {
+      const triangle = new Triangle(4, 4, 3);
+      expect(triangle.isScalene).toBe(false);
+    });
+
+    test('may not violate triangle inequality', () => {
+      const triangle = new Triangle(7, 3, 2);
+      expect(triangle.isScalene).toBe(false);
+    });
+
+    test('sides may be floats', () => {
+      const triangle = new Triangle(0.5, 0.4, 0.6);
+      expect(triangle.isScalene).toBe(true);
+    });
+  });
+});