From 08cf263724106f472be13054d0ad219ceeea7f23 Mon Sep 17 00:00:00 2001 From: Zed Lopez Date: Sat, 25 Jun 2022 12:22:47 -0700 Subject: [PATCH] initial commit --- .../Test Cases/ListBasicsPrepositions.txt | 56 +++++++++++++++++++ .../Tests/Test Cases/TablePrepositions.txt | 17 ++++++ .../_Results_Ideal/ListBasicsPrepositions.txt | 37 ++++++++++++ .../_Results_Ideal/TablePrepositions.txt | 19 +++++++ .../Sections/Phrase Definitions.w | 14 ++--- .../Chapter 4/Type Expressions and Values.w | 6 +- .../Documentation/Writing with Inform.txt | 14 ++--- 7 files changed, 146 insertions(+), 17 deletions(-) create mode 100644 inform7/Tests/Test Cases/ListBasicsPrepositions.txt create mode 100644 inform7/Tests/Test Cases/TablePrepositions.txt create mode 100644 inform7/Tests/Test Cases/_Results_Ideal/ListBasicsPrepositions.txt create mode 100644 inform7/Tests/Test Cases/_Results_Ideal/TablePrepositions.txt diff --git a/inform7/Tests/Test Cases/ListBasicsPrepositions.txt b/inform7/Tests/Test Cases/ListBasicsPrepositions.txt new file mode 100644 index 000000000..dc4a69de9 --- /dev/null +++ b/inform7/Tests/Test Cases/ListBasicsPrepositions.txt @@ -0,0 +1,56 @@ +The Brahms Conservatoire is a room. + +When play begins: + let L be a list of numbers; + say "L is initially [L in brace notation]."; + add 11 to L; + say "L is now [L in brace notation]."; + add 7 to L; + add 200 to L; + add 5 to L; + add -6 to L; + add 0 to L; + say "L is now [L in brace notation]."; + add 5 to L, if absent; + say "Adding 5 if absent should make no difference: [L in brace notation]."; + reverse L; + say "L reverses to [L in brace notation]."; + sort L; + say "L sorts to [L in brace notation]."; + reverse L; + say "L then reverses to [L in brace notation]."; + say "Entry 2 of L is [entry 2 of L]."; + now entry 3 of L is 104; + say "After changing entry 3 to 104, L is now [L in brace notation]."; + now entry 3 of L is 208; + say "After changing entry 3 to 208, L is now [L in brace notation]."; + now entry 1 of L is 1; + now entry 6 of L is 6; + say "After changing the two end entries, L is now [L in brace notation]."; + say "These, however, should fail as being out of range."; + now entry 0 of L is 104; + now entry 7 of L is 104; + add 208 to L; + say "L now contains two instances of 208: [L in brace notation]."; + remove 208 from L; + say "Both of which go after removing this value: [L in brace notation]."; + let M be a list of numbers; + add 2 to M; add 3 to M; add 5 to M; add 7 to M; add 11 to M; + add M to L; + say "Adding [M in brace notation] to L gives [L in brace notation]."; + remove M from L; + say "Removing the same set then gives [L in brace notation]."; + extend M to 5 entries; + say "Extending M to 5 entries should not change it: [M in brace notation]."; + extend M to 7 entries; + say "Extending M to 7 entries should add two 0s: [M in brace notation]."; + truncate M to 8 entries; + say "Truncating M to 8 entries should make no difference: [M in brace notation]."; + truncate M to 4 entries; + say "Truncating M to 4 entries should change it: [M in brace notation]."; + truncate M to the last 2 entries; + say "Truncating M to the last 2 entries should certainly change it: [M in brace notation]."; + let N be a list of numbers; + add 7 to N; add 11 to N; add 5 to N; add 16 to N; + add N to M, if absent; + say "Adding [N in brace notation] to M, if absent, gives [M in brace notation]." diff --git a/inform7/Tests/Test Cases/TablePrepositions.txt b/inform7/Tests/Test Cases/TablePrepositions.txt new file mode 100644 index 000000000..ef5114c7f --- /dev/null +++ b/inform7/Tests/Test Cases/TablePrepositions.txt @@ -0,0 +1,17 @@ +The Plateau is a room. + +Table of Fish +fish-text fish-num +"red snapper" 5 +"coelocanth" 17 +"neon tetra" 40 + +When play begins: + say "[the fish-text corresponding to fish-num of 5 in Table of Fish]."; + say "[the fish-text corresponding to fish-num of 17 from Table of Fish]."; + say "[the fish-text corresponding to fish-num of 40 in Table of Fish]."; + say "[the fish-num in row 1 in the Table of Fish]."; + say "[the fish-num in row 2 from the Table of Fish]."; + say "[the fish-num in row 3 of the Table of Fish]."; + if there is a fish-text of "clownfish" in the Table of Fish, say "Who sent in the clowns?"; + if there is a fish-text of "neon tetra" from the Table of Fish, say "ore tenant."; diff --git a/inform7/Tests/Test Cases/_Results_Ideal/ListBasicsPrepositions.txt b/inform7/Tests/Test Cases/_Results_Ideal/ListBasicsPrepositions.txt new file mode 100644 index 000000000..5f99c4c9d --- /dev/null +++ b/inform7/Tests/Test Cases/_Results_Ideal/ListBasicsPrepositions.txt @@ -0,0 +1,37 @@ + Brahms Conservatoire + L is initially {}. + L is now {11}. + L is now {11, 7, 200, 5, -6, 0}. + Adding 5 if absent should make no difference: {11, 7, 200, 5, -6, 0}. + L reverses to {0, -6, 5, 200, 7, 11}. + L sorts to {-6, 0, 5, 7, 11, 200}. + L then reverses to {200, 11, 7, 5, 0, -6}. + Entry 2 of L is 11. + After changing entry 3 to 104, L is now {200, 11, 104, 5, 0, -6}. + After changing entry 3 to 208, L is now {200, 11, 208, 5, 0, -6}. + After changing the two end entries, L is now {1, 11, 208, 5, 0, 6}. + These, however, should fail as being out of range. + *** Couldn't write to list entry 0 of a list which has entries numbered from 1 to 6 *** + + *** Run-time problem P50: Attempt to use list item which does not exist. + + *** Couldn't write to list entry 7 of a list which has entries numbered from 1 to 6 *** + L now contains two instances of 208: {1, 11, 208, 5, 0, 6, 208}. + Both of which go after removing this value: {1, 11, 5, 0, 6}. + Adding {2, 3, 5, 7, 11} to L gives {1, 11, 5, 0, 6, 2, 3, 5, 7, 11}. + Removing the same set then gives {1, 0, 6}. + Extending M to 5 entries should not change it: {2, 3, 5, 7, 11}. + Extending M to 7 entries should add two 0s: {2, 3, 5, 7, 11, 0, 0}. + Truncating M to 8 entries should make no difference: {2, 3, 5, 7, 11, 0, 0}. + Truncating M to 4 entries should change it: {2, 3, 5, 7}. + Truncating M to the last 2 entries should certainly change it: {5, 7}. + Adding {7, 11, 5, 16} to M, if absent, gives {5, 7, 11, 16}. + + Welcome + An Interactive Fiction + Release 1 / Serial number 150512 / Inform 7 build 6M22 (I6/v6.33 lib 6/12N) SD + + Brahms Conservatoire + +> > Brahms Conservatoire +> Are you sure you want to quit? \ No newline at end of file diff --git a/inform7/Tests/Test Cases/_Results_Ideal/TablePrepositions.txt b/inform7/Tests/Test Cases/_Results_Ideal/TablePrepositions.txt new file mode 100644 index 000000000..102d71791 --- /dev/null +++ b/inform7/Tests/Test Cases/_Results_Ideal/TablePrepositions.txt @@ -0,0 +1,19 @@ + Plateau + red snapper. + coelocanth. + neon tetra. + 5. + 17. + 40. + ore tenant. + + Welcome + An Interactive Fiction + Release 1 / Serial number 220625 / Inform 7 v10.1.0 / D + + Plateau +> > Plateau +> Are you sure you want to quit? + + + diff --git a/inform7/extensions/basic_inform/Sections/Phrase Definitions.w b/inform7/extensions/basic_inform/Sections/Phrase Definitions.w index 3afaa2583..db58451f6 100644 --- a/inform7/extensions/basic_inform/Sections/Phrase Definitions.w +++ b/inform7/extensions/basic_inform/Sections/Phrase Definitions.w @@ -1290,7 +1290,7 @@ To add (new entry - K) to (L - list of values of kind K), if absent (documented at ph_addtolist): (- LIST_OF_TY_InsertItem({-lvalue-by-reference:L}, {new entry}, 0, 0, {phrase options}); -). -To add (new entry - K) at entry (E - number) in (L - list of values of kind K), if absent +To add (new entry - K) at entry (E - number) in/from (L - list of values of kind K), if absent (documented at ph_addatentry): (- LIST_OF_TY_InsertItem({-lvalue-by-reference:L}, {new entry}, 1, {E}, {phrase options}); -). @@ -1298,23 +1298,23 @@ To add (LX - list of Ks) to (L - list of values of kind K), if absent (documented at ph_addlisttolist): (- LIST_OF_TY_AppendList({-lvalue-by-reference:L}, {-by-reference:LX}, 0, 0, {phrase options}); -). -To add (LX - list of Ks) at entry (E - number) in (L - list of values of kind K) +To add (LX - list of Ks) at entry (E - number) in/from (L - list of values of kind K) (documented at ph_addlistatentry): (- LIST_OF_TY_AppendList({-lvalue-by-reference:L}, {-by-reference:LX}, 1, {E}, 0); -). -To remove (existing entry - K) from (L - list of values of kind K), if present +To remove (existing entry - K) in/from (L - list of values of kind K), if present (documented at ph_remfromlist): (- LIST_OF_TY_RemoveValue({-lvalue-by-reference:L}, {existing entry}, {phrase options}); -). -To remove (N - list of Ks) from (L - list of values of kind K), if present +To remove (N - list of Ks) in/from (L - list of values of kind K), if present (documented at ph_remlistfromlist): (- LIST_OF_TY_Remove_List({-lvalue-by-reference:L}, {-by-reference:N}, {phrase options}); -). -To remove entry (N - number) from (L - list of values), if present +To remove entry (N - number) in/from (L - list of values), if present (documented at ph_rementry): (- LIST_OF_TY_RemoveItemRange({-lvalue-by-reference:L}, {N}, {N}, {phrase options}); -). -To remove entries (N - number) to (N2 - number) from (L - list of values), if present +To remove entries (N - number) to (N2 - number) in/from (L - list of values), if present (documented at ph_rementries): (- LIST_OF_TY_RemoveItemRange({-lvalue-by-reference:L}, {N}, {N2}, {phrase options}); -). @@ -1347,7 +1347,7 @@ See test case |BIP-ListLength|. = Section 4 - Length of lists -To decide what number is the number of entries in/of (L - a list of values) +To decide what number is the number of entries in/of/from (L - a list of values) (documented at ph_numberentries): (- LIST_OF_TY_GetLength({-by-reference:L}) -). To truncate (L - a list of values) to (N - a number) entries/entry diff --git a/inform7/values-module/Chapter 4/Type Expressions and Values.w b/inform7/values-module/Chapter 4/Type Expressions and Values.w index 61977e286..1cbbedec5 100644 --- a/inform7/values-module/Chapter 4/Type Expressions and Values.w +++ b/inform7/values-module/Chapter 4/Type Expressions and Values.w @@ -442,10 +442,10 @@ Again, this is part of a condition, and can't evaluate. = ::= entry | ==> @ - in row of | ==> @
+ in row in/of/from | ==> @
listed in | ==> @
- corresponding to of in | ==> @
- of in ==> @
+ corresponding to of in/from | ==> @
+ of in/from ==> @
@
= parse_node *spec = Lvalues::new_TABLE_ENTRY(W); diff --git a/resources/Documentation/Writing with Inform.txt b/resources/Documentation/Writing with Inform.txt index ff4d6dde6..c9156f371 100644 --- a/resources/Documentation/Writing with Inform.txt +++ b/resources/Documentation/Writing with Inform.txt @@ -14683,7 +14683,7 @@ results in L being {2, 3, 5, 7, 11, 13, 17, 19}. If we don't want to add new entries at the end, we can instead say where they should go: -{defn ph_addatentry}add (value) at entry (number) in (list of values) +{defn ph_addatentry}add (value) at entry (number) in/from (list of values) This phrase adds the given value so that it becomes the entry with that index number in the list. Example: let L be {1, 2, 3, 4, 8, 24}; @@ -14692,7 +14692,7 @@ This phrase adds the given value so that it becomes the entry with that index nu sets L to {1, 2, 3, 4, 8, 12, 24}. If there are N entries in L, then we can add at any of entries 1 up to N+1: adding at entry N+1 means adding at the end. The phrase option "if absent" makes the phrase do nothing if the value already exists anywhere in L. {end} -{defn ph_addlistatentry}add (list of values) at entry (number) in (list of values) +{defn ph_addlistatentry}add (list of values) at entry (number) in/from (list of values) This phrase adds the first list to the second so that it begins at the given position. Example: let L be {1, 2, 3, 4}; @@ -14713,7 +14713,7 @@ even though L and M have the same values, repeated the same number of times - fo We can also strike out values: -{defn ph_remfromlist}remove (value) from (list of values) +{defn ph_remfromlist}remove (value) in/from (list of values) This phrase removes every instance of the given value from the list. Example: let L be {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; @@ -14722,7 +14722,7 @@ This phrase removes every instance of the given value from the list. Example: results in L being {3, 4, 5, 9, 2, 6, 5, 3}. Ordinarily "remove 7 from L" would produce a run-time problem, since L does not contain the value 7, but using the "if present" option lets us off this: the phrase then does nothing if L does not contain the value to be removed. {end} -{defn ph_remlistfromlist}remove (list of values) from (list of values) +{defn ph_remlistfromlist}remove (list of values) in/from (list of values) This phrase removes every instance of any value in the first list from the second. Example: let L be {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; @@ -14733,7 +14733,7 @@ results in L being {3, 1, 1, 5, 9, 5, 3}. If both lists are large, this can be a Again, we can also remove from specific positions: -{defn ph_rementry}remove entry (number) from (list of values) +{defn ph_rementry}remove entry (number) in/from (list of values) This phrase removes the entry at the given position, counting from 1 as the first entry. (Once it is removed, the other entries shuffle down.) Example: let L be {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; @@ -14742,7 +14742,7 @@ This phrase removes the entry at the given position, counting from 1 as the firs results in L being {3, 1, 1, 5, 9, 2, 6, 5, 3}. {end} -{defn ph_rementries}remove entries (number) to (number) from (list of values) +{defn ph_rementries}remove entries (number) to (number) in/from (list of values) This phrase removes the entries at the given range of positions, counting from 1 as the first entry. (Once they are removed, the other entries shuffle down.) Example: let L be {3, 1, 4, 1, 5, 9, 2, 6, 5, 3}; @@ -14903,7 +14903,7 @@ results in L being { "heifer", "bullock", "cow"}. (This achieves the same effect The length of a list can change as values are added or removed, and can in principle be any number from 0 upwards. A list with 0 entries is empty. We can find the length with: -{defn ph_numberentries}number of entries in/of (list of values) ... number +{defn ph_numberentries}number of entries in/of/from (list of values) ... number This phrase produces the number of positions in the list. Example: the number of entries in {1, 1, 1, 3, 1}