hyperjson 0.2.4

A hyper-fast Python module for reading/writing JSON data
Documentation
import hyperjson
import pytest
from hypothesis import given, assume, settings, strategies as st


# min, max: RFC 7159
st_int = st.integers(min_value=-(2**53)+1, max_value=(2**53)-1)
st_floats = st.floats(min_value=-(2**53)+1, max_value=(2**53)-1)

# st.floats would be nice, but then we need pytest.approx, which doesn't work with eg. text
st_json = st.recursive(st.booleans() | st.text() | st.none() | st_int  # | st_floats
                       , lambda children: st.lists(children) | st.dictionaries(st.text(), children))


@given(st_floats)
def test_floats(xs):
    assert hyperjson.loads(hyperjson.dumps(xs)) == pytest.approx(
        xs)  # fails when abs=0.05


@given(st.text())
def test_text(xs):
    assert hyperjson.loads(hyperjson.dumps(xs)) == xs


@given(st.booleans())
def test_bool(xs):
    assert hyperjson.loads(hyperjson.dumps(xs)) == xs


@given(st.none())
def test_none(xs):
    assert hyperjson.loads(hyperjson.dumps(xs)) == xs


@given(st.lists(st_int))
def test_list_integers(lst):
    assert hyperjson.loads(hyperjson.dumps(lst)) == lst


@given(st.lists(st.floats(min_value=-(2**53)+1, max_value=(2**53)-1)))
def test_list_floats(lst):
    assert hyperjson.loads(hyperjson.dumps(lst)) == pytest.approx(lst)


@given(st.lists(st.text()))
def test_list_text(lst):
    assert hyperjson.loads(hyperjson.dumps(lst)) == lst

@given(st.lists(st.one_of(st.none(), st.text())))
def test_list_mixed(lst):
    assert hyperjson.loads(hyperjson.dumps(
        lst)) == lst

@given(st.lists(st.one_of(st_int, st_floats)))
def test_list_mixed(lst):
    assert hyperjson.loads(hyperjson.dumps(
        lst)) == pytest.approx(lst)


@given(st_json)
def test_json_obj(j_obj):
    assert hyperjson.loads(hyperjson.dumps(j_obj)) == j_obj