diff options
Diffstat (limited to 'js/baba-yaga/tests/logical_operators.test.js')
-rw-r--r-- | js/baba-yaga/tests/logical_operators.test.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/js/baba-yaga/tests/logical_operators.test.js b/js/baba-yaga/tests/logical_operators.test.js new file mode 100644 index 0000000..ebb2efa --- /dev/null +++ b/js/baba-yaga/tests/logical_operators.test.js @@ -0,0 +1,85 @@ +import { evaluate } from '../runner.js'; + +describe('Logical Operators', () => { + test('!= (not equal) operator', () => { + const result = evaluate('1 != 2'); + expect(result.ok).toBe(true); + expect(result.value).toBe(true); + + const result2 = evaluate('1 != 1'); + expect(result2.ok).toBe(true); + expect(result2.value).toBe(false); + }); + + test('and (logical and) operator', () => { + const result = evaluate('true and true'); + expect(result.ok).toBe(true); + expect(result.value).toBe(true); + + const result2 = evaluate('true and false'); + expect(result2.ok).toBe(true); + expect(result2.value).toBe(false); + + const result3 = evaluate('false and true'); + expect(result3.ok).toBe(true); + expect(result3.value).toBe(false); + + const result4 = evaluate('false and false'); + expect(result4.ok).toBe(true); + expect(result4.value).toBe(false); + }); + + test('or (logical or) operator', () => { + const result = evaluate('true or true'); + expect(result.ok).toBe(true); + expect(result.value).toBe(true); + + const result2 = evaluate('true or false'); + expect(result2.ok).toBe(true); + expect(result2.value).toBe(true); + + const result3 = evaluate('false or true'); + expect(result3.ok).toBe(true); + expect(result3.value).toBe(true); + + const result4 = evaluate('false or false'); + expect(result4.ok).toBe(true); + expect(result4.value).toBe(false); + }); + + test('xor operator', () => { + const result = evaluate('true xor true'); + expect(result.ok).toBe(true); + expect(result.value).toBe(false); + + const result2 = evaluate('true xor false'); + expect(result2.ok).toBe(true); + expect(result2.value).toBe(true); + + const result3 = evaluate('false xor true'); + expect(result3.ok).toBe(true); + expect(result3.value).toBe(true); + + const result4 = evaluate('false xor false'); + expect(result4.ok).toBe(true); + expect(result4.value).toBe(false); + }); + + test('operator precedence', () => { + // and should have higher precedence than or + const result = evaluate('true or false and false'); + expect(result.ok).toBe(true); + expect(result.value).toBe(true); // true or (false and false) = true or false = true + + // Comparison should have higher precedence than logical + const result2 = evaluate('1 < 2 and 3 > 1'); + expect(result2.ok).toBe(true); + expect(result2.value).toBe(true); // (1 < 2) and (3 > 1) = true and true = true + }); + + test('complex logical expressions', () => { + const result = evaluate('1 != 2 and 3 > 1 or false'); + expect(result.ok).toBe(true); + expect(result.value).toBe(true); // (1 != 2 and 3 > 1) or false = (true and true) or false = true or false = true + }); +}); |