Monument v0.10.0
Headline Features
-
(#105) Completely rewrite and simplify the graph building code. Lots of things relating to
course_headsand multi-parts should now Just Work™:- Incompatible course heads are no longer a thing. You can now do things like
course_heads = ["*78", "12345*"]and it will Just Work™. Previously this would error because12345867could be given two different course heads. course_headsalways Just Works™, even in e.g. cyclic multi-parts. Previously cyclic comps would simply ignorecourse_heads.- Specifying multiple start/end indices now Just Works™ in multi-parts - i.e. snap start/finishes are allowed, but Monument won't mix them or put an illegal splice over the part head. This would previously cause a crash (found by Jadd Virji - thanks!).
- Incompatible course heads are no longer a thing. You can now do things like
-
(#96) Add music presets for:
- Near misses (for any stage)
- CRUs (for >= Triples)
- 5678 combinations (for both Triples and Major)
Load them with, e.g.:
music = [ { preset = "5678 combinations" }, { preset = "near misses" }, { preset = "crus" }, ]
Smaller Features
- (#105) Add
start_rowandend_rowfor making compositions start/stop at a row other than rounds. Useful for using Monument to extend 720s to get QPs of Minor. - (#105) Remove
splice_style = "call locations"(which would allow splices only where a call could have been made). - (#105)
start_strokenow refers to the row afterstart_row(i.e. the first non-rounds row). - (#104) Fix column alignments for (a) negative scores and (b) long (i.e. at least 5-digit) lengths.
Bug Fixes
- (#105) Fix bug where Monument would, in obscure situations, produce false compositions (found by David Thomas - thanks!). Monument now expands the rows of each composition generated and explicitly checks for truth - so if falseness bugs do creep in, you'll know about it (and hopefully the large test suite will catch it before it reaches you).
Internal Improvements
Monument
- (#105) Remove
monument::Layoutand addMethods andCalls explicitly to aQuery. - (#104) Make all test cases deterministic by (a) rounding the composition scores and (b) making sure that all test cases are exhaustive searches (to negate Monument's non-deterministic search order).
BellFrame v0.9.0
- (#104) Implement
OrdforStroke. - (#104) Add
Mulimplementations for every combination of&Row/&RowBuf/RowBufversus anything from&Row/&RowBuf/RowBufor&Mask/Mask. - (#104) Fix bug in
Block::extend_range, where too many annotations would be copied. - (#104) Add new methods:
Row::copy_from: in-place write to an&mut Row(i.e. requiring the stages to match),
analogous to<[T]>::copy_from_slice.Block::with_leftover_row: create a newBlockwith only the specified leftover row.Block::leftover_row_mut: to mutably borrow the leftover row of aBlock.
- (#97) Enforce extra invariants for
music::Pattern(making it much more robust, at the cost of needing to handle some errors that should have been handled anyway). - (#97) Rename
music::Regextomusic::Pattern(it isn't anywhere near as powerful as true regexes). - (#96) Add
Stage::extent, which returns aSameStageVeccontaining every possibleRowof thatStagein an arbitrary order. - (#96) Allow addition/subtraction between
Stages andu8s with+/-, panicking on overflow or aStageof 0.checked_addandchecked_subare the non-panicking versions. - (#96) Add conversions from
Row/RowBuftoMaskandRegex(via theFromtrait)