<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">When I say simple I -mean- simple M, here is the complete code, tests and the, ahem, framework, run_test/5, …so far it helped me find two little ‘quirks’, since corrected! It’s so beginner level it probably isn’t much use to anybody other than myself!<div class=""><br class=""></div><div class=""><font face="PT Mono" class=""><span style="font-style: normal; font-size: 14px;" class="">:- module lexertest.<br class="">:- interface.<br class="">:- import_module io.<br class="">:- pred main(io::di, io::uo) is det.<br class="">:- implementation.<br class="">:- import_module list, lexer, maybe, string.<br class="">:- import_module errors.<br class=""><br class="">main(!IO) :-<br class="">    io.format("\nRunning some lexer tests...\n", [], !IO),<br class="">    basic_token_recognition_tests(!IO),<br class="">    io.format("\n\n", [], !IO).<br class=""><br class="">:- pred basic_token_recognition_tests(io::di, io::uo) is det.<br class="">basic_token_recognition_tests(!IO) :-<br class="">    run_test($line, "     ( ) [ ] { }",<br class="">        [ op(pos(5,1,5)), cp(pos(7,1,7)), ol(pos(9,1,9))<br class="">        , cl(pos(11,1,11)), om(pos(13,1,13)), cm(pos(15,1,15))<br class="">        ], !IO),<br class="">    run_test($line, " Stock-Token", [tk(pos(1,1,1), "Stock-Token")], !IO),<br class="">    run_test($line, " /*Blocked*/", [cn(pos(1,1,1), "/*Blocked*/")], !IO),<br class="">    run_test($line, " ;Say it", [c1(pos(1,1,1), ";Say it")], !IO),<br class="">    run_test($line, "'string1'", [s1(pos(0,1,0), "string1")], !IO),<br class="">    run_test($line, "\"string2\"", [s2(pos(0,1,0), "string2")], !IO),<br class="">        %% HARDER<br class="">    run_test($line, "A/*mean*/TEST'of'\"the\";lexer",<br class="">    [ tk(pos(0,1,0), "A")<br class="">    , cn(pos(1,1,1), "/*mean*/")<br class="">    , tk(pos(9,1,9), "TEST")<br class="">    , s1(pos(13,1,13), "of")<br class="">    , s2(pos(17,1,17), "the")<br class="">    , c1(pos(22,1,22), ";lexer")<br class="">    ], !IO),<br class="">        %% String ESCAPES<br class="">    run_test($line, "'string\\\'thing'",   [s1(pos(0,1,0), "string\\\'thing")], !IO),<br class="">    run_test($line, "\"string\\\"thing\"", [s2(pos(0,1,0), "string\\\"thing")], !IO)<br class="">    .<br class=""><br class="">    % S is the source code.<br class="">    % E is the expected token list.<br class="">:- pred run_test(int::in, string::in, list(lexer.token)::in, io::di, io::uo) is det.<br class="">run_test(Line, S, Exp, !IO) :-<br class="">    lexer.on_string(S, Lx, !IO),<br class="">    % lexer.dump_lexer(Lx, !IO),<br class="">    Status = lex_error(Lx),<br class="">    % io.format("lex_error: %s", [s(string(Status))], !IO),<br class="">    ( if Status = yes(ok_eob) then<br class="">        (if Exp = tokens(Lx) then<br class="">            io.format(" ✓ test passed: line: %04i %s\n", [i(Line), s(S)], !IO)<br class="">        else<br class="">            io.format("\n✘ test failed: line: %04i\nexp: %s\ngot: %s\n\n",<br class="">                [i(Line), s(string(Exp)), s(string(tokens(Lx)))], !IO)<br class="">        )<br class="">    else io.format("\nlex failed: %s\n", [s(string(Status))], !IO)<br class="">    ).</span></font></div><div class=""><br class=""></div><div class="">Sean.</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 23 May 2021, at 03:16, M McDonough <<a href="mailto:foolkingcrown@gmail.com" class="">foolkingcrown@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">I rolled a very simple one and it seems to have gone well, I can now add more tests to my lexer package and to the rest of the code as I write it. A typical output from the test Makefile process:<br class=""></blockquote><br class="">Out of curiosity, do you have a link to the code?<br class=""><br class="">There is another Mercury test framework available too:<br class=""><a href="https://osdn.net/projects/transunit/" class="">https://osdn.net/projects/transunit/</a><br class="">_______________________________________________<br class="">users mailing list<br class="">users@lists.mercurylang.org<br class="">https://lists.mercurylang.org/listinfo/users<br class=""></div></div></blockquote></div><br class=""></div></body></html>