(* TESTS FOR parseSep' *)

(* Empty Integer Lists *)
List.parseSep' "" "" "" Int.parse' (explode "");
	(* OK ([], []) *)
List.parseSep' "" "" " " Int.parse' (explode " ");
	(* OK ([], []) *)
List.parseSep' "" "" "" Int.parse' (explode " ");
	(* Fail (Some [], [" "]) *)
List.parseSep' "[" "]" "" Int.parse' (explode "[]");
	(* OK ([], []) *)
List.parseSep' "[" "]" " " Int.parse' (explode " [ ]1");
	(* OK ([], ["1"]) *)
List.parseSep' "[" "]" "" Int.parse' (explode " [ ]1");
	(* Fail (Some [], [" ", "]", "1"]) *)
List.parseSep' "[" "]" "," Int.parse' (explode " [ ]1");
	(* OK ([], ["1"]) *)
List.parseSep' "" "]" "" Int.parse' (explode "]1");
	(* OK ([], ["1"]) *)
List.parseSep' "" "]" " " Int.parse' (explode " ]1");
	(* OK ([], ["1"]) *)
List.parseSep' "" "]" "" Int.parse' (explode " ]1");
	(* Fail (Some [], [" ", "]", "1"]) *)
List.parseSep' "[" "" "" Int.parse' (explode "[");
	(* OK ([], []) *)
List.parseSep' "[" "" " " Int.parse' (explode " [");
	(* OK ([], []) *)
List.parseSep' "[" "" "" Int.parse' (explode " [");
	(* OK ([], []) *)
List.parseSep' "[" "" " " Int.parse' (explode "[ ");
	(* OK ([], []) *)
List.parseSep' "[" "" "" Int.parse' (explode "[ ");
	(* Fail (Some [], [" "]) *)


(* Non-empty Integer Lists *)
List.parseSep' "" "" "" Int.parse' (explode " 1");
	(* OK ([1], []) *)
List.parseSep' "" "" "" Int.parse' (explode " 1 2");
	(* OK ([1 2], []) *)
List.parseSep' "" "" "" Int.parse' (explode " 1 ");
	(* Fail (Some [1], [" "]) *)
List.parseSep' "[" "]" "" Int.parse' (explode " [ 1 ]");
	(* Fail (Some [1], [" ", "]"]) *)
List.parseSep' "[" "]" "" Int.parse' (explode " [ 1 ");
	(* Fail (Some [1], [" "]) *)
List.parseSep' "" "," "," Int.parse' (explode " 1, 2");
	(* Fail (Some [1 2], []) *)
List.parseSep' "" "," "," Int.parse' (explode " 1, 2,");
	(* OK ([1 2], []) *)


(* Byte Lists *)
List.parseSep' "" "" " " Byte.parse' (explode " ");
	(* OK ([], []) *)
List.parseSep' "" "" "" Byte.parse' (explode " ");
	(* OK ([" "], []) *)
List.parseSep' "[" "]" "" Byte.parse' (explode " [ ]1");
	(* OK ([" "], ["1"]) *)
List.parseSep' "" "]" "" Byte.parse' (explode " ]1");
	(* OK ([" "], ["1"]) *)
List.parseSep' "[" "" "" Byte.parse' (explode "[ ");
	(* OK ([" "], []) *)
List.parseSep' "" "" "" Byte.parse' (explode " 1 ");
	(* OK ([" ", "1", " "], []) *)


(* TESTS FOR parseSepN' *)

(* Empty Lists *)
List.parseSepN' "" "" "" Int.parse' 0 (explode "");
	(* OK ([], []) *)
List.parseSepN' "" "" "" Int.parse' 0 (explode " ");
	(* OK ([], [" "]) *)
List.parseSepN' "" "" "" Int.parse' 0 (explode " 1");
	(* OK ([], [" ", "1"]) *)
List.parseSepN' "[" "]" "" Int.parse' 0 (explode "[]");
	(* OK ([], []) *)
List.parseSepN' "[" "]" " " Int.parse' 0 (explode " [ ]1");
	(* OK ([], ["1"]) *)
List.parseSepN' "[" "]" "" Int.parse' 0 (explode " [ ]1");
	(* Fail (Some [], [" ", "]", "1"]) *)
List.parseSepN' "[" "]" " " Int.parse' 0 (explode " [ 1 ]");
	(* Fail (Some [], ["1", " ", "]"]) *)
List.parseSepN' "[" "]" "," Int.parse' 0 (explode " [ ]1");
	(* OK ([], ["1"]) *)
List.parseSepN' "" "]" "" Int.parse' 0 (explode "]1");
	(* OK ([], ["1"]) *)
List.parseSepN' "" "]" " " Int.parse' 0 (explode " ]1");
	(* OK ([], ["1"]) *)
List.parseSepN' "" "]" "" Int.parse' 0 (explode " ]1");
	(* Fail (Some [], [" ", "]", "1"]) *)
List.parseSepN' "[" "" "" Int.parse' 0 (explode "[");
	(* OK ([], []) *)
List.parseSepN' "[" "" "" Int.parse' 0 (explode " [");
	(* OK ([], []) *)
List.parseSepN' "[" "" "" Int.parse' 0 (explode "[ ");
	(* OK ([], [" "]) *)
List.parseSepN' "" "" "" Int.parse' 1 (explode "");
	(* Fail (Some [], []) *)
List.parseSepN' "[" "" "" Int.parse' 1 (explode "[ ");
	(* Fail (Some [], [" "]) *)


(* Non-empty Lists *)
List.parseSepN' "" "" "" Int.parse' 1 (explode " 1");
	(* OK ([1], []) *)
List.parseSepN' "" "" "" Int.parse' 2 (explode " 1");
	(* Fail (Some [1], []) *)
List.parseSepN' "" "" "" Int.parse' 2 (explode " 1 2");
	(* OK ([1 2], []) *)
List.parseSepN' "" "" "" Int.parse' 1 (explode " 1 2");
	(* OK ([1], [" ", "2"]) *)
List.parseSepN' "[" "]" "" Int.parse' 1 (explode " [ 1 ]");
	(* Fail (Some [1], [" ", "]"]) *)
List.parseSepN' "[" "]" "" Int.parse' 1 (explode " [ 1 ");
	(* Fail (Some [1], [" "]) *)
List.parseSepN' "" "," "," Int.parse' 2 (explode " 1, 2");
	(* Fail (Some [1 2], []) *)
List.parseSepN' "" "" "," Int.parse' 2 (explode " 1, 2,");
	(* OK ([1 2], [","]) *)
List.parseSepN' "" "," "," Int.parse' 2 (explode " 1, 2,");
	(* OK ([1 2], []) *)


(* Byte Lists *)
List.parseSepN' "" "" " " Byte.parse' 0 (explode " ");
	(* OK ([], [" "]) *)
List.parseSepN' "" "" " " Byte.parse' 1 (explode " ");
	(* Fail (Some [], []) *)
List.parseSepN' "" "" "" Byte.parse' 1 (explode " ");
	(* OK ([" "], []) *)
List.parseSepN' "[" "]" "" Byte.parse' 1 (explode " [ ]1");
	(* OK ([" "], ["1"]) *)
List.parseSepN' "" "]" "" Byte.parse' 1 (explode " ]1");
	(* OK ([" "], ["1"]) *)
List.parseSepN' "[" "" "" Byte.parse' 1 (explode "[ ");
	(* OK ([" "], []) *)
List.parseSepN' "" "" "" Byte.parse' 2 (explode " 1 ");
	(* OK ([" ", "1"], [" "]) *)

