Monday, November 08, 2010 at 12:05 AM.

system.verbs.builtins.re.testing.stressTest

if defined (system.compiler.["kernel"].re) {
	bundle { //re.match
		local (patternRef, matchInfo, s1 = "a123four", s2 = "bop bebe bop");
		patternRef = re.compile ("[a-zA-Z]+[0-9]+");
		if not re.match (patternRef, s1, adrMatchInfoTable:@matchInfo) {
			scripterror ("re.match is broken.")};
		if matchInfo.matchString != "a123" {
			scripterror ("re.match is broken.")};
		patternRef = re.compile ("(be){1,2}");
		if not re.match (patternRef, s2, adrMatchInfoTable:@matchInfo) {
			scripterror ("re.search is broken.")};
		if matchInfo.matchString != "bebe" {
			scripterror ("re.search is broken.")}};
	bundle { //re.extract
		local {
			patternRef;
			complexLinkPat = "<a[ \t\r\n]*[^>]*href[ \t\r\n]*=[ \t\r\n]*\"?([-_~%@:/\\.A-Za-z0-9]+)\"?[^>]*>([^<]*)";
			simpleLinkPat = "<a[ \t\r\n]+[^>]*href[ \t\r\n]*=[ \t\r\n]*\"([^\"]*)\"[^>]*>([^<]*)";
			s = string (regex.examples.data.html);
			theList};
		
		patternRef = re.compile (simpleLinkPat);
		theList = re.extract (patternRef, s, {2,1});
		if sizeOf (theList) != 59 {
			scripterror ("re.extract is broken.")};
		if theList[57][1] != "Roget's Thesaurus:" {
			scripterror ("re.extract is broken.")};
		if theList[57][2] != "http://www2.thesaurus.com/thesaurus/" {
			scripterror ("re.extract is broken.")};
		
		patternRef = re.compile (simpleLinkPat);
		theList = re.extract (patternRef, s, {2,1});
		if sizeOf (theList) != 59 {
			scripterror ("re.extract is broken.")};
		if theList[25][1] != "FileMaker" {
			scripterror ("re.extract is broken.")};
		if theList[25][2] != "http://www.scripting.com/apps/filemaker.html" {
			scripterror ("re.extract is broken.")}};
	bundle { //re.grep
		local (patternRef);
		local (theList = {"aa", "aab", "a", "ab", ""});
		local (s = "aa\raab\ra\rab\r\r");
		patternRef = re.compile ("^aa");
		if re.grep (patternRef, theList) != {"aa", "aab"} {
			scripterror ("re.grep is broken.")};
		if re.grep (patternRef, s) != {"aa", "aab"} {
			scripterror ("re.grep is broken.")};
		if re.grep (patternRef, theList, flIncludeMatches:false) != {"a", "ab", ""} {
			scripterror ("re.grep is broken.")};
		if re.grep (patternRef, s, flIncludeMatches:false) != {"a", "ab", ""} {
			scripterror ("re.grep is broken.")}};
	bundle { //re.join
		local (listA = {"a", "b", "c"}, listB = {"abcd", "", "efgh", ""});
		if re.join ("|", listA) != "a|b|c" {
			scripterror ("re.join is broken.")};
		if re.join ("", listA) != "abc" {
			scripterror ("re.join is broken.")};
		if re.join ("+/+", listB) != "abcd+/++/+efgh+/+" {
			scripterror ("re.join is broken.")}};
	bundle { //re.split
		local (patternRef);
		local (s = "<title>test</title>\r<body>\rtest body\r</body>");
		
		patternRef = re.compile ("<[^>]*>");
		if re.split (patternRef, s) != {"", "test", "\r", "\rtest body\r", ""} {
			scripterror ("re.split is broken.")};
		if re.split (patternRef, s, maxSplits:4) != {"", "test", "\r", "\rtest body\r</body>"} {
			scripterror ("re.split is broken.")};
		
		patternRef = re.compile ("(<[^>]*>)");
		if re.split (patternRef, s) != {"", "<title>", "test", "</title>", "\r", "<body>",  "\rtest body\r", "</body>", ""} {
			scripterror ("re.split is broken.")};
		if re.split (patternRef, s, maxSplits:3) != {"", "<title>", "test", "</title>", "\r<body>\rtest body\r</body>"} {
			scripterror ("re.split is broken.")};
		
		local (s2 = "aBcDeFg");
		patternRef = re.compile ("[a-z]+", flCaseSensitive:true);
		if re.split (patternRef, s2) != {"", "B", "D", "F", ""} {
			scripterror ("re.split is broken.")};
		patternRef = re.compile ("[^a-z]+", flCaseSensitive:true);
		if re.split (patternRef, s2) != {"a", "c", "e", "g"} {
			scripterror ("re.split is broken.")};
		
		patternRef = re.compile ("[A-Z]+", flCaseSensitive:true);
		if re.split (patternRef, s2) != {"a", "c", "e", "g"} {
			scripterror ("re.split is broken.")};
		patternRef = re.compile ("[^A-Z]+", flCaseSensitive:true);
		if re.split (patternRef, s2) != {"", "B", "D", "F", ""} {
			scripterror ("re.split is broken.")}};
	bundle { //re.replace
		local (patternRef, ct);
		local (s = "To be or not to be", s2);
		
		patternRef = re.compile ("(be)");
		s = re.replace (patternRef, "\\1BOP", s);
		if s != "To beBOP or not to beBOP" {
			scripterror ("re.replace is broken")};
		
		patternRef = re.compile ("(be)(bop)", flCaseSensitive:false);
		s = re.replace (patternRef, "\\2\\1", s);
		if s != "To BOPbe or not to BOPbe" {
			scripterror ("re.replace is broken")};
		
		patternRef = re.compile ("(BOP)(be)");
		s = re.replace (patternRef, "\\2\\1", s, maxReplacements:1);
		if s != "To beBOP or not to BOPbe" {
			scripterror ("re.replace is broken")};
		
		patternRef = re.compile ("(BOP)(be)");
		s = re.replace (patternRef, "\\2\\1", s, adrReplacementCount:@ct);
		if s != "To beBOP or not to beBOP" {
			scripterror ("re.replace is broken")};
		if ct != 1 {
			scripterror ("re.replace is broken")};
		
		local (test = "Check http://www.muppets.com/~gonzo/ for more info, send your q's to mailto:gonzo@muppets.com.");
		local (result = "Check <A HREF=\"http://www.muppets.com/~gonzo/\">http://www.muppets.com/~gonzo/</A> for more info, send your q's to <A HREF=\"mailto:gonzo@muppets.com\">mailto:gonzo@muppets.com</A>.");
		patternRef = re.compile ("(http|mailto)(:[/]*[A-Za-z0-9]+[-_~%@:/\\.A-Za-z0-9]+[A-Za-z/0-9])");
		test = re.replace (patternRef, "<A HREF=\"\\1\\2\">\\0</A>", test);
		if test != result {
			scripterror ("re.replace is broken.")}};
	bundle { //re.visit
		local (hits = 0);
		local (test = " <A  href  ='index.html' > <A href=      'index2.html'     >    ");
		on testCallback (adrTable) {
			case ++hits {
				1 {
					if adrTable^.matchOffset != 2 {
						scripterror ("re.visit is broken.")};
					if adrTable^.matchLength != 25 {
						scripterror ("re.visit is broken.")};
					if adrTable^.matchString != "<A  href  ='index.html' >" {
						scripterror ("re.visit is broken.")}};
				2 {
					if adrTable^.matchOffset != 28 {
						scripterror ("re.visit is broken.")};
					if adrTable^.matchLength != 33 {
						scripterror ("re.visit is broken.")};
					if adrTable^.matchString != "<A href=      'index2.html'     >" {
						scripterror ("re.visit is broken.")}}}
			else {
				scripterror ("re.visit is broken.")};
			return (true)};
		local (patternRef = re.compile ("<([^>]+)>"));
		re.visit (patternRef, test, @testCallback);
		if hits != 2 {
			scripterror ("re.visit is broken.")}};
	bundle { //re.expand
		local (pat, mi);
		pat = re.compile ("(?P<date>(?P<year>(\\d\\d)?\\d\\d)-(?P<month>\\d\\d)-(?P<day>\\d\\d))", flAutoCapture:false);
		if re.match (pat, "2003-05-30", adrMatchInfoTable:@mi, flMakeGroups:true, flMakeNamedGroups:true) {
			if re.expand ("\\g<day>.\\g<month>.\\g<year>", @mi) != "30.05.2003" {
				scripterror ("re.expand is broken")};
			if re.expand ("\\g<4>.\\g<3>.\\g<2>", @mi) != "30.05.2003" {
				scripterror ("re.expand is broken")};
			if re.expand ("\\4.\\3.\\2", @mi) != "30.05.2003" {
				scripterror ("re.expand is broken")}}}};
dialog.notify ("No problems found.")



This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.