+let doThenTestee3 = { _tag: "Some", value: { matched: "", remained: "我的貓" } };
+let doTestRes3 = thenDo(thenDo(doThenTestee3, orDo(compPart1, compPart2)), compPart2);
+assert(doTestRes3._tag == "Some");
+assert(doTestRes3.value.matched == "我的");
+assert(doTestRes3.value.remained == "貓");
+let doThenTestee4 = { _tag: "Some", value: { matched: "", remained: "的的貓" } };
+let doTestRes4 = thenDo(thenDo(doThenTestee4, orDo(compPart1, compPart2)), compPart2);
+assert(doTestRes4._tag == "Some");
+assert(doTestRes4.value.matched == "的的");
+assert(doTestRes4.value.remained == "貓");
+let doThenTestee5 = { _tag: "Some", value: { matched: "", remained: "的貓" } };
+let doTestRes5 = thenDo(thenDo(doThenTestee5, zeroOrMoreDo(compPart1)), compPart2);
+assert(doTestRes5._tag == "Some");
+assert(doTestRes5.value.matched == "的");
+assert(doTestRes5.value.remained == "貓");
+let doThenTestee6 = { _tag: "Some", value: { matched: "", remained: "我我我的貓" } };
+let doTestRes6 = thenDo(thenDo(doThenTestee6, zeroOrMoreDo(compPart1)), compPart2);
+assert(doTestRes6._tag == "Some");
+assert(doTestRes6.value.matched == "我我我的");
+assert(doTestRes6.value.remained == "貓");
+let doThenTestee7 = { _tag: "Some", value: { matched: "", remained: "我的" } };
+let doTestRes7 = thenDo(thenDo(doThenTestee7, notDo(compPart1)), compPart2);
+assert(doTestRes7._tag == "None");
+let doThenTestee8 = { _tag: "Some", value: { matched: "", remained: "妳的" } };
+let doTestRes8 = thenDo(thenDo(doThenTestee8, notDo(compPart1)), compPart2);
+assert(doTestRes8._tag == "Some");
+assert(doTestRes8.value.matched == "妳的");
+let doThenTestee9 = { _tag: "Some", value: { matched: "", remained: "妳的" } };
+let doTestRes9 = thenDo(doThenTestee9, src_1.matchAny);
+assert(doTestRes9._tag == "Some");
+assert(doTestRes9.value.matched == "妳");
+assert(doTestRes9.value.remained == "的");
+(0, src_1.tokenize)("+123");
+(0, src_1.tokenize)("123");
+(0, src_1.tokenize)("-123");
+(0, src_1.tokenize)(" 123");
+try {
+ (0, src_1.tokenize)("c123");
+}
+catch (error) {
+ console.log(error);
+}
+(0, src_1.tokenize)(" ");
+(0, src_1.tokenize)(" ");
+(0, src_1.tokenize)(" \t");
+(0, src_1.tokenize)(" \t123");
+try {
+ (0, src_1.tokenize)(" \t123aaa456");
+}
+catch (error) {
+ console.log(error);
+}
+(0, src_1.tokenize)(" \t123\n456");
+(0, src_1.tokenize)("\"\"");
+(0, src_1.tokenize)("\"123\"");
+(0, src_1.tokenize)("\"1\\\"23\"");
+(0, src_1.tokenize)("\"1\\\"23\" abc123");
+(0, src_1.tokenize)("+0.012");
+(0, src_1.tokenize)("0.0");
+(0, src_1.tokenize)("-222.0");
+(0, src_1.tokenize)("1+1 ==2; 3+8 foo(12)");