(**************************************************************************
 * 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 set1 = Solution.msFromList [1;1;1;2;2;3;4;7];;
let set2 = Solution.msFromList [1;1;2;3;3;5;6;6];;

(* This list is for regular problems *)
let rubric =
[
     TEST2ARG(1, split, (fun x -> x < 0), [1; 5; 0; -4; -3; 2]) ;

     TEST2ARG(1, filter, (fun x -> x > 4), [3; 4; 2; 5; 2; 6; 8]) ;
     TEST2ARG(1, filterlt, 10, [4; 25; 12; 8; 10; 7; 11]);

     TEST1ARG(1, length, [1;2;3;4;5]) ;

     TEST4ARG(1, case_map, (fun x -> x > 2), incr, decr, [0;1;2;3]) ;

     TEST2ARG(1, app_all, [(fun x -> x > 0); (fun y -> y mod 2 = 0); (fun x -> x * x = x)], [1; 3; 6]) ;

     TEST2ARG(1, msFromList, [1;1;1;2;2;3;4;7], 1) ;
     TEST2ARG(1, msMember, 3, set1) ;
     TEST3ARG(1, msAdd, 5, set1, 5) ;
     TEST3ARG(1, msRemove, 1, set1, 1) ;
     TEST3ARG(1, msFilter, (fun x -> x>2), set2, 1) ;
     TEST3ARG(1, msUnion, set1, set2, 1) ;
     TEST3ARG(1, msDisjointUnion, set1, set2, 1) ;
     TEST3ARG(1, msIntersection, set1, set2, 1)

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

let extra_rubric = [ 
]
