Some code points are reserved for the UTF-16 coding itself and must not appear as input data to the algorithm.
Signed bug prevented anything not ASCII from being coded correctly.
Everything outside of BMP was handled incorrectly and was coded as completely different code points.
This would mess up most conversions from UTF-8 as the caller wouldn't know how far to step to get to the next valid character, resulting in markers for invalid data to be injected here and there. Also add some unit tests to avoid this reoccurring.