let subset_construct = require('./subset_construct') require('mocha') require('should') /** * 模拟《编译原理》P98 */ describe('============Subset Construction Test============', function () { //字符集 let charset = ['a', 'b']; //NFA转换表 /* NFA a b 0 {3,8} {5} 1 {3} {5} 2 {3} \ 3 {3,8} {5} 4 \ {5} 5 {3,8} {5} 6 {3,8} {5} 7 {8} \ 8 \ {9} 9 \ {10} */ let Ntran = { 0: { '': [1, 2, 4, 7], a: [3, 8], b: [5] }, 1: { '': [2, 4], a: [3], b: [5] }, 2: { '': [], a: [3], b: [] }, 3: { '': [1, 2, 4, 6, 7], 'a': [3, 8], 'b': [5] }, 4: { '': [], 'a': [], 'b': [5] }, 5: { '': [1, 2, 4, 6, 7], 'a': [3, 8], 'b': [5] }, 6: { '': [1, 2, 4, 7], 'a': [3, 8], 'b': [5] }, 7: { '': [], 'a': [8], 'b': [] }, 8: { '': [], 'a': [], 'b': [9] }, 9: { '': [], 'a': [], 'b': [10] }, 10: { '': [], 'a': [], 'b': [] }, } //预期的的DFA转换表 let expected = require('./expected_dfa.json') describe(` charset: ${JSON.stringify(charset)} NFA: ${JSON.stringify(Ntran)} `, function () { it(`expected ${JSON.stringify(expected)}`, function () { let actual = subset_construct(charset, Ntran) should.deepEqual(actual.Dtran, expected.Dtran) should.deepEqual(actual.Dstates, expected.Dstates) }) }) })