* Fix benchmarks using text
* CI: change --all to --all-targets
--all is a deprecated alias to --workspace where we also want to build
all targets: benches, tests, examples etc.
If `op_by_id` contains `succ` then we can get the index straight away,
else we can do the original work. This means we don't need an `else`
case for a third situation as in reality there isn't one.
* Use grapheme clusters in Text instead of char
char is not what users typically expect as a 'letter' so we should use
grapheme clusters instead. These can't always be represented as single
rust char types so the Text now stores a Vec of single grapheme Strings.
* Add test for grapheme clusters in text
* Use debug_assert_eq instead of debug_assert
* Add failing alignment test case
* Add wasm-pack test to ci
* Box im_rc::Vector contents to satisfy alignment
This makes the frontend not have alignment issues on 32 bit
architectures (e.g. wasm32-unknown-unknown). The box provides a
consistent alignment for the Vector.
* Add test to check save and load works on failing input
We loop 100 times due to it being a flaky test, likely due to an
iteration order issue in hashmaps.
* Update printing diff of changes
* Add new case for save then load
* Add another failing test case for save_load
* Update test case
* Update test case to not use empty strings in keys
* Specify to decode into usize in rle decoder
The `decoder.read` call was previously inferring to use isize since the
`self.count` variable is that type. This meant that for a list of null
values >= 64 in length it would read it as negative and so enter an
infinite loop of reading nulls, even if there were other values to read.
This changes the read to use usize but introduces the issue of usize
potentially being bigger than isize. This should be very unlikely for
what it is currently used for though so I'll defer this to later work.
* Add a test case to check the repeated nulls issue in rle
* Update tests
* Specify reading rle len as i64 instead of isize