(**************************************************************************
 * You can add new test cases by adding new elements to the following lists
 * Format is:
 * TEST<X>ARG(<weight>, <function_name>, <arg1>, <arg2>, ..., <argX>)
 *
 * <X> is the number of argument that the function being tested takes.
 **************************************************************************)


let zero = newint 0;;
let one = newint 1;;
let two = newint 2;;
let three = newint 3;;
let ten = newint 10;;
let four = newint 4;;
let five = newint 5;;
let six = newint 6;;

let v = newveci [2;4;6];;
let v2 = newveci [2;2;2];;

let m1 = rho (newveci [4;4]) (indx (newint 20));;
let m2 = rho (newveci [7;7]) (indx (newint 50));;
let m3 = rho (newveci [2;2]) one;;
let m4 = rho (newveci [5;5]) (indx (newint 25));;

let scores = newveci [4; 3; 1; 5; 5; 4; 3; 5];;
let scores2 = newveci [5;6;6;7;8;9;4;4;5;4;5;5;6;1;8;7;11];;

(* -------------------------------------- *)

let p1_sol p = (Solution.upperones p);;
let p1_stu p = (Student.upperones p);;

let p2_sol p = (Solution.sqmat p);;
let p2_stu p = (Student.sqmat p);;

let p3_sol p = (Solution.diagprod p);;
let p3_stu p = (Student.diagprod p);;

let p4_sol i v = (Solution.occurs i v);;
let p4_stu i v = (Student.occurs i v);;

let p5_sol i v = (Solution.find i v);;
let p5_stu i v = (Student.find i v);;

let p6_sol p = (Solution.plusscan p);;
let p6_stu p = (Student.plusscan p);;

let p7_sol p = (Solution.freqvec p);;
let p7_stu p = (Student.freqvec p);;


(* This list is for regular problems *)
let rubric =
[
     TEST1ARG_TWOFUN(2, p1_sol, p1_stu, four);

     TEST1ARG_TWOFUN(2, p2_sol, p2_stu, four);

     TEST1ARG_TWOFUN(2, p3_sol, p3_stu, m1);

     TEST2ARG_TWOFUN(2, p4_sol, p4_stu, two, v);

     TEST2ARG_TWOFUN(2, p5_sol, p5_stu, six, v);

     TEST1ARG_TWOFUN(2, p6_sol, p6_stu, scores);

     TEST1ARG_TWOFUN(2, p7_sol, p7_stu, scores);

]
(* Note: the last entry should not be followed by a semicolon. *)

(* This list is for extra credit problems *)
let extra_rubric = [



]

