import { describe, expect, it } from '@jest/globals'; import { _ } from '../src/core'; import { fromChar as _c } from '../src/char'; import { toString as $s, fromString as _s } from '../src/string'; import { run } from '../src/bf'; describe('BF', () => { describe('run', () => { it('handles output command', () => { expect($s(run(_s('.'))(_s('')))).toBe(String.fromCharCode(0)); }); it('handles input command', () => { expect($s(run(_s(',.'))(_s('a')))).toBe('a'); }); it('handles inc command', () => { expect($s(run(_s('+.'))(_s('')))).toBe(String.fromCharCode(1)); }); it('handles dec command', () => { expect($s(run(_s('-.'))(_s('')))).toBe(String.fromCharCode(255)); }); it('handles next command', () => { expect($s(run(_s('+++++>++.'))(_s('')))).toBe(String.fromCharCode(2)); }); it('handles prev command', () => { expect($s(run(_s('+++++>++<+++++.'))(_s('')))).toBe(String.fromCharCode(10)); }); it('skips loop block on zero', () => { expect($s(run(_s('[+++++].'))(_s('')))).toBe(String.fromCharCode(0)); }); it('repeats loop block while not zero', () => { expect($s(run(_s('+++++[-].'))(_s('')))).toBe(String.fromCharCode(0)); }); it('prints "Hello World!"', () => { expect($s(run (_s('++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.')) (_s('')))) .toBe('Hello World!\n'); }); }); });