| # This file is dual licensed under the terms of the Apache License, Version | 
 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository | 
 | # for complete details. | 
 |  | 
 | from __future__ import absolute_import, division, print_function | 
 |  | 
 | import pytest | 
 |  | 
 | from cryptography import utils | 
 |  | 
 |  | 
 | def test_int_from_bytes_bytearray(): | 
 |     assert utils.int_from_bytes(bytearray(b"\x02\x10"), "big") == 528 | 
 |     with pytest.raises(TypeError): | 
 |         utils.int_from_bytes(["list", "is", "not", "bytes"], "big") | 
 |  | 
 |  | 
 | class TestCachedProperty(object): | 
 |     def test_simple(self): | 
 |         accesses = [] | 
 |  | 
 |         class T(object): | 
 |             @utils.cached_property | 
 |             def t(self): | 
 |                 accesses.append(None) | 
 |                 return 14 | 
 |  | 
 |         assert T.t | 
 |         t = T() | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 1 | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 1 | 
 |  | 
 |         t = T() | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 2 | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 2 | 
 |  | 
 |     def test_set(self): | 
 |         accesses = [] | 
 |  | 
 |         class T(object): | 
 |             @utils.cached_property | 
 |             def t(self): | 
 |                 accesses.append(None) | 
 |                 return 14 | 
 |  | 
 |         t = T() | 
 |         with pytest.raises(AttributeError): | 
 |             t.t = None | 
 |         assert len(accesses) == 0 | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 1 | 
 |         with pytest.raises(AttributeError): | 
 |             t.t = None | 
 |         assert len(accesses) == 1 | 
 |         assert t.t == 14 | 
 |         assert len(accesses) == 1 | 
 |  | 
 |  | 
 | def test_bit_length(): | 
 |     assert utils.bit_length(1) == 1 | 
 |     assert utils.bit_length(11) == 4 |