import { describe, expect, it } from '@jest/globals'; import { undef } from '../src/core'; import { toNOrd as $o, NOrd } from '../src/ord'; import { toBoolean as $b, False, True, fromBoolean as _b, and, cmp, eq, ge, gt, iif, le, lt, not, or, xor } from '../src/bool'; import { toString as $s } from '../src/string'; import { show } from '../src/bool.show'; describe('Bool', () => { describe('toBoolean', () => { it('converts True', () => { expect($b(True)).toBe(true); }); it('converts False', () => { expect($b(False)).toBe(false); }); }); describe('fromBoolean', () => { it('converts true', () => { expect($b(_b(true))).toBe(true); }); it('converts false', () => { expect($b(_b(false))).toBe(false); }); }); describe('iif', () => { it('returns true argument', () => { expect($b(iif._(True)._(True)._(False))).toBe(true); }); it('returns false argument', () => { expect($b(iif._(False)._(True)._(False))).toBe(false); }); it('ignores other argument', () => { expect($b(iif._(True)._(True)._(undef))).toBe(true); expect($b(iif._(False)._(undef)._(False))).toBe(false); }); }); describe('not', () => { it('not False is True', () => { expect($b(not._(False))).toBe(true); }); it('not True is False', () => { expect($b(not._(True))).toBe(false); }); }); describe('lt', () => { it('False lt False is False', () => { expect($b(lt._(False)._(False))).toBe(false); }); it('False lt True is True', () => { expect($b(lt._(False)._(True))).toBe(true); }); it('True lt False is False', () => { expect($b(lt._(True)._(False))).toBe(false); }); it('True lt True is False', () => { expect($b(lt._(True)._(True))).toBe(false); }); it('True lt ignores second argument', () => { expect($b(lt._(True)._(undef))).toBe(false); }); }); describe('le', () => { it('False le False is True', () => { expect($b(le._(False)._(False))).toBe(true); }); it('False le True is True', () => { expect($b(le._(False)._(True))).toBe(true); }); it('True le False is False', () => { expect($b(le._(True)._(False))).toBe(false); }); it('True le True is True', () => { expect($b(le._(True)._(True))).toBe(true); }); it('False le ignores second argument', () => { expect($b(le._(False)._(undef))).toBe(true); }); }); describe('eq', () => { it('False eq False is True', () => { expect($b(eq._(False)._(False))).toBe(true); }); it('False eq True is False', () => { expect($b(eq._(False)._(True))).toBe(false); }); it('True eq False is False', () => { expect($b(eq._(True)._(False))).toBe(false); }); it('True eq True is True', () => { expect($b(eq._(True)._(True))).toBe(true); }); }); describe('ge', () => { it('False ge False is True', () => { expect($b(ge._(False)._(False))).toBe(true); }); it('False ge True is False', () => { expect($b(ge._(False)._(True))).toBe(false); }); it('True ge False is True', () => { expect($b(ge._(True)._(False))).toBe(true); }); it('True ge True is True', () => { expect($b(ge._(True)._(True))).toBe(true); }); it('True ge ignores second argument', () => { expect($b(ge._(True)._(undef))).toBe(true); }); }); describe('gt', () => { it('False gt False is False', () => { expect($b(gt._(False)._(False))).toBe(false); }); it('False gt True is False', () => { expect($b(gt._(False)._(True))).toBe(false); }); it('True gt False is True', () => { expect($b(gt._(True)._(False))).toBe(true); }); it('True gt True is False', () => { expect($b(gt._(True)._(True))).toBe(false); }); it('False gt ignores second argument', () => { expect($b(gt._(False)._(undef))).toBe(false); }); }); describe('cmp', () => { it('False cmp False is EQ', () => { expect($o(cmp._(False)._(False))).toBe(NOrd.EQ); }); it('False cmp True is LT', () => { expect($o(cmp._(False)._(True))).toBe(NOrd.LT); }); it('True cmp False is GT', () => { expect($o(cmp._(True)._(False))).toBe(NOrd.GT); }); it('True cmp True is EQ', () => { expect($o(cmp._(True)._(True))).toBe(NOrd.EQ); }); }); describe('and', () => { it('False and False is False', () => { expect($b(and._(False)._(False))).toBe(false); }); it('False and True is False', () => { expect($b(and._(False)._(True))).toBe(false); }); it('True and False is False', () => { expect($b(and._(True)._(False))).toBe(false); }); it('True and True is True', () => { expect($b(and._(True)._(True))).toBe(true); }); it('False and ignores other argument', () => { expect($b(and._(False)._(undef))).toBe(false); }); }); describe('or', () => { it('False or False is False', () => { expect($b(or._(False)._(False))).toBe(false); }); it('False or True is True', () => { expect($b(or._(False)._(True))).toBe(true); }); it('True or False is True', () => { expect($b(or._(True)._(False))).toBe(true); }); it('True or True is True', () => { expect($b(or._(True)._(True))).toBe(true); }); it('True or ignores other argument', () => { expect($b(or._(True)._(undef))).toBe(true); }); }); describe('xor', () => { it('False xor False is False', () => { expect($b(xor._(False)._(False))).toBe(false); }); it('False xor True is True', () => { expect($b(xor._(False)._(True))).toBe(true); }); it('True xor False is True', () => { expect($b(xor._(True)._(False))).toBe(true); }); it('True xor True is False', () => { expect($b(xor._(True)._(True))).toBe(false); }); }); describe('show', () => { it('show False is "False"', () => { expect($s(show._(False))).toBe('False'); }); it('show True is "True"', () => { expect($s(show._(True))).toBe('True'); }); }); });