# Changelog
All notable changes to this project will be documented in this file.
## [0.0.9] - 2022-07-25
### Features
#### Rework `TwoSimdBlocks` into `Twice`
- `TwoSimdBlocks` got removed
- `Twice` gives an alignment guarantee of two blocks of A
- `halves` on aligned block of `Twice` splits a block into two smaller alignments
## [0.0.8] - 2022-07-09
### Features
#### Make `Default` conform to strict provenance
Related: [#34](https://github.com/V0ldek/aligners/issues/34)
#### Made `Alignment` types empty
Related: [#31](https://github.com/V0ldek/aligners/issues/31)
### Bug Fixes
#### Invalid `Hash` impl for `AlignedBytes`
Related: [#33](https://github.com/V0ldek/aligners/issues/33)
## [0.0.7] - 2022-06-03
### Features
#### `alignment_size` function for aligned types
- Allows getting the `alignment` size as a method instead of static.
Related: [#29](https://github.com/V0ldek/aligners/issues/29)
## [0.0.6] - 2022-05-28
### Bug Fixes
#### Take `FnMut` in `new_initialize`
- `Fn` is unnecessarily prohibitive, `FnMut` allows more initialisation functions.
## [0.0.5] - 2022-05-27
### Features
#### Add support for AVX512
- When the `avx512f` target feature is enabled
the `SimdBlock` is set to 64 bytes.
Related: [#23](https://github.com/V0ldek/aligners/issues/18)
#### Relax AVX2 requirement to AVX
- AVX already includes 256-bit SIMD vectors, so using it
as the trigger for `SimdBlock` instead of AVX2 makes more sense
Related: [#22](https://github.com/V0ldek/aligners/issues/18)
### Reliability
#### Enable local simd-size-matrix tests
- One can use the `test_simd_sizes.py` script
to run the simd-size test matrix locally.
## [0.0.4] - 2022-05-25
### Features
#### Support `sse` target feature
- When the `sse` target feature is enabled
on x86/x86_64 the `SimdBlock` size is 16 bytes,
unless a target feature with a larger vector is also enabled.
Related: [#18](https://github.com/V0ldek/aligners/issues/18)
### Reliability
#### Miri test on windows targets
#### Added `simd_alignment_test`
- Test whether the size of `SimdBlock` agrees with the expected one
for a given target.
#### Added simd-size-matrix test
- Use `simd_alignment_test` to check whether `SimdBlock` sizes
remain consistent across targets.
## [0.0.3] - 2022-05-18
### Bug Fixes
#### Impl of `Default` returning unaligned ptrs
- Implementations of `Default` for
- `AlignedBytes`
- `&AlignedSlice`
- `&mut AlignedSlice`
- were incorrect by using `NonNull::dangling` as the pointer.
- That pointer need not be aligned to the specified `Alignment`.
- This was fixed by using std's `dangling` implementation tweaked to
- the required alignment, while still not allocating.
Related: [#11](https://github.com/V0ldek/aligners/issues/11)
### Reliability
#### Allow miri symbolic-alignment-check
- Miri's `-Zmiri-symbolic-alignment-check` breaks `align_offset` to always return `usize::MAX` (that is by design), so we need to fallback to regular cast-then-modulo alignment check for tests when running under Miri.
Related: [#12](https://github.com/V0ldek/aligners/issues/12)
## [0.0.2] - 2022-05-17
### Features
#### Added `alignment::TwoTo`
Related: [#5](https://github.com/V0ldek/aligners/issues/5)
## [0.0.1] - 2022-05-17
### Features
#### Initial API
- Alignment types driven by the `alignment` module.
- `AlignedBytes` -- aligned container
- `AlignedSlice` -- type guarantee on alignment of `&[u8]`
- `AlignedBlockIterator` -- iterate aligned blocks of a slice.
- Quality of life implementations of `Deref` and `std::cmp` traits.
### Reliability
#### Automatically generate changelog (#1)
Related: [#1](https://github.com/V0ldek/aligners/issues/1)
#### Use cargo-hack for feature powerset
Related: [#3](https://github.com/V0ldek/aligners/issues/3)