simple_json 0.2.3

A simple runtime JSON parser.
Documentation
use std::collections::HashMap;

extern crate simple_json;
use simple_json::{ Json, Number };

macro_rules! test {
    ($jsn:expr, $val:expr) => {{
        let json = Json::from($jsn);
        assert_eq!(json.to_string(), $val);
    }};
}

#[test]
fn null_to_string()
{
    test!((), "null");
}

#[test]
fn bool_to_string()
{
    test!(false, "false");
    test!(true,  "true");
}

#[test]
fn integer_to_string()
{
    test!(0,  "0");
    test!(1,  "1");
    test!(20, "20");
    test!(21, "21");

    test!(-0,  "0");
    test!(-1,  "-1");
    test!(-20, "-20");
    test!(-21, "-21");
}

#[test]
fn float_to_string()
{
    test!(0.,    "0");
    test!(1.1,   "1.1");
    test!(20.01, "20.01");
    test!(21.12, "21.12");

    test!(-0.,    "0");
    test!(-1.1,   "-1.1");
    test!(-20.01, "-20.01");
    test!(-21.12, "-21.12");
}

#[test]
fn string_to_string()
{
    test!("", "\"\"");

	test!(
        "This is a normal ASCII string.",
        "\"This is a normal ASCII string.\""
    );

    test!(
        "I can also use unicode: ٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃).",
        "\"I can also use unicode: ٩(-̮̮̃-̃)۶ ٩(●̮̮̃•̃)۶ ٩(͡๏̯͡๏)۶ ٩(-̮̮̃•̃).\""
    );

	test!(
        "I can escape some things, like \"\\/\u{0008}\u{000C}\n\r\t!",
        "\"I can escape some things, like \\\"\\/\u{0008}\u{000C}\n\r\t!\""
    );

	test!(
        "I can even escape unicode: あ.",
        "\"I can even escape unicode: \u{3042}.\""
    );
}

#[test]
fn array_to_string()
{
    test!(vec![], "[]");

    test!(
        vec![
            Json::from(1),
            Json::from(2.3),
            Json::from("String"), 
            Json::from(vec![]),
            Json::from(HashMap::new()),
        ],
        "[1,2.3,\"String\",[],{}]"
    );
}

#[test]
fn map_to_object()
{
    test!(HashMap::new(), "{}");

    let mut map = HashMap::new();
    map.insert(String::from("i"), Json::from(-1));
    map.insert(String::from("f"), Json::from(2.3));
    map.insert(String::from("s"), Json::from("String"));
    map.insert(String::from("a"), Json::from(vec![]));
    map.insert(String::from("o"), Json::from(HashMap::new()));

    assert_eq!(
        Json::from(map),
        Json::parse("{\"i\":-1,\"f\":2.3,\"s\":\"String\",\"a\":[],\"o\":{}}").unwrap()
    );
}