UNPKG

nadesiko3

Version:
133 lines (130 loc) 4.39 kB
const TestEnv = require('./test_utils').TestEnv describe('calc_test.js', () => { const env = new TestEnv() before( function () { env.getEnv() }) const cmp = (code, res) => { env.cmpInfo(code, res) } it('basic', () => { cmp('3を表示', '3') cmp('3.14を表示', '3.14') cmp('0.5e+3を表示', '500') }) it('足し算', () => { cmp('3+5を表示', '8') }) it('引き算', () => { cmp('10-5を表示。', '5') cmp('10-5を表示。', '5') }) it('掛け算', () => { cmp('1+2*3を表示', '7') }) it('連続演算:して', () => { cmp('3に5を足して表示', '8') }) it('連続演算:て-3に5を掛けて表示', () => { cmp('3に5を掛けて表示', '15') }) it('配列', () => { cmp('a=[];a[1]=30;a[1]を表示', '30') cmp('a=[];a【1】=30;a[1]を表示', '30') }) it('ネスト配列', () => { cmp('a=[[1,2,3], [4,5,6]];a[1][1]を表示', '5') }) it('ネスト配列で、マイナスを含むときのバグ修正 (#276)', () => { cmp('a=[[-1, -1], [1, -1]];a[0][0]を表示', '-1') }) it('オブジェクト', () => { cmp('a={};a[\'a\']=30;a[\'a\']を表示', '30') }) it('階乗', () => { cmp('2^3を表示', '8') }) it('否定', () => { cmp('(!1)を表示', '0') cmp('(!0)を表示', '1') cmp('(!オン)を表示', '0') cmp('(!オフ)を表示', '1') }) it('配列簡易記号', () => { cmp('A=[];A@0=5;A@0を表示', '5') cmp('A=[];A@0=5;A@1=6;AをJSONエンコードして表示', '[5,6]') }) it('JSON配列-改行あり', () => { cmp('A=[\n0,\n1,\n2,\n3];A@2を表示', '2') }) it('JSON配列-カンマ省略', () => { cmp('A=[1 2 3 4 5];AをJSONエンコードして表示', '[1,2,3,4,5]') }) it('JSON配列-ネスト', () => { cmp('A=[[1,2,3],[4,5,6]];AをJSONエンコードして表示', '[[1,2,3],[4,5,6]]') }) it('JSONオブジェクト-改行あり', () => { cmp('A={\n"殿":"男","姫":"女"\n};A@"殿"を表示', '男') }) it('JSONオブジェクト-値を省略した場合', () => { cmp('N={"hoge"};N["hoge"]を表示。', 'hoge') cmp('N={"hoge","fuga","bar"};N["bar"]を表示。', 'bar') cmp('N={32,45,66};N[45]を表示。', '45') }) it('JSONオブジェクト-キーを文字列で囲わなかった場合', () => { cmp('N={hoge:30};N["hoge"]を表示。', '30') }) it('文字列→数値への暗黙的変換', () => { cmp('A="5";B="50";A+Bを表示', '55') cmp('"100"/"2"を表示', '50') cmp('"2"*"3"を表示', '6') cmp('"100"%"10"を表示', '0') }) it('空配列テスト', () => { cmp('A=空配列;A@0=30;A@1=50;Aを「:」で配列結合して表示', '30:50') cmp('A=空配列;B=空配列;A@0=30;A@1=50;B@0=1;Bを「:」で配列結合して表示', '1') }) it('単項演算子 minus number', () => { cmp('-1*5を表示', '-5') cmp('5*-1を表示', '-5') }) it('単項演算子 minus word', () => { cmp('A=1;5*-Aを表示', '-5') }) it('論理演算', () => { cmp('BMI=25;A=((25 ≦ BMI) かつ (BMI < 30));Aを表示', 'true') cmp('BMI=25;A=((18.5 > BMI) または (BMI > 30));Aを表示', 'false') }) it('カッコ内の関数呼び出し', () => { cmp('N=("ABC"の文字数);Nを表示。', '3') }) it('文字列の埋め込み変数加算', () => { cmp('N1=30;「--{N1+1}--」を表示', '--31--') }) it('文字列の埋め込み変数減算', () => { cmp('N1=30;「--{N1-1}--」を表示', '--29--') }) it('文字列の埋め込み変数乗算', () => { cmp('N1=30;「--{N1*2}--」を表示', '--60--') }) it('文字列の埋め込み変数除算', () => { cmp('N1=30;「--{N1/2}--」を表示', '--15--') }) it('文字列の埋め込み変数剰余', () => { cmp('N1=30;「--{N1%2}--」を表示', '--0--') }) it('文字列の埋め込み変数冪乗', () => { cmp('N1=2;「--{N1^3}--」を表示', '--8--') }) it('比較演算子', () => { cmp('A=1>5;Aを表示', 'false') }) it('ビット演算', () => { cmp('A=0xF0>>4;Aを表示', '15') cmp('A=0xF<<4;Aを表示', '240') }) it('連文で計算 (#729)', () => { cmp('1に2を足して3を足して4を引いて5を掛けて2で割って表示', '5') cmp('2に3を掛けて4を足して5で割って表示', '2') }) })