WIP: step 19 - realised that the unit test used to replicate the problem seen at the client site may well be just trivially causing an out-of-memory through the sheer number of test variables. While this is itself a useful case to consider, it isn't the same problem as seen at the client site - the latter actually sees full test vectors, albeit very slowly, whereas the test here is simply bombing out before *any* partial test vectors are presented for merging. Have cut down the test to see if I can observe a difference in running time before and after optimising via shared path prefix.
Merge branch 'practicalTestForOptimisation' into wipForSharedPathPrefix
WIP: step 20 - start on incomplete implementation of run length encoding for use by SharedPathPrefix. While this breaks the higher-level tests, it doesn't break the test for 'ChunkedList'; the latter needs beefing-up. Also swept under the carpet for now is what to do about mixing plain arrays and run-lengths.
WIP: step 21 - ChunkedList unit test now exercises the duplicate contiguous items case (and thus fails with the current implementation).
WIP: step 21 - completed implementation of run-length encoding in ChunkedList, also beefed-up its unit test to stress it more. Modified the 'IsSorted' extension on 'Seq<'X>' to consider non-strictly monotonic increasing sequences as being sorted as well. Not sure if this has broken any other tests, though. NOTE: performance is *lousy* - this is probably connected to the 'ChunkedList' using the 'ListEmulation' representation most of the time - need to fix this.