const Calculator = require('../../src/calculator'); describe('Calculator', () => { let calculator; beforeEach(() => { calculator = new Calculator(); }); test('should add two numbers correctly', () => { expect(calculator.add(2, 3)).toBe(5); expect(calculator.add(-1, 1)).toBe(0); expect(calculator.add(0, 0)).toBe(0); }); test('should subtract two numbers correctly', () => { expect(calculator.subtract(5, 3)).toBe(2); expect(calculator.subtract(1, 1)).toBe(0); expect(calculator.subtract(0, 5)).toBe(-5); }); test('should multiply two numbers correctly', () => { expect(calculator.multiply(3, 4)).toBe(12); expect(calculator.multiply(-2, 3)).toBe(-6); expect(calculator.multiply(0, 5)).toBe(0); }); test('should divide two numbers correctly', () => { expect(calculator.divide(10, 2)).toBe(5); expect(calculator.divide(7, 2)).toBe(3.5); expect(calculator.divide(-6, 3)).toBe(-2); }); test('should throw error when dividing by zero', () => { expect(() => calculator.divide(5, 0)).toThrow('Division by zero is not allowed'); }); test('should maintain calculation history', () => { calculator.add(2, 3); calculator.multiply(4, 5); const history = calculator.getHistory(); expect(history).toHaveLength(2); expect(history[0]).toBe('2 + 3 = 5'); expect(history[1]).toBe('4 * 5 = 20'); }); test('should clear history', () => { calculator.add(1, 1); calculator.clearHistory(); expect(calculator.getHistory()).toHaveLength(0); }); });