2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2020-04-14 19:56:54 +03:00
< title > Problem Coverage< / title >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-03-17 14:40:57 +02:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-03-19 02:11:25 +02:00
< link href = "../inweb.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2019-03-17 14:40:57 +02:00
< / head >
< body >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2020-04-14 19:56:54 +03:00
< h1 > < a href = "../index.html" >
< img src = "../docs-src/Figures/Inform.png" height = 72" >
< / a > < / h1 >
< ul > < li > < a href = "../compiler.html" > compiler tools< / a > < / li >
< li > < a href = "../other.html" > other tools< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../extensions.html" > extensions and kits< / a > < / li >
< li > < a href = "../units.html" > unit test tools< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Other Tools< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< li > < a href = "../inblorb/index.html" > inblorb< / a > < / li >
< li > < a href = "../indoc/index.html" > indoc< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "index.html" > < span class = "selectedlink" > inpolicy< / span > < / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../inrtps/index.html" > inrtps< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Foundation< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< li > < a href = "../../../inweb/docs/foundation-module/index.html" > foundation< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2020-04-14 19:56:54 +03:00
<!-- Weave of 'Problem Coverage' generated by 7 -->
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../other.html" > Other Tools< / a > < / li > < li > < a href = "index.html" > inpolicy< / a > < / li > < li > < a href = "index.html#2" > Chapter 2: Policies< / a > < / li > < li > < b > Problem Coverage< / b > < / li > < / ul > < p class = "purpose" > To see which problem messages have test cases and which are linked to the documentation.< / p >
2019-03-17 14:40:57 +02:00
2020-04-02 15:31:21 +03:00
< ul class = "toc" > < li > < a href = "#SP1" > § 1. Observation< / a > < / li > < li > < a href = "#SP3" > § 3. Problems which have test cases< / a > < / li > < li > < a href = "#SP4" > § 4. Problems mentioned in documentation< / a > < / li > < li > < a href = "#SP5" > § 5. Problems generated in the I7 source< / a > < / li > < li > < a href = "#SP7" > § 7. Checking< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
< p class = "inwebparagraph" > < a id = "SP1" > < / a > < b > § 1. Observation. < / b > Problem messages are identified by their code-names, e.g., < code class = "display" > < span class = "extract" > PM_MisplacedFrom< / span > < / code > ;
those names should be unique, but any number of problems can instead be
marked with one of three special names.
< / p >
< p class = "inwebparagraph" > Problems can be mentioned in the code, in the documentation, or in the
set of Inform test cases.
< / p >
< pre class = "definitions" >
2020-04-14 19:56:54 +03:00
< span class = "definitionkeyword" > define< / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000001< / span > < span class = "plain" > < / span > < span class = "comment" > mentioned in test cases< / span >
< span class = "definitionkeyword" > define< / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000002< / span > < span class = "plain" > < / span > < span class = "comment" > mentioned in documentation< / span >
< span class = "definitionkeyword" > define< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000004< / span > < span class = "plain" > < / span > < span class = "comment" > mentioned in source code< / span >
< span class = "definitionkeyword" > define< / span > < span class = "constant" > IMPOSSIBLE_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000008< / span > < span class = "plain" > < / span > < span class = "comment" > this is < code class = "display" > < span class = "extract" > BelievedImpossible< / span > < / code > < / span >
< span class = "definitionkeyword" > define< / span > < span class = "constant" > UNTESTABLE_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000010< / span > < span class = "plain" > < / span > < span class = "comment" > this is < code class = "display" > < span class = "extract" > Untestable< / span > < / code > < / span >
< span class = "definitionkeyword" > define< / span > < span class = "constant" > NAMELESS_PCON< / span > < span class = "plain" > < / span > < span class = "constant" > 0x00000020< / span > < span class = "plain" > < / span > < span class = "comment" > this is < code class = "display" > < span class = "extract" > ...< / span > < / code > < / span >
2019-03-17 14:40:57 +02:00
< / pre >
< pre class = "display" >
< span class = "reserved" > typedef< / span > < span class = "plain" > < / span > < span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > {< / span >
< span class = "reserved" > struct< / span > < span class = "plain" > < / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > name< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > contexts_observed< / span > < span class = "plain" > ; < / span > < span class = "comment" > bitmap of the above bits< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > contexts_observed_multiple_times< / span > < span class = "plain" > ; < / span > < span class = "comment" > bitmap of the above bits< / span >
2019-03-17 14:40:57 +02:00
< span class = "constant" > MEMORY_MANAGEMENT< / span >
< span class = "plain" > } < / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-03-23 23:42:00 +02:00
< p class = "endnote" > The structure known_problem is private to this section.< / p >
2019-03-17 14:40:57 +02:00
< p class = "inwebparagraph" > < a id = "SP2" > < / a > < b > § 2. < / b > When a problem is observed, we create a dictionary entry for it, if necessary,
and augment its bitmap of known contexts:
< / p >
< pre class = "display" >
< span class = "reserved" > dictionary< / span > < span class = "plain" > *< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::observe_problem< button class = "popup" onclick = "togglePopup('usagePopup2')" > ...< span class = "popuptext" id = "usagePopup2" > Usage of < b > Coverage::observe_problem< / b > :< br > < a href = "#SP3" > § 3< / a > , < a href = "#SP4" > § 4< / a > , < a href = "#SP6" > § 6< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > context< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > == < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > )< / span >
2020-04-14 19:56:54 +03:00
< span class = "identifier" > problems_dictionary< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "2-dct.html#SP2" > Dictionaries::new< / a > < / span > < span class = "plain" > (1000, < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > known_problem< / span > < span class = "plain" > *< / span > < span class = "identifier" > KP< / span > < span class = "plain" > = < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "2-dct.html#SP5" > Dictionaries::find< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > , < / span > < span class = "identifier" > name< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > = (< / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > *) < / span > < span class = "functiontext" > < a href = "2-dct.html#SP8" > Dictionaries::read_value< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > , < / span > < span class = "identifier" > name< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > } < / span > < span class = "reserved" > else< / span > < span class = "plain" > {< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > = < / span > < span class = "identifier" > CREATE< / span > < span class = "plain" > (< / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "2-dct.html#SP5" > Dictionaries::create< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > , < / span > < span class = "identifier" > name< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > < a href = "2-dct.html#SP8" > Dictionaries::write_value< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > problems_dictionary< / span > < span class = "plain" > , < / span > < span class = "identifier" > name< / span > < span class = "plain" > , (< / span > < span class = "reserved" > void< / span > < span class = "plain" > *) < / span > < span class = "identifier" > KP< / span > < span class = "plain" > );< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > name< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "4-sm.html#SP3" > Str::duplicate< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > );< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed< / span > < span class = "plain" > = < / span > < span class = "constant" > 0< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed_multiple_times< / span > < span class = "plain" > = < / span > < span class = "constant" > 0< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed< / span > < span class = "plain" > & < / span > < span class = "identifier" > context< / span > < span class = "plain" > )< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed_multiple_times< / span > < span class = "plain" > |= < / span > < span class = "identifier" > context< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed< / span > < span class = "plain" > |= < / span > < span class = "identifier" > context< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP3" > < / a > < b > § 3. Problems which have test cases. < / b > Here we ask Intest to produce a roster of all known test cases, then parse
this back to look for cases whose names have the < code class = "display" > < span class = "extract" > PM_...< / span > < / code > format. Those are
the problem message test cases, so we observe them.
< / p >
< pre class = "display" >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::which_problems_have_test_cases< button class = "popup" onclick = "togglePopup('usagePopup3')" > ...< span class = "popuptext" id = "usagePopup3" > Usage of < b > Coverage::which_problems_have_test_cases< / b > :< br > < a href = "#SP7_1" > § 7.1< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > CAT< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-fln.html#SP2" > Filenames::in_folder< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > path_to_inpolicy_workspace< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "cases.txt"< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > TEMPORARY_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > COMMAND< / span > < span class = "plain" > );< / span >
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > COMMAND< / span > < span class = "plain" > , < / span > < span class = "string" > "../intest/Tangled/intest inform7 -catalogue "< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "3-shl.html#SP4" > Shell::redirect< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > COMMAND< / span > < span class = "plain" > , < / span > < span class = "identifier" > CAT< / span > < span class = "plain" > );< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "3-shl.html#SP5" > Shell::run< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > COMMAND< / span > < span class = "plain" > )) < / span > < span class = "functiontext" > < a href = "3-em.html#SP2" > Errors::fatal< / a > < / span > < span class = "plain" > (< / span > < span class = "string" > "can't run intest to harvest cases"< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > DISCARD_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > COMMAND< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "4-tf.html#SP5" > TextFiles::read< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > CAT< / span > < span class = "plain" > , < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read roster of test cases"< / span > < span class = "plain" > , < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "functiontext" > < a href = "#SP3" > Coverage::test_case_harvester< / a > < / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::test_case_harvester< button class = "popup" onclick = "togglePopup('usagePopup4')" > ...< span class = "popuptext" id = "usagePopup4" > Usage of < b > Coverage::test_case_harvester< / b > :< br > none< / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "reserved" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "reserved" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > state< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::create_mr< / a > < / span > < span class = "plain" > ();< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-pm.html#SP10" > Regexp::match< / a > < / 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" > "(PM_%C+)%c*"< / span > < span class = "plain" > ))< / span >
< span class = "functiontext" > < a href = "#SP2" > Coverage::observe_problem< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [0], < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::dispose_of< / a > < / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
< p class = "inwebparagraph" > < a id = "SP4" > < / a > < b > § 4. Problems mentioned in documentation. < / b > Here we look through the "Writing with Inform" source text for cross-references
to problem messages:
< / p >
< pre class = "display" >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::which_problems_are_referenced< button class = "popup" onclick = "togglePopup('usagePopup5')" > ...< span class = "popuptext" id = "usagePopup5" > Usage of < b > Coverage::which_problems_are_referenced< / b > :< br > < a href = "#SP7_1" > § 7.1< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > pathname< / span > < span class = "plain" > *< / span > < span class = "identifier" > D< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-pth.html#SP5" > Pathnames::from_text< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > I< / span > < span class = "string" > "resources"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > D< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-pth.html#SP4" > Pathnames::subfolder< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Documentation"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > WWI< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-fln.html#SP2" > Filenames::in_folder< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > D< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Writing with Inform.txt"< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > < a href = "4-tf.html#SP5" > TextFiles::read< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > WWI< / span > < span class = "plain" > , < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read 'Writing with Inform' source text"< / span > < span class = "plain" > , < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ,< / span >
< span class = "plain" > & < / span > < span class = "functiontext" > < a href = "#SP4" > Coverage::xref_harvester< / a > < / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::xref_harvester< button class = "popup" onclick = "togglePopup('usagePopup6')" > ...< span class = "popuptext" id = "usagePopup6" > Usage of < b > Coverage::xref_harvester< / b > :< br > none< / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "reserved" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "reserved" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > state< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::create_mr< / a > < / span > < span class = "plain" > ();< / span >
< span class = "reserved" > while< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-pm.html#SP10" > Regexp::match< / a > < / 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*)%{(PM_%C+?)%}(%c*)"< / span > < span class = "plain" > )) {< / span >
< span class = "functiontext" > < a href = "#SP2" > Coverage::observe_problem< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [1], < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > );< / span >
< span class = "functiontext" > < a href = "4-sm.html#SP15" > Str::clear< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "string" > "%S%S"< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [2]);< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::dispose_of< / a > < / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP5" > < / a > < b > § 5. Problems generated in the I7 source. < / b > Which is to say, actually existing problem messages.
2019-03-17 14:40:57 +02:00
< / p >
< pre class = "display" >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::which_problems_exist< button class = "popup" onclick = "togglePopup('usagePopup7')" > ...< span class = "popuptext" id = "usagePopup7" > Usage of < b > Coverage::which_problems_exist< / b > :< br > < a href = "#SP7_1" > § 7.1< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > void< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > pathname< / span > < span class = "plain" > *< / span > < span class = "identifier" > tools< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-pth.html#SP7" > Pathnames::up< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > path_to_inpolicy< / span > < span class = "plain" > );< / span >
< span class = "reserved" > pathname< / span > < span class = "plain" > *< / span > < span class = "identifier" > path_to_inweb< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-pth.html#SP4" > Pathnames::subfolder< / a > < / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "3-pth.html#SP7" > Pathnames::up< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > tools< / span > < span class = "plain" > ), < / span > < span class = "identifier" > I< / span > < span class = "string" > "inweb"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > pathname< / span > < span class = "plain" > *< / span > < span class = "identifier" > path_to_inform7< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "3-pth.html#SP4" > Pathnames::subfolder< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > tools< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "inform7"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > web_md< / span > < span class = "plain" > *< / span > < span class = "identifier" > Wm< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "8-ws.html#SP5" > WebMetadata::get< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > path_to_inform7< / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "constant" > V2_SYNTAX< / span > < span class = "plain" > ,< / span >
2020-04-02 15:31:21 +03:00
< span class = "identifier" > NULL< / span > < span class = "plain" > , < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > , < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > , < / span > < span class = "identifier" > path_to_inweb< / span > < span class = "plain" > );< / span >
< span class = "reserved" > chapter_md< / span > < span class = "plain" > *< / span > < span class = "identifier" > Cm< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > LOOP_OVER_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > Cm< / span > < span class = "plain" > , < / span > < span class = "reserved" > chapter_md< / span > < span class = "plain" > , < / span > < span class = "identifier" > Wm< / span > < span class = "plain" > -> < / span > < span class = "element" > chapters_md< / span > < span class = "plain" > ) {< / span >
2020-04-02 15:31:21 +03:00
< span class = "reserved" > section_md< / span > < span class = "plain" > *< / span > < span class = "identifier" > Sm< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > LOOP_OVER_LINKED_LIST< / span > < span class = "plain" > (< / span > < span class = "identifier" > Sm< / span > < span class = "plain" > , < / span > < span class = "reserved" > section_md< / span > < span class = "plain" > , < / span > < span class = "identifier" > Cm< / span > < span class = "plain" > -> < / span > < span class = "element" > sections_md< / span > < span class = "plain" > ) {< / span >
< span class = "reserved" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > SF< / span > < span class = "plain" > = < / span > < span class = "identifier" > Sm< / span > < span class = "plain" > -> < / span > < span class = "element" > source_file_for_section< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "4-tf.html#SP5" > TextFiles::read< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > SF< / span > < span class = "plain" > , < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > , < / span > < span class = "string" > "unable to read section page from 'inform7'"< / span > < span class = "plain" > ,< / span >
< span class = "constant" > TRUE< / span > < span class = "plain" > , & < / span > < span class = "functiontext" > < a href = "#SP6" > Coverage::existence_harvester< / a > < / span > < span class = "plain" > , < / span > < span class = "identifier" > NULL< / span > < span class = "plain" > , (< / span > < span class = "reserved" > void< / span > < span class = "plain" > *) < / span > < span class = "identifier" > SF< / span > < span class = "plain" > );< / span >
2020-04-02 15:31:21 +03:00
< span class = "plain" > }< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP6" > < / a > < b > § 6. < / b > So now we have to read a section, looking for the existence of problem
messages:
2019-03-17 14:40:57 +02:00
< / p >
< pre class = "display" >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::existence_harvester< button class = "popup" onclick = "togglePopup('usagePopup8')" > ...< span class = "popuptext" id = "usagePopup8" > Usage of < b > Coverage::existence_harvester< / b > :< br > < a href = "#SP5" > § 5< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "reserved" > text_file_position< / span > < span class = "plain" > *< / span > < span class = "identifier" > tfp< / span > < span class = "plain" > , < / span > < span class = "reserved" > void< / span > < span class = "plain" > *< / span > < span class = "identifier" > state< / span > < span class = "plain" > ) {< / span >
2020-04-02 15:31:21 +03:00
< span class = "reserved" > filename< / span > < span class = "plain" > *< / span > < span class = "identifier" > SF< / span > < span class = "plain" > = (< / span > < span class = "reserved" > filename< / span > < span class = "plain" > *) < / span > < span class = "identifier" > state< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > match_results< / span > < span class = "plain" > < / span > < span class = "identifier" > mr< / span > < span class = "plain" > = < / span > < span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::create_mr< / a > < / span > < span class = "plain" > ();< / span >
< span class = "reserved" > while< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-pm.html#SP10" > Regexp::match< / a > < / 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*?)_p_%((%c+?)%)(%c*)"< / span > < span class = "plain" > )) {< / span >
< span class = "functiontext" > < a href = "4-sm.html#SP15" > Str::clear< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > );< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > text< / span > < span class = "plain" > , < / span > < span class = "string" > "%S%S"< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [0], < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [2]);< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > TEMPORARY_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "4-sm.html#SP16" > Str::copy< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > mr< / span > < span class = "plain" > .< / span > < span class = "element" > exp< / span > < span class = "plain" > [1]);< / span >
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-sm.html#SP18" > Str::eq< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "sigil"< / span > < span class = "plain" > )) < / span > < span class = "reserved" > break< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > context< / span > < span class = "plain" > = < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-sm.html#SP18" > Str::eq< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "BelievedImpossible"< / span > < span class = "plain" > )) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > context< / span > < span class = "plain" > = < / span > < span class = "constant" > IMPOSSIBLE_PCON< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "string" > "_%f_line%d"< / span > < span class = "plain" > , < / span > < span class = "identifier" > SF< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > -> < / span > < span class = "element" > line_count< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "plain" > } < / span > < span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-sm.html#SP18" > Str::eq< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "Untestable"< / span > < span class = "plain" > )) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > context< / span > < span class = "plain" > = < / span > < span class = "constant" > UNTESTABLE_PCON< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "string" > "_%f_line%d"< / span > < span class = "plain" > , < / span > < span class = "identifier" > SF< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > -> < / span > < span class = "element" > line_count< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "plain" > } < / span > < span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "4-sm.html#SP18" > Str::eq< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > I< / span > < span class = "string" > "..."< / span > < span class = "plain" > )) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > context< / span > < span class = "plain" > = < / span > < span class = "constant" > NAMELESS_PCON< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE_TO< / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "string" > "_%f_line%d"< / span > < span class = "plain" > , < / span > < span class = "identifier" > SF< / span > < span class = "plain" > , < / span > < span class = "identifier" > tfp< / span > < span class = "plain" > -> < / span > < span class = "element" > line_count< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP2" > Coverage::observe_problem< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > , < / span > < span class = "identifier" > context< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > DISCARD_TEXT< / span > < span class = "plain" > (< / span > < span class = "identifier" > name< / span > < span class = "plain" > );< / span >
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "4-pm.html#SP9" > Regexp::dispose_of< / a > < / span > < span class = "plain" > (& < / span > < span class = "identifier" > mr< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP7" > < / a > < b > § 7. Checking. < / b > So the actual policy-enforcement routine is here:
2019-03-17 14:40:57 +02:00
< / p >
< pre class = "display" >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > observations_made< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::check< button class = "popup" onclick = "togglePopup('usagePopup9')" > ...< span class = "popuptext" id = "usagePopup9" > Usage of < b > Coverage::check< / b > :< br > Main - < a href = "1-mn.html#SP2" > § 2< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "constant" > OUTPUT_STREAM< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > observations_made< / span > < span class = "plain" > == < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ) {< / span >
2020-04-02 15:31:21 +03:00
< < span class = "cwebmacro" > Perform the observations< / span > < span class = "cwebmacronumber" > 7.1< / span > > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > observations_made< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > all_is_well< / span > < span class = "plain" > = < / span > < span class = "constant" > TRUE< / span > < span class = "plain" > ;< / span >
2020-04-02 15:31:21 +03:00
< < span class = "cwebmacro" > Report and decide how grave the situation is< / span > < span class = "cwebmacronumber" > 7.2< / span > > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "identifier" > all_is_well< / span > < span class = "plain" > ) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "All is well.\n"< / span > < span class = "plain" > );< / span >
< span class = "reserved" > else< / span > < span class = "plain" > < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "This needs attention.\n"< / span > < span class = "plain" > );< / span >
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "\n"< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > all_is_well< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP7_1" > < / a > < b > § 7.1. < / b > < code class = "display" >
< < span class = "cwebmacrodefn" > Perform the observations< / span > < span class = "cwebmacronumber" > 7.1< / span > > =
2019-03-17 14:40:57 +02:00
< / code > < / p >
< pre class = "displaydefn" >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP3" > Coverage::which_problems_have_test_cases< / a > < / span > < span class = "plain" > ();< / span >
< span class = "functiontext" > < a href = "#SP4" > Coverage::which_problems_are_referenced< / a > < / span > < span class = "plain" > ();< / span >
< span class = "functiontext" > < a href = "#SP5" > Coverage::which_problems_exist< / a > < / span > < span class = "plain" > ();< / span >
2019-03-17 14:40:57 +02:00
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "endnote" > This code is used in < a href = "#SP7" > § 7< / a > .< / p >
2019-03-17 14:40:57 +02:00
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP7_2" > < / a > < b > § 7.2. < / b > Okay, so that's all of the scanning done; now to report on it.
2019-03-17 14:40:57 +02:00
< / p >
< p class = "macrodefinition" > < code class = "display" >
2020-04-02 15:31:21 +03:00
< < span class = "cwebmacrodefn" > Report and decide how grave the situation is< / span > < span class = "cwebmacronumber" > 7.2< / span > > =
2019-03-17 14:40:57 +02:00
< / code > < / p >
< pre class = "displaydefn" >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%d problem name(s) have been observed:\n"< / span > < span class = "plain" > , < / span > < span class = "identifier" > NUMBER_CREATED< / span > < span class = "plain" > (< / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > )); < / span > < span class = "constant" > INDENT< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "Problems actually existing (the source code refers to them):\n"< / span > < span class = "plain" > ); < / span > < span class = "constant" > INDENT< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "are named and in principle testable"< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > I< / span > < span class = "string" > "are named more than once:"< / span > < span class = "plain" > ) > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > all_is_well< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::list< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > IMPOSSIBLE_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > IMPOSSIBLE_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "are 'BelievedImpossible', that is, no known source text causes them"< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > UNTESTABLE_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > UNTESTABLE_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "are 'Untestable', that is, not mechanically testable"< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > NAMELESS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > NAMELESS_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "are '...', that is, they need to be give a name and a test case"< / span > < span class = "plain" > );< / span >
< span class = "constant" > OUTDENT< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "Problems which should have test cases:\n"< / span > < span class = "plain" > ); < / span > < span class = "constant" > INDENT< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "have test cases"< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > I< / span > < span class = "string" > "have no test case yet:"< / span > < span class = "plain" > ) > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) {< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::list< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > ,< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > I< / span > < span class = "string" > "are spurious test cases, since no such problems exist:"< / span > < span class = "plain" > ) > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > all_is_well< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::list< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CASE_EXISTS_PCON< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< span class = "constant" > OUTDENT< / span > < span class = "plain" > ;< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "Problems which are cross-referenced in 'Writing with Inform':\n"< / span > < span class = "plain" > ); < / span > < span class = "constant" > INDENT< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > I< / span > < span class = "string" > "are cross-referenced"< / span > < span class = "plain" > );< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > I< / span > < span class = "string" > "are cross-referenced more than once:"< / span > < span class = "plain" > ) > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > all_is_well< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::list< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (< / span > < span class = "functiontext" > < a href = "#SP8" > Coverage::cite< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > ,< / span >
2020-04-07 03:06:09 +03:00
< span class = "identifier" > I< / span > < span class = "string" > "are spurious references, since no such problems exist:"< / span > < span class = "plain" > ) > < / span > < span class = "constant" > 0< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "identifier" > all_is_well< / span > < span class = "plain" > = < / span > < span class = "constant" > FALSE< / span > < span class = "plain" > ;< / span >
2020-04-14 19:56:54 +03:00
< span class = "functiontext" > < a href = "#SP8" > Coverage::list< / a > < / span > < span class = "plain" > (< / span > < span class = "identifier" > OUT< / span > < span class = "plain" > , < / span > < span class = "constant" > CODE_MENTIONS_PCON< / span > < span class = "plain" > +< / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > , < / span > < span class = "constant" > 0< / span > < span class = "plain" > , < / span > < span class = "constant" > DOC_MENTIONS_PCON< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< span class = "constant" > OUTDENT< / span > < span class = "plain" > ;< / span >
< span class = "constant" > OUTDENT< / span > < span class = "plain" > ;< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2020-04-02 15:31:21 +03:00
< p class = "endnote" > This code is used in < a href = "#SP7" > § 7< / a > .< / p >
2019-03-17 14:40:57 +02:00
2020-04-02 15:31:21 +03:00
< p class = "inwebparagraph" > < a id = "SP8" > < / a > < b > § 8. < / b > < / p >
2019-03-17 14:40:57 +02:00
< pre class = "display" >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::cite< button class = "popup" onclick = "togglePopup('usagePopup10')" > ...< span class = "popuptext" id = "usagePopup10" > Usage of < b > Coverage::cite< / b > :< br > < a href = "#SP7_2" > § 7.2< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "constant" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > mask< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > mask2< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > val< / span > < span class = "plain" > , < / span > < span class = "reserved" > text_stream< / span > < span class = "plain" > *< / span > < span class = "identifier" > message< / span > < span class = "plain" > ) {< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > N< / span > < span class = "plain" > = < / span > < span class = "constant" > 0< / span > < span class = "plain" > ;< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > known_problem< / span > < span class = "plain" > *< / span > < span class = "identifier" > KP< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER< / span > < span class = "plain" > (< / span > < span class = "identifier" > KP< / span > < span class = "plain" > , < / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > ) {< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed< / span > < span class = "plain" > & < / span > < span class = "identifier" > mask< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > val< / span > < span class = "plain" > ) < / span > < span class = "identifier" > N< / span > < span class = "plain" > ++;< / span >
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed_multiple_times< / span > < span class = "plain" > & < / span > < span class = "identifier" > mask2< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > val< / span > < span class = "plain" > ) < / span > < span class = "identifier" > N< / span > < span class = "plain" > ++;< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > ((< / span > < span class = "identifier" > N< / span > < span class = "plain" > > 0) & & (< / span > < span class = "identifier" > message< / span > < span class = "plain" > )) < / span > < span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%d problem(s) %S\n"< / span > < span class = "plain" > , < / span > < span class = "identifier" > N< / span > < span class = "plain" > , < / span > < span class = "identifier" > message< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "reserved" > return< / span > < span class = "plain" > < / span > < span class = "identifier" > N< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
2020-04-14 19:56:54 +03:00
< span class = "reserved" > void< / span > < span class = "plain" > < / span > < span class = "functiontext" > Coverage::list< button class = "popup" onclick = "togglePopup('usagePopup11')" > ...< span class = "popuptext" id = "usagePopup11" > Usage of < b > Coverage::list< / b > :< br > < a href = "#SP7_2" > § 7.2< / a > < / span > < / button > < / span > < span class = "plain" > (< / span > < span class = "constant" > OUTPUT_STREAM< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > mask< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > mask2< / span > < span class = "plain" > , < / span > < span class = "reserved" > int< / span > < span class = "plain" > < / span > < span class = "identifier" > val< / span > < span class = "plain" > ) {< / span >
2019-03-17 14:40:57 +02:00
< span class = "constant" > INDENT< / span > < span class = "plain" > ;< / span >
< span class = "reserved" > known_problem< / span > < span class = "plain" > *< / span > < span class = "identifier" > KP< / span > < span class = "plain" > ;< / span >
< span class = "identifier" > LOOP_OVER< / span > < span class = "plain" > (< / span > < span class = "identifier" > KP< / span > < span class = "plain" > , < / span > < span class = "reserved" > known_problem< / span > < span class = "plain" > )< / span >
2020-04-07 03:06:09 +03:00
< span class = "reserved" > if< / span > < span class = "plain" > (((< / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "identifier" > contexts_observed< / span > < span class = "plain" > & < / span > < span class = "identifier" > mask< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > val< / span > < span class = "plain" > ) ||< / span >
< span class = "plain" > ((< / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > contexts_observed_multiple_times< / span > < span class = "plain" > & < / span > < span class = "identifier" > mask2< / span > < span class = "plain" > ) == < / span > < span class = "identifier" > val< / span > < span class = "plain" > )) {< / span >
< span class = "identifier" > WRITE< / span > < span class = "plain" > (< / span > < span class = "string" > "%S\n"< / span > < span class = "plain" > , < / span > < span class = "identifier" > KP< / span > < span class = "plain" > -> < / span > < span class = "element" > name< / span > < span class = "plain" > );< / span >
2019-03-17 14:40:57 +02:00
< span class = "plain" > }< / span >
< span class = "constant" > OUTDENT< / span > < span class = "plain" > ;< / span >
< span class = "plain" > }< / span >
< / pre >
< p class = "inwebparagraph" > < / p >
2019-04-22 17:42:10 +03:00
<!-- End of weave -->
2020-04-14 19:56:54 +03:00
< script >
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
< / script >
< link href = "Popups.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-03-19 02:11:25 +02:00
< / main >
2019-03-17 14:40:57 +02:00
< / body >
< / html >