def METHOD_NAME():
    ad = AttrDict()
    ad["one"] = "one"
    ad[1] = 1
    ad[("a", 2)] = ("a", 2)
    assert list(ad.keys()) == ["one", 1, ("a", 2)]
    assert len(ad) == 3
    plk = pickle.dumps(ad)
    pad = pickle.loads(plk)
    assert list(pad.keys()) == ["one", 1, ("a", 2)]
    assert len(pad) == 3
    ad2 = ad.copy()
    assert list(ad2.keys()) == list(ad.keys())
    assert ad.get("one", None) == "one"
    assert ad.get("two", False) is False
    k, v = ad.popitem()
    assert k == "one"
    assert v == "one"
    items = ad.items()
    assert (1, 1) in items
    assert (("a", 2), ("a", 2)) in items
    assert len(items) == 2
    values = ad.values()
    assert 1 in values
    assert ("a", 2) in values
    assert len(values) == 2
    ad2 = AttrDict()
    ad2[1] = 3
    ad2["one"] = "one"
    ad2["a"] = "a"
    ad.update(ad2)
    assert ad[1] == 3
    assert "a" in ad
    ad.__str__()
    with pytest.raises(AttributeError):
        ad.__private_dict__ = None
    with pytest.raises(AttributeError):
        ad.some_other_key
    with pytest.raises(KeyError):
        ad["__private_dict__"] = None
    del ad[1]
    assert 1 not in ad.keys()
    ad.new_value = "new_value"
    assert "new_value" in ad.keys()
    assert ad.new_value == ad["new_value"]
    for key in ad.keys():
        if isinstance(key, str):
            assert key in dir(ad)
    new_value = ad.pop("new_value")
    assert new_value == "new_value"
    del ad.one
    assert "one" not in ad.keys()
    ad.clear()
    assert list(ad.keys()) == []