encode_unicode 0.1.1

Alternative and extension to the unstable `char.encode_utf8()` and char.encode_utf16()` methods. ## Contains: * **Utf8Char**: A `char` stored as UTF-8. Can be borrowed as a `str`. * **Utf8Iterator**: Iterate over or read the bytes of an UTF-8 codepoint. * **Utf16Char**: A `char` stored as UTF-16. Can be borrowed as a `u16` slice. * **Utf8Iterator**: Iterate over the units of an UTF-16 codepoint. * **Conversion methods on `char`**: * to UTF-8 as `[u8; 4]` or into `&mut[u8]`. and vice versa. * to UTF-16 as `(u16, Option<u16>)` or into `&mut[u16]`. and vice versa. * **Precise errors when decoding a char from UTF-8, UTF-16 or `u32` fails.** Can integrate with [ascii](https://tomprogrammer.github.io/rust-ascii/ascii/index.html) with the feature "ascii". (requires nightly)
Documentation
/* Copyright 2016 Torbjørn Birch Moltu
 *
 * Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
 * http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
 * http://opensource.org/licenses/MIT>, at your option. This file may not be
 * copied, modified, or distributed except according to those terms.
 */

//! iterators are stateful; test that they behave.

use std::io::Read;
extern crate encode_unicode;
use encode_unicode::CharExt;
//use encode_unicode::{Utf8Iterator,Utf16Iterator};

#[test]
fn read_single_byte() {
    let mut buf = [0; 4];
    for c in 0..128 {
        let uc = char::from_u32_detailed(c).unwrap().to_utf8();
        let mut iter = uc.into_iter();
        assert_eq!((iter.read(&mut buf[..4]).unwrap(),c), (1,c));
        assert_eq!((iter.read(&mut buf[..4]).unwrap(),c), (0,c));
        let mut iter = uc.into_iter();
        assert_eq!((iter.read(&mut buf[..1]).unwrap(),c), (1,c));
        assert_eq!((iter.read(&mut buf[..1]).unwrap(),c), (0,c));
        let mut iter = uc.into_iter();
        assert_eq!((iter.read(&mut buf[..0]).unwrap(),c), (0,c));
        assert_eq!((iter.read(&mut buf[..2]).unwrap(),c), (1,c));
    }
}