import { math } from './math';
import { some } from '../../combinator';
import { input } from '../context';
import { inspect } from '../../debug.test';
describe('Unit: parser/inline/math', () => {
describe('math', () => {
const parser = some(math);
it('invalid', () => {
assert.deepStrictEqual(inspect(parser, input('')), undefined);
assert.deepStrictEqual(inspect(parser, input('$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$$$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$0 $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$0\\ $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$0\\\n$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-0, $-1')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-0 and $-1')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-0と$-1')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a $-b')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a\\ $-b')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a `$`')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a ``$``')), undefined);
// (``" + ``" + $-b") or (``"`` + "$-b")
assert.deepStrictEqual(inspect(parser, input('$-a ``"``"$-b"')), undefined);
// (``b`` + "c" + $-d) or (``b``"c" + $-d)
assert.deepStrictEqual(inspect(parser, input('$-a ``b``"c"$-d')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a"$-b"')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a\\"$-b\\"')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a($-b)')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a\\($-b\\)')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a[$-b]')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a\\[$-b\\]')), undefined);
assert.deepStrictEqual(inspect(parser, input('$-a{$-b}')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a{$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a$b')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a$b$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$ $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$\\ $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$ a$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$ a $')), undefined);
assert.deepStrictEqual(inspect(parser, input('$\n$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$\\\n$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a\nb$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a\\\nb$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a\\$\nb$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$a\\$\\\nb$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$`$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$`a"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$`a"b$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``$"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a"$0')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a""b$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a""$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$```a"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$```a""$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``\n"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a\\$\nb"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a\\$\\\nb"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``\\"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$``a``b"c"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$````""$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$"$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a')), undefined);
assert.deepStrictEqual(inspect(parser, input('${$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${}')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a} $')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a{b}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a}b}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a}b$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a}b{c}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a}{b}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${\\}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${\n}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${\\\n}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a\nb}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a\\\nb}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${$}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a\\$\nb}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${a\\$\\\nb}$')), undefined);
assert.deepStrictEqual(inspect(parser, input('$\\begin$')), [['$\\begin$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\huge0$')), [['$\\huge0$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\Begin$')), [['$\\Begin$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\begin{}$')), [['$\\begin{}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${\\begin}$')), [['${\\begin}$'], '']);
assert.deepStrictEqual(inspect(parser, input('$http://host$')), undefined);
assert.deepStrictEqual(inspect(parser, input('${http://host}$')), undefined);
assert.deepStrictEqual(inspect(parser, input(' ${a}$')), undefined);
});
it('basic', () => {
assert.deepStrictEqual(inspect(parser, input('$0$')), [['$0$'], '']);
assert.deepStrictEqual(inspect(parser, input('$0$$')), [['$0$'], '$']);
assert.deepStrictEqual(inspect(parser, input('$00$')), [['$00$'], '']);
assert.deepStrictEqual(inspect(parser, input('$-0$')), [['$-0$'], '']);
assert.deepStrictEqual(inspect(parser, input('$0-1$')), [['$0-1$'], '']);
assert.deepStrictEqual(inspect(parser, input('$0+1$')), [['$0+1$'], '']);
assert.deepStrictEqual(inspect(parser, input('$0*1$')), [['$0*1$'], '']);
assert.deepStrictEqual(inspect(parser, input('$0/1$')), [['$0/1$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a$')), [['$a$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a$$')), [['$a$'], '$']);
assert.deepStrictEqual(inspect(parser, input('$a-b$')), [['$a-b$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a+b$')), [['$a+b$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a*b$')), [['$a*b$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a/b$')), [['$a/b$'], '']);
assert.deepStrictEqual(inspect(parser, input(`$a'$`)), [[`$a'$`], '']);
assert.deepStrictEqual(inspect(parser, input(`$a''$`)), [[`$a''$`], '']);
assert.deepStrictEqual(inspect(parser, input('$a$[A](a)')), [['$a$'], '[A](a)']);
assert.deepStrictEqual(inspect(parser, input('$A$')), [['$A$'], '']);
assert.deepStrictEqual(inspect(parser, input('$-a$')), [['$-a$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\$$')), [['$\\$$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\Pi$')), [['$\\Pi$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\ 0$')), [['$\\ 0$'], '']);
assert.deepStrictEqual(inspect(parser, input('$\\\\0$')), [['$\\\\0$'], '']);
assert.deepStrictEqual(inspect(parser, input('$|1|$')), [['$|1|$'], '']);
assert.deepStrictEqual(inspect(parser, input('$[0,1)$]')), [['$[0,1)$'], ']']);
assert.deepStrictEqual(inspect(parser, input('$(0, 1]$)')), [['$(0, 1]$'], ')']);
assert.deepStrictEqual(inspect(parser, input('$\\{0,1\\}$')), [['$\\{0,1\\}$'], '']);
assert.deepStrictEqual(inspect(parser, input('$n=1$')), [['$n=1$'], '']);
assert.deepStrictEqual(inspect(parser, input('$n$n<m$'], '']);
assert.deepStrictEqual(inspect(parser, input('$n>m$')), [['$n>m$'], '']);
assert.deepStrictEqual(inspect(parser, input('$E = mc^2$')), [['$E = mc^2$'], '']);
assert.deepStrictEqual(inspect(parser, input('$f(x)$')), [['$f(x)$'], '']);
assert.deepStrictEqual(inspect(parser, input('$f: x \\to y$')), [['$f: x \\to y$'], '']);
assert.deepStrictEqual(inspect(parser, input('$k$\\-space')), [['$k$'], '\\-space']);
assert.deepStrictEqual(inspect(parser, input('$a{b}$')), [['$a{b}$'], '']);
assert.deepStrictEqual(inspect(parser, input('$a\\{$\\}')), [['$a\\{$'], '\\}']);
assert.deepStrictEqual(inspect(parser, input('${}$')), [['${}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${ }$')), [['${ }$'], '']);
assert.deepStrictEqual(inspect(parser, input('${a}$')), [['${a}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${a}$$')), [['${a}$'], '$']);
assert.deepStrictEqual(inspect(parser, input('${a}$0')), [['${a}$'], '0']);
assert.deepStrictEqual(inspect(parser, input('${a}$b')), [['${a}$'], 'b']);
assert.deepStrictEqual(inspect(parser, input('${ab}$')), [['${ab}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${a b}$')), [['${a b}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${a }$')), [['${a }$'], '']);
assert.deepStrictEqual(inspect(parser, input('${ a}$')), [['${ a}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${ a }$')), [['${ a }$'], '']);
assert.deepStrictEqual(inspect(parser, input('${``"}$')), [['${``"}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${\\a}$')), [['${\\a}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${\\$}$')), [['${\\$}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${\\\\}$')), [['${\\\\}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${あ}$')), [['${あ}$'], '']);
});
it('nest', () => {
assert.deepStrictEqual(inspect(parser, input('${*a*}$')), [['${*a*}$'], '']);
assert.deepStrictEqual(inspect(parser, input('${}$')), [['${<wbr>}$'], '']);
});
});
});