test_sequences_and_iterators.py revision 11986
111986Sandreas.sandberg@arm.comimport pytest 211986Sandreas.sandberg@arm.com 311986Sandreas.sandberg@arm.com 411986Sandreas.sandberg@arm.comdef isclose(a, b, rel_tol=1e-05, abs_tol=0.0): 511986Sandreas.sandberg@arm.com """Like math.isclose() from Python 3.5""" 611986Sandreas.sandberg@arm.com return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) 711986Sandreas.sandberg@arm.com 811986Sandreas.sandberg@arm.com 911986Sandreas.sandberg@arm.comdef allclose(a_list, b_list, rel_tol=1e-05, abs_tol=0.0): 1011986Sandreas.sandberg@arm.com return all(isclose(a, b, rel_tol=rel_tol, abs_tol=abs_tol) for a, b in zip(a_list, b_list)) 1111986Sandreas.sandberg@arm.com 1211986Sandreas.sandberg@arm.com 1311986Sandreas.sandberg@arm.comdef test_generalized_iterators(): 1411986Sandreas.sandberg@arm.com from pybind11_tests import IntPairs 1511986Sandreas.sandberg@arm.com 1611986Sandreas.sandberg@arm.com assert list(IntPairs([(1, 2), (3, 4), (0, 5)]).nonzero()) == [(1, 2), (3, 4)] 1711986Sandreas.sandberg@arm.com assert list(IntPairs([(1, 2), (2, 0), (0, 3), (4, 5)]).nonzero()) == [(1, 2)] 1811986Sandreas.sandberg@arm.com assert list(IntPairs([(0, 3), (1, 2), (3, 4)]).nonzero()) == [] 1911986Sandreas.sandberg@arm.com 2011986Sandreas.sandberg@arm.com assert list(IntPairs([(1, 2), (3, 4), (0, 5)]).nonzero_keys()) == [1, 3] 2111986Sandreas.sandberg@arm.com assert list(IntPairs([(1, 2), (2, 0), (0, 3), (4, 5)]).nonzero_keys()) == [1] 2211986Sandreas.sandberg@arm.com assert list(IntPairs([(0, 3), (1, 2), (3, 4)]).nonzero_keys()) == [] 2311986Sandreas.sandberg@arm.com 2411986Sandreas.sandberg@arm.com 2511986Sandreas.sandberg@arm.comdef test_sequence(): 2611986Sandreas.sandberg@arm.com from pybind11_tests import Sequence, ConstructorStats 2711986Sandreas.sandberg@arm.com 2811986Sandreas.sandberg@arm.com cstats = ConstructorStats.get(Sequence) 2911986Sandreas.sandberg@arm.com 3011986Sandreas.sandberg@arm.com s = Sequence(5) 3111986Sandreas.sandberg@arm.com assert cstats.values() == ['of size', '5'] 3211986Sandreas.sandberg@arm.com 3311986Sandreas.sandberg@arm.com assert "Sequence" in repr(s) 3411986Sandreas.sandberg@arm.com assert len(s) == 5 3511986Sandreas.sandberg@arm.com assert s[0] == 0 and s[3] == 0 3611986Sandreas.sandberg@arm.com assert 12.34 not in s 3711986Sandreas.sandberg@arm.com s[0], s[3] = 12.34, 56.78 3811986Sandreas.sandberg@arm.com assert 12.34 in s 3911986Sandreas.sandberg@arm.com assert isclose(s[0], 12.34) and isclose(s[3], 56.78) 4011986Sandreas.sandberg@arm.com 4111986Sandreas.sandberg@arm.com rev = reversed(s) 4211986Sandreas.sandberg@arm.com assert cstats.values() == ['of size', '5'] 4311986Sandreas.sandberg@arm.com 4411986Sandreas.sandberg@arm.com rev2 = s[::-1] 4511986Sandreas.sandberg@arm.com assert cstats.values() == ['of size', '5'] 4611986Sandreas.sandberg@arm.com 4711986Sandreas.sandberg@arm.com expected = [0, 56.78, 0, 0, 12.34] 4811986Sandreas.sandberg@arm.com assert allclose(rev, expected) 4911986Sandreas.sandberg@arm.com assert allclose(rev2, expected) 5011986Sandreas.sandberg@arm.com assert rev == rev2 5111986Sandreas.sandberg@arm.com 5211986Sandreas.sandberg@arm.com rev[0::2] = Sequence([2.0, 2.0, 2.0]) 5311986Sandreas.sandberg@arm.com assert cstats.values() == ['of size', '3', 'from std::vector'] 5411986Sandreas.sandberg@arm.com 5511986Sandreas.sandberg@arm.com assert allclose(rev, [2, 56.78, 2, 0, 2]) 5611986Sandreas.sandberg@arm.com 5711986Sandreas.sandberg@arm.com assert cstats.alive() == 3 5811986Sandreas.sandberg@arm.com del s 5911986Sandreas.sandberg@arm.com assert cstats.alive() == 2 6011986Sandreas.sandberg@arm.com del rev 6111986Sandreas.sandberg@arm.com assert cstats.alive() == 1 6211986Sandreas.sandberg@arm.com del rev2 6311986Sandreas.sandberg@arm.com assert cstats.alive() == 0 6411986Sandreas.sandberg@arm.com 6511986Sandreas.sandberg@arm.com assert cstats.values() == [] 6611986Sandreas.sandberg@arm.com assert cstats.default_constructions == 0 6711986Sandreas.sandberg@arm.com assert cstats.copy_constructions == 0 6811986Sandreas.sandberg@arm.com assert cstats.move_constructions >= 1 6911986Sandreas.sandberg@arm.com assert cstats.copy_assignments == 0 7011986Sandreas.sandberg@arm.com assert cstats.move_assignments == 0 7111986Sandreas.sandberg@arm.com 7211986Sandreas.sandberg@arm.com 7311986Sandreas.sandberg@arm.comdef test_map_iterator(): 7411986Sandreas.sandberg@arm.com from pybind11_tests import StringMap 7511986Sandreas.sandberg@arm.com 7611986Sandreas.sandberg@arm.com m = StringMap({'hi': 'bye', 'black': 'white'}) 7711986Sandreas.sandberg@arm.com assert m['hi'] == 'bye' 7811986Sandreas.sandberg@arm.com assert len(m) == 2 7911986Sandreas.sandberg@arm.com assert m['black'] == 'white' 8011986Sandreas.sandberg@arm.com 8111986Sandreas.sandberg@arm.com with pytest.raises(KeyError): 8211986Sandreas.sandberg@arm.com assert m['orange'] 8311986Sandreas.sandberg@arm.com m['orange'] = 'banana' 8411986Sandreas.sandberg@arm.com assert m['orange'] == 'banana' 8511986Sandreas.sandberg@arm.com 8611986Sandreas.sandberg@arm.com expected = {'hi': 'bye', 'black': 'white', 'orange': 'banana'} 8711986Sandreas.sandberg@arm.com for k in m: 8811986Sandreas.sandberg@arm.com assert m[k] == expected[k] 8911986Sandreas.sandberg@arm.com for k, v in m.items(): 9011986Sandreas.sandberg@arm.com assert v == expected[k] 91