2019-02-04 22:26:45 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
< title > S/pc< / title >
2020-03-19 00:03:04 +00:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-02-04 22:26:45 +00:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-03-19 00:03:04 +00:00
< link href = "../inweb.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2019-02-04 22:26:45 +00:00
< / head >
< body >
2020-03-19 00:03:04 +00:00
< nav role = "navigation" >
< h1 > < a href = "../webs.html" > Sources< / a > < / h1 >
< ul >
< li > < a href = "../inweb/index.html" > inweb< / a > < / li >
< / ul >
< h2 > Foundation< / h2 >
< ul >
< li > < a href = "../foundation-module/index.html" > foundation-module< / a > < / li >
< li > < a href = "../foundation-test/index.html" > foundation-test< / a > < / li >
< / ul >
< / nav >
< main role = "main" >
2019-02-10 23:08:53 +00:00
<!-- Weave of 'S/ut' generated by 7 -->
2020-03-19 00:03:04 +00:00
< ul class = "crumbs" > < li > < a href = "../webs.html" > Source< / a > < / li > < li > < a href = "index.html" > foundation-test< / a > < / li > < li > < b > Unit Tests< / b > < / li > < / ul > < p class = "purpose" > A selection of tests for, or demonstrations of, foundation features.< / p >
2019-02-04 22:26:45 +00:00
2020-03-23 15:04:43 +00:00
< ul class = "toc" > < li > < a href = "#SP1" > § 1. Strings< / a > < / li > < li > < a href = "#SP2" > § 2. Literals< / a > < / li > < li > < a href = "#SP3" > § 3. Dictionaries< / a > < / li > < li > < a href = "#SP4" > § 4. Regexp< / a > < / li > < li > < a href = "#SP5" > § 5. Replacements< / a > < / li > < li > < a href = "#SP6" > § 6. Linked lists< / a > < / li > < li > < a href = "#SP7" > § 7. Stacks< / a > < / li > < li > < a href = "#SP8" > § 8. Semantic versions< / a > < / li > < / ul > < hr class = "tocbar" >
2019-02-04 22:26:45 +00:00
< p class = "inwebparagraph" > < a id = "SP1" > < / a > < b > § 1. Strings. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_strings< / span > < span class = "plain" > (< / span > < span class = "identifier" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > S< / span > < span class = "plain" > = < / span > < span class = "identifier" > Str::new_from_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > L< / span > < span class = "string" > "Jack and Jill"< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Setup: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > S< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > T< / span > < span class = "plain" > = < / span > < span class = "identifier" > Str::new_from_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > L< / span > < span class = "string" > " had a great fall"< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Plus: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > T< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::concatenate< / span > < span class = "plain" > (< / span > < span class = "identifier" > S< / span > < span class = "plain" > , < / span > < span class = "identifier" > T< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Concatenation: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > S< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > BB< / span > < span class = "plain" > = < / span > < span class = "identifier" > Str::new_from_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > L< / span > < span class = "string" > " banana bread is fun "< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Setup statically: < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > BB< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::trim_white_space< / span > < span class = "plain" > (< / span > < span class = "identifier" > BB< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Trimmed: < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > BB< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::copy< / span > < span class = "plain" > (< / span > < span class = "identifier" > BB< / span > < span class = "plain" > , < / span > < span class = "identifier" > S< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Copied: < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > BB< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Length: %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > Str::len< / span > < span class = "plain" > (< / span > < span class = "identifier" > BB< / span > < span class = "plain" > ));< / span >
2019-02-04 22:26:45 +00:00
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::put< / span > < span class = "plain" > (< / span > < span class = "identifier" > Str::at< / span > < span class = "plain" > (< / span > < span class = "identifier" > BB< / span > < span class = "plain" > , < / span > < span class = "constant" > 3< / span > < span class = "plain" > ), < / span > < span class = "identifier" > L< / span > < span class = "character" > 'Q'< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Modified: < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > BB< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > A< / span > < span class = "plain" > = < / span > < span class = "identifier" > Str::new_from_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > L< / span > < span class = "string" > "fish"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > B< / span > < span class = "plain" > = < / span > < span class = "identifier" > Str::new_from_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > L< / span > < span class = "string" > "Fish"< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
2020-04-05 17:37:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S eq %S? %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > , < / span > < span class = "identifier" > Str::eq< / span > < span class = "plain" > (< / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S ci-eq %S? %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > , < / span > < span class = "identifier" > Str::eq_insensitive< / span > < span class = "plain" > (< / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S ne %S? %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > , < / span > < span class = "identifier" > Str::ne< / span > < span class = "plain" > (< / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S ci-ne %S? %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > , < / span > < span class = "identifier" > Str::ne_insensitive< / span > < span class = "plain" > (< / span > < span class = "identifier" > A< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > ));< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_strings is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP2" > < / a > < b > § 2. Literals. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_literals< / span > < span class = "plain" > (< / span > < span class = "identifier" > void< / span > < span class = "plain" > ) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > LOG< / span > < span class = "plain" > (< / span > < span class = "string" > "This is \< / span > < span class = "plain" > "< / span > < span class = "string" > tricky"< / span > < span class = "plain" > ); < / span > < span class = "identifier" > LOG< / span > < span class = "plain" > (< / span > < span class = "string" > "%S"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "bananas"< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > z< / span > < span class = "plain" > = < / span > < span class = "character" > '"'< / span > < span class = "plain" > ; < / span > < span class = "identifier" > LOG< / span > < span class = "plain" > (< / span > < span class = "string" > "%S%d"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "peaches"< / span > < span class = "plain" > , < / span > < span class = "identifier" > z< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > A< / span > < span class = "plain" > = < / span > < span class = "identifier" > I< / span > < span class = "string" > "Jackdaws love my big sphinx of quartz"< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "So A is < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > A< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > B< / span > < span class = "plain" > = < / span > < span class = "identifier" > I< / span > < span class = "string" > "Jackdaws love my big sphinx of quartz"< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "So B is < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > B< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > C< / span > < span class = "plain" > = < / span > < span class = "identifier" > I< / span > < span class = "string" > "Jinxed wizards pluck ivy from my quilt"< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "So C is < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > C< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > A< / span > < span class = "plain" > != < / span > < span class = "identifier" > B< / span > < span class = "plain" > ) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "FAIL: A != B\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "and A == B as pointers, too\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_literals is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP3" > < / a > < b > § 3. Dictionaries. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_dictionaries< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > arg< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > dictionary< / span > < span class = "plain" > *< / span > < span class = "identifier" > D< / span > < span class = "plain" > = < / span > < span class = "identifier" > Dictionaries::new< / span > < span class = "plain" > (2, < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Dictionaries::log< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > D< / span > < span class = "plain" > );< / span >
< span class = "identifier" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > F< / span > < span class = "plain" > = < / span > < span class = "identifier" > Filenames::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg< / span > < span class = "plain" > );< / span >
< span class = "identifier" > TextFiles::read< / span > < span class = "plain" > (< / span > < span class = "identifier" > F< / span > < span class = "plain" > , < / span > < span class = "identifier" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read file of test cases"< / span > < span class = "plain" > , < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "identifier" > Unit::test_dictionaries_helper1< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > D< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Dictionaries::log< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > D< / span > < span class = "plain" > );< / span >
< span class = "identifier" > TextFiles::read< / span > < span class = "plain" > (< / span > < span class = "identifier" > F< / span > < span class = "plain" > , < / span > < span class = "identifier" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to reread file of test cases"< / span > < span class = "plain" > , < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "identifier" > Unit::test_dictionaries_helper2< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > D< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Dictionaries::log< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > D< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_dictionaries_helper1< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "identifier" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > vD< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > dictionary< / span > < span class = "plain" > *< / span > < span class = "identifier" > D< / span > < span class = "plain" > = (< / span > < span class = "identifier" > dictionary< / span > < span class = "plain" > *) < / span > < span class = "identifier" > vD< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::create_mr< / span > < span class = "plain" > ();< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > " *"< / span > < span class = "plain" > )) < / span > < span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > "%'(%c*?)%' %'(%c*)%'"< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Dictionaries::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]) == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Creating new entry < %S> \< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]);< / span >
< span class = "identifier" > Dictionaries::create_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]);< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Dictionaries::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]) == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Didn't create\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::copy< / span > < span class = "plain" > (< / span > < span class = "identifier" > Dictionaries::get_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]), < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [1]);< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (!< / span > < span class = "identifier" > Str::eq< / span > < span class = "plain" > (< / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [1], < / span > < span class = "identifier" > Dictionaries::get_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0])))< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "FAIL: can't read back entry once written\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Regexp::dispose_of< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Errors::in_text_file< / span > < span class = "plain" > (< / span > < span class = "string" > "test case won't parse"< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_dictionaries_helper2< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "identifier" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > vD< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > dictionary< / span > < span class = "plain" > *< / span > < span class = "identifier" > D< / span > < span class = "plain" > = (< / span > < span class = "identifier" > dictionary< / span > < span class = "plain" > *) < / span > < span class = "identifier" > vD< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::create_mr< / span > < span class = "plain" > ();< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > " *"< / span > < span class = "plain" > )) < / span > < span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > "%'(%c*?)%' %'(%c*)%'"< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Dictionaries::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]) == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Missing %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]);< / span >
2020-04-05 00:03:36 +00:00
< span class = "plain" > } < / span > < span class = "identifier" > else< / span > < span class = "plain" > {< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Dictionaries::destroy< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0]);< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Dictionaries::find< / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0])) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Didn't destroy\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Regexp::dispose_of< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Errors::in_text_file< / span > < span class = "plain" > (< / span > < span class = "string" > "test case won't parse"< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_dictionaries is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "endnote" > The function Unit::test_dictionaries_helper1 appears nowhere else.< / p >
< p class = "endnote" > The function Unit::test_dictionaries_helper2 appears nowhere else.< / p >
< p class = "inwebparagraph" > < a id = "SP4" > < / a > < b > § 4. Regexp. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_regexp< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > arg< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > F< / span > < span class = "plain" > = < / span > < span class = "identifier" > Filenames::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg< / span > < span class = "plain" > );< / span >
< span class = "identifier" > TextFiles::read< / span > < span class = "plain" > (< / span > < span class = "identifier" > F< / span > < span class = "plain" > , < / span > < span class = "identifier" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read file of test cases"< / span > < span class = "plain" > , < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "identifier" > Unit::test_regexp_helper< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_regexp_helper< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "identifier" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > state< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::create_mr< / span > < span class = "plain" > ();< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > " *"< / span > < span class = "plain" > )) < / span > < span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > "%'(%c*?)%' %'(%c*)%'"< / span > < span class = "plain" > )) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > wchar_t< / span > < span class = "plain" > < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > [1024];< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::copy_to_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > pattern< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [1], < / span > < span class = "constant" > 1024< / span > < span class = "plain" > );< / span >
< span class = "identifier" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr2< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::create_mr< / span > < span class = "plain" > ();< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Text < %S> pattern < %w> : "< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > );< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr2< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > )) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Match"< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > =0; < / span > < span class = "identifier" > i< / span > < span class = "plain" > < < / span > < span class = "identifier" > mr2< / span > < span class = "plain" > .< / span > < span class = "identifier" > no_matched_texts< / span > < span class = "plain" > ; < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++)< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > " %d=< %S> "< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr2< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [< / span > < span class = "identifier" > i< / span > < span class = "plain" > ]);< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Regexp::dispose_of< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr2< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "plain" > } < / span > < span class = "identifier" > else< / span > < span class = "plain" > {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "No match\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Regexp::dispose_of< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Errors::in_text_file< / span > < span class = "plain" > (< / span > < span class = "string" > "test case won't parse"< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_regexp is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "endnote" > The function Unit::test_regexp_helper appears nowhere else.< / p >
< p class = "inwebparagraph" > < a id = "SP5" > < / a > < b > § 5. Replacements. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_replacement< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > arg< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > F< / span > < span class = "plain" > = < / span > < span class = "identifier" > Filenames::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > arg< / span > < span class = "plain" > );< / span >
< span class = "identifier" > TextFiles::read< / span > < span class = "plain" > (< / span > < span class = "identifier" > F< / span > < span class = "plain" > , < / span > < span class = "identifier" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read file of test cases"< / span > < span class = "plain" > , < / span > < span class = "identifier" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "identifier" > Unit::test_replacement_helper< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_replacement_helper< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "identifier" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > state< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::create_mr< / span > < span class = "plain" > ();< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > " *"< / span > < span class = "plain" > )) < / span > < span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > Regexp::match< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > L< / span > < span class = "string" > "%'(%c*?)%' %'(%c*?)%' %'(%c*)%'"< / span > < span class = "plain" > )) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > wchar_t< / span > < span class = "plain" > < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > [1024];< / span >
< span class = "identifier" > wchar_t< / span > < span class = "plain" > < / span > < span class = "identifier" > replacement< / span > < span class = "plain" > [1024];< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Str::copy_to_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > pattern< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [1], < / span > < span class = "constant" > 1024< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Str::copy_to_wide_string< / span > < span class = "plain" > (< / span > < span class = "identifier" > replacement< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [2], < / span > < span class = "constant" > 1024< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Text < %S> pattern < %w> replacement < %w> : "< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > , < / span > < span class = "identifier" > replacement< / span > < span class = "plain" > );< / span >
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > rc< / span > < span class = "plain" > = < / span > < span class = "identifier" > Regexp::replace< / span > < span class = "plain" > (< / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > pattern< / span > < span class = "plain" > , < / span > < span class = "identifier" > replacement< / span > < span class = "plain" > , < / span > < span class = "identifier" > REP_REPEATING< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S (%d replacement%s)\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "identifier" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > rc< / span > < span class = "plain" > , (< / span > < span class = "identifier" > rc< / span > < span class = "plain" > == < / span > < span class = "constant" > 1< / span > < span class = "plain" > )?< / span > < span class = "string" > ""< / span > < span class = "plain" > :< / span > < span class = "string" > "s"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Regexp::dispose_of< / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > return< / span > < span class = "plain" > ;< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Errors::in_text_file< / span > < span class = "plain" > (< / span > < span class = "string" > "test case won't parse"< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_replacement is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "endnote" > The function Unit::test_replacement_helper appears nowhere else.< / p >
< p class = "inwebparagraph" > < a id = "SP6" > < / a > < b > § 6. Linked lists. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_linked_lists< / span > < span class = "plain" > (< / span > < span class = "identifier" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > linked_list< / span > < span class = "plain" > *< / span > < span class = "identifier" > test_list< / span > < span class = "plain" > = < / span > < span class = "identifier" > NEW_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "List (which should be empty) contains:\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_list< / span > < span class = "plain" > ) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > for< / span > < span class = "plain" > (< / span > < span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > i< / span > < span class = "plain" > = < / span > < span class = "constant" > 1< / span > < span class = "plain" > ; < / span > < span class = "identifier" > i< / span > < span class = "plain" > < 17; < / span > < span class = "identifier" > i< / span > < span class = "plain" > ++) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > TEMPORARY_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > T< / span > < span class = "plain" > );< / span >
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > T< / span > < span class = "plain" > , < / span > < span class = "string" > "S%d"< / span > < span class = "plain" > , < / span > < span class = "identifier" > i< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > ADD_TO_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > Str::duplicate< / span > < span class = "plain" > (< / span > < span class = "identifier" > T< / span > < span class = "plain" > ), < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_list< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > DISCARD_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > T< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "List contains:\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > LOOP_OVER_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_list< / span > < span class = "plain" > ) {< / span >
2019-02-04 22:26:45 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "%S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "And has length %d\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > LinkedLists::len< / span > < span class = "plain" > (< / span > < span class = "identifier" > test_list< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "First is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > FIRST_IN_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_list< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Last is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > LAST_IN_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_list< / span > < span class = "plain" > ));< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_linked_lists is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
< p class = "inwebparagraph" > < a id = "SP7" > < / a > < b > § 7. Stacks. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_stacks< / span > < span class = "plain" > (< / span > < span class = "identifier" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > lifo_stack< / span > < span class = "plain" > *< / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > = < / span > < span class = "identifier" > NEW_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PUSH_TO_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "string" > "Mercury"< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PUSH_TO_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "string" > "Venus"< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > POP_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PUSH_TO_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "string" > "Earth"< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > POP_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "identifier" > POP_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > );< / span >
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Top of stack is: %S\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > TOP_OF_LIFO_STACK< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > ));< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > LIFO_STACK_EMPTY< / span > < span class = "plain" > (< / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > , < / span > < span class = "identifier" > test_stack< / span > < span class = "plain" > )) < / span > < span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "Stack is empty\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2019-02-04 22:26:45 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_stacks is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
2020-03-23 15:04:43 +00:00
< p class = "inwebparagraph" > < a id = "SP8" > < / a > < b > § 8. Semantic versions. < / b > < / p >
< pre class = "display" >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
< span class = "identifier" > semver_range< / span > < span class = "plain" > *< / span > < span class = "identifier" > R< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::compatibility_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "Compatibility range of %v = "< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > R< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_least_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "At-least range of %v = "< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > R< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_most_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "At-most range of %v = "< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUTPUT_STREAM< / span > < span class = "plain" > ,< / span >
< span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text1< / span > < span class = "plain" > , < / span > < span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > r1< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text2< / span > < span class = "plain" > , < / span > < span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > r2< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V1< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > semver_range< / span > < span class = "plain" > *< / span > < span class = "identifier" > R1< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r1< / span > < span class = "plain" > == < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R1< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::compatibility_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r1< / span > < span class = "plain" > > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R1< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_least_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r1< / span > < span class = "plain" > < < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R1< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_most_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V2< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > semver_range< / span > < span class = "plain" > *< / span > < span class = "identifier" > R2< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r2< / span > < span class = "plain" > == < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R2< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::compatibility_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r2< / span > < span class = "plain" > > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R2< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_least_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > r2< / span > < span class = "plain" > < < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) < / span > < span class = "identifier" > R2< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::at_most_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R1< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > " intersect "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R2< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > " = "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > changed< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumberRanges::intersect_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > R1< / span > < span class = "plain" > , < / span > < span class = "identifier" > R2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > VersionNumberRanges::write_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > R1< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > changed< / span > < span class = "plain" > ) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > " -- changed"< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "'%S' --> %v\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > , < / span > < span class = "identifier" > text< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text1< / span > < span class = "plain" > , < / span > < span class = "identifier" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text2< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V1< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > semantic_version_number< / span > < span class = "plain" > < / span > < span class = "identifier" > V2< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::from_text< / span > < span class = "plain" > (< / span > < span class = "identifier" > text2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > gt< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::gt< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > , < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > eq< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::eq< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > , < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > lt< / span > < span class = "plain" > = < / span > < span class = "identifier" > VersionNumbers::lt< / span > < span class = "plain" > (< / span > < span class = "identifier" > V1< / span > < span class = "plain" > , < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
2020-04-05 00:03:36 +00:00
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > lt< / span > < span class = "plain" > ) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%v < %v"< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V1< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > eq< / span > < span class = "plain" > ) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%v = %v"< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V1< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
< span class = "identifier" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > gt< / span > < span class = "plain" > ) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%v > %v"< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V1< / span > < span class = "plain" > , & < / span > < span class = "identifier" > V2< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > void< / span > < span class = "plain" > < / span > < span class = "identifier" > Unit::test_semver< / span > < span class = "plain" > (< / span > < span class = "identifier" > void< / span > < span class = "plain" > ) {< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "71.0.45672"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3.4"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "9/861022"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "9/86102"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "9/8610223"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "9/861022.2"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "9/861022/2"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3-alpha.0.x45.1789"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1+lobster"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2+lobster"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3+lobster"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_read_write< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3-beta.2+shellfish"< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "5"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.0"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.0.0"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.5"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.2.5"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41+arm64"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-pre.0.1"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.72"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.8"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.72a"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.8a"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.72"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-beta.72"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.72"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.1.41-alpha.72.zeta"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_precedence< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3+lobster.54"< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "1.2.3+lobster.100"< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Unit::test_range< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2-kappa.17"< / span > < span class = "plain" > );< / span >
2020-03-23 15:04:43 +00:00
< span class = "identifier" > PRINT< / span > < span class = "plain" > (< / span > < span class = "string" > "\< / span > < span class = "plain" > n< / span > < span class = "string" > "< / span > < span class = "plain" > );< / span >
2020-04-05 17:37:43 +00:00
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2-kappa.17"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.5.5"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2-kappa.17"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.9.1"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.9.1"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2-kappa.17"< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2"< / span > < span class = "plain" > , < / span > < span class = "constant" > 1< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.5.5"< / span > < span class = "plain" > , < / span > < span class = "constant" > 1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2"< / span > < span class = "plain" > , < / span > < span class = "constant" > 1< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.5.5"< / span > < span class = "plain" > , -1);< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2"< / span > < span class = "plain" > , -1, < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.5.5"< / span > < span class = "plain" > , < / span > < span class = "constant" > 1< / span > < span class = "plain" > );< / span >
< span class = "identifier" > Unit::test_intersect< / span > < span class = "plain" > (< / span > < span class = "identifier" > STDOUT< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "6.4.2"< / span > < span class = "plain" > , -1, < / span > < span class = "identifier" > I< / span > < span class = "string" > "3.5.5"< / span > < span class = "plain" > , -1);< / span >
2020-03-23 15:04:43 +00:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "endnote" > The function Unit::test_range appears nowhere else.< / p >
< p class = "endnote" > The function Unit::test_intersect appears nowhere else.< / p >
< p class = "endnote" > The function Unit::test_read_write appears nowhere else.< / p >
< p class = "endnote" > The function Unit::test_precedence appears nowhere else.< / p >
< p class = "endnote" > The function Unit::test_semver is used in S/pc (< a href = "S-pc.html#SP1" > § 1< / a > ).< / p >
2019-03-12 23:32:12 +00:00
< hr class = "tocbar" >
< ul class = "toc" > < li > < a href = "S-pc.html" > Back to 'Program Control'< / a > < / li > < li > < i > (This section ends Sections.)< / i > < / li > < / ul > < hr class = "tocbar" >
2019-03-18 11:16:10 +00:00
<!-- End of weave -->
2020-03-19 00:03:04 +00:00
< / main >
2019-02-04 22:26:45 +00:00
< / body >
< / html >