|
1 | 1 | ------------------------- MODULE SequencesExtTests ------------------------- |
2 | | -EXTENDS Sequences, SequencesExt, Integers, TLC, TLCExt, FiniteSets |
| 2 | +EXTENDS Sequences, SequencesExt, Integers, TLC, TLCExt, FiniteSets, FiniteSetsExt, Functions |
3 | 3 |
|
4 | 4 | ASSUME LET T == INSTANCE TLC IN T!PrintT("SequencesExtTests") |
5 | 5 |
|
@@ -163,4 +163,33 @@ ASSUME AssertEq(FlattenSeq(Zip(<<1,3>>,<<2,4>>)), <<1, 2, 3, 4>>) |
163 | 163 | ASSUME Zip(<<"a", "c">>, <<"b", "d">>) = <<<<"a">>, <<"b">>, <<"c">>, <<"d">>>> |
164 | 164 | ASSUME AssertEq(FlattenSeq(Zip(<<"a", "c">>, <<"b", "d">>)), <<"a", "b", "c", "d">>) |
165 | 165 |
|
| 166 | +----------------------------------------------------------------------------- |
| 167 | + |
| 168 | +ASSUME SubSeqs(<<>>) = {<<>>} |
| 169 | +ASSUME SubSeqs(<<1>>) = {<<>>, <<1>>} |
| 170 | +ASSUME SubSeqs(<<1,1>>) = {<<>>, <<1>>, <<1,1>>} |
| 171 | +ASSUME SubSeqs(<<1,1,1>>) = {<<>>, <<1>>, <<1,1>>, <<1,1,1>>} |
| 172 | +ASSUME SubSeqs(<<1,2,3,2>>) = {<<>>, <<1>>, <<2>>, <<3>>, <<1, 2>>, <<2, 3>>, <<3, 2>>, <<1, 2, 3>>, <<2, 3, 2>>, <<1, 2, 3, 2>>} |
| 173 | +ASSUME SubSeqs([i \in 1..3 |-> i]) = {<<>>, <<1>>, <<2>>, <<3>>, <<1, 2>>, <<2, 3>>, <<1, 2, 3>>} |
| 174 | + |
| 175 | +LOCAL ToSeq(fun) == |
| 176 | + LET RECURSIVE toSeq(_,_) |
| 177 | + toSeq(f, d) == |
| 178 | + IF d = {} THEN <<>> ELSE <<f[Min(d)]>> \o toSeq(f, d \ {Min(d)}) |
| 179 | + IN toSeq(fun, DOMAIN fun) |
| 180 | + |
| 181 | +LOCAL SubSeqsAlt(s) == |
| 182 | + LET IsConsecutive(S) == S # {} => S = Min(S)..Max(S) |
| 183 | + DOMS == { sd \in SUBSET DOMAIN s : IsConsecutive(sd) } |
| 184 | + IN { ToSeq([ i \in d |-> s[i] ]) : d \in DOMS } |
| 185 | + |
| 186 | +ASSUME \A seq \in BoundedSeq(1..5, 5) : |
| 187 | + /\ SubSeqs(seq) = SubSeqsAlt(seq) |
| 188 | + /\ LET ss == SubSeqs(seq) |
| 189 | + IN /\ <<>> \in ss |
| 190 | + /\ Cardinality(ss) \in 1..16 |
| 191 | + /\ \A s \in ss : |
| 192 | + /\ Len(s) <= Len(seq) |
| 193 | + /\ Range(s) \subseteq Range(seq) |
| 194 | + |
166 | 195 | ============================================================================= |
0 commit comments