let rubric_version = "1.0" let rubric_title = "CS421 Fall 2012 MP8" (************************************************************************** * You can add new test cases by adding new elements to the following lists * Format is: * TESTARG(, , , , ..., ) * * is the number of argument that the function being tested takes. **************************************************************************) (* Test cases should go in this list. * The first element of the pair is the weight of the case, * and the second is the string to be given to the parser. *) let fail_get_all_tokens_stu s = try Util.timer 4 (fun () -> Student.try_get_all_tokens s) with _ -> None let fail_get_all_tokens s = try Util.timer 4 (fun () -> Solution.try_get_all_tokens s) with _ -> None let esc_get_all_tokens_stu s = try Student.get_all_tokens s with Failure "lexing: empty token" -> Solution.get_all_tokens s (* This list is for regular problems *) let rubric = [ (* Problem 1 -- 7 points *) TEST1ARG(1, get_all_tokens, "let = in ;; + ** , ; ( - )"); TEST1ARG(1, get_all_tokens, "if rec then else fun"); TEST1ARG(1, get_all_tokens, "* / ^ < > ="); TEST1ARG(1, get_all_tokens, "| ; [ ] _"); TEST1ARG(1, get_all_tokens, "+. -. *. /."); TEST1ARG(1, get_all_tokens, "<= >= && || -> ::"); TEST1ARG(1, get_all_tokens, ";; + - * / +. -. *. /. ^ ** < > <= >= = && || | -> :: let rec ; in if then else fun [ ] ( ) , _"); (* Problem 2 -- 8 points *) TEST1ARG(1, get_all_tokens, "42 100.5 0"); TEST1ARG(1, get_all_tokens, "123 458"); TEST1ARG(1, get_all_tokens, "12.3 4.53"); TEST1ARG(1, get_all_tokens, "1. 2."); TEST1ARG(1, get_all_tokens, "1.2+5+2.+7"); TEST1ARG(1, get_all_tokens, "42=0"); TEST1ARG(1, get_all_tokens, "42 2. 02"); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, ".053"); (* Problem 3 -- 6 points *) TEST1ARG(1, get_all_tokens, "true false ()"); TEST1ARG(1, get_all_tokens, "true"); TEST1ARG(1, get_all_tokens, "false"); TEST1ARG(1, get_all_tokens, "()"); TEST1ARG(1, get_all_tokens, "truefalse() ( )"); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, "True False"); (* Problem 4 -- 10 points *) TEST1ARG(1, get_all_tokens, "this is where if"); TEST1ARG(1, get_all_tokens, "if if' if_if if'''''' ifif if"); TEST1ARG(1, get_all_tokens, "n___a_'___'"); TEST1ARG(1, get_all_tokens, "if877669"); TEST1ARG(1, get_all_tokens, "0.8asdf"); TEST1ARG(1, get_all_tokens, "elsebeGOOD"); TEST1ARG(1, get_all_tokens, "ifthen truefalse letrec funin"); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, "Salam"); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, "'alam"); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, "_alam"); (*Problem 5 -- 20 points *) TEST1ARG(1, get_all_tokens, "this (* is a *) test"); TEST1ARG(1, get_all_tokens, "this // is a test"); TEST1ARG(1, get_all_tokens, "this // is a\n test"); TEST1ARG(1, try_get_all_tokens, "this (* is (* a test *)"); TEST1ARG(1, get_all_tokens, "this // is a\"\n test"); TEST1ARG(1, get_all_tokens, "this // is a(*\n test"); TEST1ARG(1, get_all_tokens, "this // is a*)\n test"); TEST1ARG(1, get_all_tokens, "this // is a**)\n test"); TEST1ARG(1, get_all_tokens, "this (* is (* a test **)"); TEST1ARG(1, try_get_all_tokens, "this **)"); TEST1ARG(1, try_get_all_tokens, "this *)joij "); TEST1ARG(1, get_all_tokens, "this (* is \" a *) test"); TEST1ARG(1, get_all_tokens, "this (* is \"\n\" a *) test"); TEST1ARG(1, get_all_tokens, "this (* is // a **) test"); TEST1ARG(1, get_all_tokens, "this (* is (* an *) other *) test"); TEST1ARG(1, get_all_tokens, "this (* i(*s (* a(*n *) ot*)her *) te*)st"); TEST1ARG(1, get_all_tokens, "this (* i(*s (* a(*n *) ot**)her test"); TEST1ARG(1, get_all_tokens, "this (* i(*s (* a(*n *) ot*)her *) te**)st"); TEST1ARG(1, get_all_tokens, "this (* i(*s (*// a(*n *) ot*)her *) te*)st"); TEST1ARG(1, try_get_all_tokens, "this (* i(*s (* a(*n *) ot**)her *) te*)st"); (* Problem 6 -- 25 points *) TEST1ARG(1, get_all_tokens, "\"some string\""); TEST1ARG(1, get_all_tokens, "\" she said, \\\"hello\\\"\""); TEST1ARG(1, get_all_tokens, "\" \\100 \\011\""); TEST1ARG(1, get_all_tokens, "\"next line \\n starts here; indentation \\t starts here next string\" \"starts here\""); TEST1ARG(1, get_all_tokens, "\"\\\\\""); TEST1ARG(1, get_all_tokens, "\"\\'\""); TEST1ARG(1, get_all_tokens, "\"\\\"\""); TEST1ARG(1, get_all_tokens, "\"\\t\""); TEST1ARG(1, get_all_tokens, "\"\\n\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\r\""); TEST1ARG(1, get_all_tokens, "\"\\000 \\255\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\256\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\272\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\324\""); TEST1ARG(1, get_all_tokens, "\"\\2509\""); TEST1ARG(1, get_all_tokens, "\"aa\\100dd\""); TEST1ARG(1, get_all_tokens, "\"//what gives?\"\n"); TEST1ARG(1, get_all_tokens, "\"a (* comment *) here\""); TEST1ARG(1, get_all_tokens, "a \" little **) super\" comment"); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\6 oops\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\\40 oops\""); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\n\t\r\'\\ \""); TEST1ARG_TWOFUN(1, fail_get_all_tokens, fail_get_all_tokens_stu, "\"no end in sight"); TEST1ARG_TWOFUN(1, Solution.get_all_tokens, esc_get_all_tokens_stu, "\"\007\005\"") ] let extra_rubric = [ TEST1ARG(1, try_comm_get_all_tokens, "aaaa\nbbbb\nc(*\n"); TEST1ARG(1, try_comm_get_all_tokens, "let\n123\n\"hi\\n\"*)\n"); TEST1ARG(1, try_comm_get_all_tokens, "aaaa\nbbbb**)\nc\n"); TEST1ARG(2, try_comm_get_all_tokens, "this (* is (* a test *)"); TEST1ARG(1, try_comm_get_all_tokens, "this (**)*) is (* a test *)"); TEST1ARG(2, try_comm_get_all_tokens, "this (* is a\"\n\"*) little **) test") ]