From c52f43e72dfcea03037729649da84c23b3beb04a Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Sun, 22 Aug 2010 00:59:46 +0000 Subject: [PATCH] Fixing whitespace problems git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@111767 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../date.time/tested_elsewhere.pass.cpp | 38 +- .../arithmetic.operations/divides.pass.cpp | 25 +- .../arithmetic.operations/minus.pass.cpp | 25 +- .../arithmetic.operations/modulus.pass.cpp | 25 +- .../arithmetic.operations/multiplies.pass.cpp | 25 +- .../arithmetic.operations/negate.pass.cpp | 25 +- .../arithmetic.operations/plus.pass.cpp | 25 +- .../base/nothing_to_do.pass.cpp | 13 +- .../func.bind.bind/invoke_int_0.pass.cpp | 54 ++- .../func.bind.bind/invoke_lvalue.pass.cpp | 268 ++++++++++++- .../func.bind.bind/invoke_rvalue.pass.cpp | 249 +++++++++++- .../func.bind.bind/invoke_void_0.pass.cpp | 60 ++- .../is_bind_expression.pass.cpp | 33 +- .../func.bind.isbind/is_placeholder.pass.cpp | 42 +- .../func.bind.place/placeholders.pass.cpp | 37 +- .../bind/func.bind/nothing_to_do.pass.cpp | 13 +- .../bind/nothing_to_do.pass.cpp | 13 +- .../bitwise.operations/bit_and.pass.cpp | 29 +- .../bitwise.operations/bit_or.pass.cpp | 29 +- .../bitwise.operations/bit_xor.pass.cpp | 29 +- .../comparisons/equal_to.pass.cpp | 26 +- .../comparisons/greater.pass.cpp | 27 +- .../comparisons/greater_equal.pass.cpp | 27 +- .../comparisons/less.pass.cpp | 27 +- .../comparisons/less_equal.pass.cpp | 27 +- .../comparisons/not_equal_to.pass.cpp | 26 +- .../func.def/nothing_to_do.pass.cpp | 13 +- .../func.memfn/member_data.fail.cpp | 43 +- .../func.memfn/member_data.pass.cpp | 42 +- .../func.memfn/member_function.pass.cpp | 67 +++- .../func.memfn/member_function_const.pass.cpp | 73 +++- .../member_function_const_volatile.pass.cpp | 73 +++- .../member_function_volatile.pass.cpp | 73 +++- .../func.require/binary_function.pass.cpp | 24 +- .../func.require/unary_function.pass.cpp | 23 +- .../bad_function_call.pass.cpp | 27 +- .../bad_function_call_ctor.pass.cpp | 21 +- .../func.wrap.func.alg/swap.pass.cpp | 136 ++++++- .../func.wrap.func.cap/operator_bool.pass.cpp | 30 +- .../func.wrap.func.con/F.pass.cpp | 99 ++++- .../func.wrap.func.con/F_assign.pass.cpp | 106 ++++- .../alloc_rfunction.pass.cpp | 2 +- .../func.wrap.func.con/copy.pass.cpp | 120 +++++- .../func.wrap.func.con/copy_assign.pass.cpp | 124 +++++- .../func.wrap.func.con/default.pass.cpp | 24 +- .../func.wrap.func.con/nullptr_t.pass.cpp | 24 +- .../nullptr_t_assign.pass.cpp | 87 +++- .../func.wrap.func.inv/invoke.fail.cpp | 47 ++- .../func.wrap.func.inv/invoke.pass.cpp | 336 +++++++++++++++- .../func.wrap.func.inv/invoke_int_0.pass.cpp | 59 ++- .../func.wrap.func.inv/invoke_void_0.pass.cpp | 68 +++- .../func.wrap.func.mod/swap.pass.cpp | 135 ++++++- .../operator_==.pass.cpp | 42 +- .../func.wrap.func.targ/target.pass.cpp | 90 ++++- .../func.wrap.func.targ/target_type.pass.cpp | 62 ++- .../func.wrap/func.wrap.func/test_allocator.h | 6 +- .../func.wrap/func.wrap.func/types.pass.cpp | 50 ++- .../func.wrap/nothing_to_do.pass.cpp | 13 +- .../pointer_to_binary_function.pass.cpp | 27 +- .../pointer_to_unary_function.pass.cpp | 27 +- .../ptr_fun1.pass.cpp | 26 +- .../ptr_fun2.pass.cpp | 26 +- .../logical.operations/logical_and.pass.cpp | 28 +- .../logical.operations/logical_not.pass.cpp | 26 +- .../logical.operations/logical_or.pass.cpp | 28 +- .../const_mem_fun.pass.cpp | 32 +- .../const_mem_fun1.pass.cpp | 32 +- .../const_mem_fun1_ref_t.pass.cpp | 34 +- .../const_mem_fun1_t.pass.cpp | 34 +- .../const_mem_fun_ref.pass.cpp | 32 +- .../const_mem_fun_ref1.pass.cpp | 32 +- .../const_mem_fun_ref_t.pass.cpp | 34 +- .../const_mem_fun_t.pass.cpp | 34 +- .../member.pointer.adaptors/mem_fun.pass.cpp | 32 +- .../member.pointer.adaptors/mem_fun1.pass.cpp | 32 +- .../mem_fun1_ref_t.pass.cpp | 34 +- .../mem_fun1_t.pass.cpp | 34 +- .../mem_fun_ref.pass.cpp | 32 +- .../mem_fun_ref1.pass.cpp | 32 +- .../mem_fun_ref_t.pass.cpp | 34 +- .../mem_fun_t.pass.cpp | 34 +- .../negators/binary_negate.pass.cpp | 28 +- .../function.objects/negators/not1.pass.cpp | 23 +- .../function.objects/negators/not2.pass.cpp | 25 +- .../negators/unary_negate.pass.cpp | 26 +- .../function.objects/refwrap/binary.pass.cpp | 81 +++- .../refwrap.access/conversion.pass.cpp | 47 ++- .../refwrap.assign/copy_assign.pass.cpp | 59 ++- .../refwrap/refwrap.const/copy_ctor.pass.cpp | 47 ++- .../refwrap/refwrap.const/type_ctor.fail.cpp | 23 +- .../refwrap/refwrap.const/type_ctor.pass.cpp | 46 ++- .../refwrap/refwrap.helpers/cref_1.pass.cpp | 25 +- .../refwrap/refwrap.helpers/cref_2.pass.cpp | 26 +- .../refwrap/refwrap.helpers/ref_1.fail.cpp | 28 +- .../refwrap/refwrap.helpers/ref_1.pass.cpp | 25 +- .../refwrap/refwrap.helpers/ref_2.pass.cpp | 26 +- .../refwrap/refwrap.invoke/invoke.fail.cpp | 53 ++- .../refwrap/refwrap.invoke/invoke.pass.cpp | 330 +++++++++++++++- .../refwrap.invoke/invoke_int_0.pass.cpp | 77 +++- .../refwrap.invoke/invoke_void_0.pass.cpp | 69 +++- .../function.objects/refwrap/type.pass.cpp | 38 +- .../function.objects/refwrap/unary.pass.cpp | 79 +++- .../refwrap/weak_result.pass.cpp | 83 +++- .../function.objects/version.pass.cpp | 21 +- .../allocator.adaptor.cnstr/allocs.pass.cpp | 2 +- .../converting_copy.pass.cpp | 2 +- .../converting_move.pass.cpp | 2 +- .../allocator.adaptor.cnstr/copy.pass.cpp | 2 +- .../allocator.adaptor.cnstr/default.pass.cpp | 2 +- .../allocate_size.pass.cpp | 2 +- .../allocate_size_hint.pass.cpp | 2 +- .../construct.pass.cpp | 4 +- .../deallocate.pass.cpp | 2 +- .../destroy.pass.cpp | 2 +- .../inner_allocator.pass.cpp | 2 +- .../max_size.pass.cpp | 2 +- .../outer_allocator.pass.cpp | 2 +- ...ct_on_container_copy_construction.pass.cpp | 2 +- .../inner_allocator_type.pass.cpp | 2 +- ...gate_on_container_copy_assignment.pass.cpp | 2 +- ...gate_on_container_move_assignment.pass.cpp | 2 +- .../propagate_on_container_swap.pass.cpp | 2 +- .../memory/allocator.adaptor/allocators.h | 6 +- .../memory/allocator.adaptor/types.pass.cpp | 3 +- .../allocator.tag/allocator_arg.pass.cpp | 23 +- .../allocate.pass.cpp | 39 +- .../allocate_hint.pass.cpp | 61 ++- .../construct.pass.cpp | 144 ++++++- .../deallocate.pass.cpp | 43 +- .../allocator.traits.members/destroy.pass.cpp | 81 +++- .../max_size.pass.cpp | 65 ++- ...ct_on_container_copy_construction.pass.cpp | 69 +++- .../const_pointer.pass.cpp | 56 ++- .../const_void_pointer.pass.cpp | 56 ++- .../difference_type.pass.cpp | 41 +- .../allocator.traits.types/pointer.pass.cpp | 43 +- ...gate_on_container_copy_assignment.pass.cpp | 41 +- ...gate_on_container_move_assignment.pass.cpp | 41 +- .../propagate_on_container_swap.pass.cpp | 41 +- .../rebind_alloc.pass.cpp | 80 +++- .../allocator.traits.types/size_type.pass.cpp | 40 +- .../void_pointer.pass.cpp | 56 ++- .../allocator.traits/allocator_type.pass.cpp | 32 +- .../allocator.traits/rebind_traits.pass.cpp | 80 +++- .../allocator.traits/value_type.pass.cpp | 32 +- .../tested_elsewhere.pass.cpp | 13 +- .../uses_allocator.pass.cpp | 34 +- .../allocator.uses/nothing_to_do.pass.cpp | 13 +- .../memory/c.malloc/nothing_to_do.pass.cpp | 15 +- .../allocator.globals/eq.pass.cpp | 32 +- .../allocator.members/address.pass.cpp | 40 +- .../allocator.members/allocate.pass.cpp | 64 ++- .../allocator.members/construct.pass.cpp | 154 +++++++- .../allocator.members/max_size.pass.cpp | 28 +- .../allocator_types.pass.cpp | 50 ++- .../default.allocator/allocator_void.pass.cpp | 37 +- .../pointer.traits/difference_type.pass.cpp | 26 +- .../pointer.traits/element_type.pass.cpp | 26 +- .../memory/pointer.traits/pointer.pass.cpp | 33 +- .../pointer_to.pass.cpp | 49 ++- .../difference_type.pass.cpp | 49 ++- .../element_type.pass.cpp | 50 ++- .../pointer.traits.types/rebind.pass.cpp | 70 +++- .../memory/pointer.traits/pointer_to.pass.cpp | 33 +- .../memory/pointer.traits/rebind.pass.cpp | 30 +- .../nothing_to_do.pass.cpp | 13 +- .../specialized.addressof/addressof.pass.cpp | 34 +- .../uninitialized_copy.pass.cpp | 52 ++- .../uninitialized_copy_n.pass.cpp | 52 ++- .../uninitialized_fill_n.pass.cpp | 50 ++- .../uninitialized_fill.pass.cpp | 51 ++- .../raw_storag_iterator.pass.cpp | 45 ++- .../temporary_buffer.pass.cpp | 30 +- test/utilities/memory/unique.ptr/deleter.h | 182 ++++++++- .../memory/unique.ptr/nothing_to_do.pass.cpp | 13 +- .../unique.ptr.dltr/nothing_to_do.pass.cpp | 13 +- .../convert_ctor.pass.cpp | 49 ++- .../unique.ptr.dltr.dflt/default.pass.cpp | 35 +- .../unique.ptr.dltr.dflt/incomplete.fail.cpp | 27 +- .../convert_ctor.fail.cpp | 33 +- .../unique.ptr.dltr.dflt1/default.pass.cpp | 37 +- .../unique.ptr.dltr.dflt1/incomplete.fail.cpp | 27 +- .../nothing_to_do.pass.cpp | 13 +- .../unique.ptr.runtime/move01.fail.cpp | 39 +- .../unique.ptr.runtime/move01.pass.cpp | 79 +++- .../unique.ptr.runtime/move02.fail.cpp | 39 +- .../unique.ptr.runtime/move03.fail.cpp | 57 ++- .../unique.ptr.runtime/move04.fail.cpp | 57 ++- .../move_convert01.fail.cpp | 57 ++- .../move_convert02.fail.cpp | 61 ++- .../move_convert03.fail.cpp | 62 ++- .../move_convert04.fail.cpp | 57 ++- .../move_convert05.fail.cpp | 61 ++- .../move_convert06.fail.cpp | 62 ++- .../move_convert07.fail.cpp | 56 ++- .../move_convert08.fail.cpp | 60 ++- .../move_convert09.fail.cpp | 62 ++- .../unique.ptr.runtime/null_asgn.pass.cpp | 42 +- .../unique.ptr.runtime/null_ctor.pass.cpp | 45 ++- .../unique.ptr.runtime/nullptr_asgn.pass.cpp | 42 +- .../unique.ptr.runtime/pointer_type.pass.cpp | 35 +- .../default01.fail.cpp | 37 +- .../default01.pass.cpp | 48 ++- .../default02.fail.cpp | 31 +- .../default02.pass.cpp | 88 ++++- .../default03.fail.cpp | 24 +- .../unique.ptr.runtime.ctor/move01.fail.cpp | 43 +- .../unique.ptr.runtime.ctor/move01.pass.cpp | 86 +++- .../unique.ptr.runtime.ctor/move02.fail.cpp | 43 +- .../unique.ptr.runtime.ctor/move02.pass.cpp | 88 ++++- .../unique.ptr.runtime.ctor/move03.fail.cpp | 56 ++- .../unique.ptr.runtime.ctor/move04.fail.cpp | 56 ++- .../move_convert01.fail.cpp | 58 ++- .../move_convert02.fail.cpp | 62 ++- .../move_convert03.fail.cpp | 79 +++- .../move_convert04.fail.cpp | 58 ++- .../move_convert05.fail.cpp | 62 ++- .../move_convert06.fail.cpp | 79 +++- .../move_convert07.fail.cpp | 58 ++- .../move_convert08.fail.cpp | 62 ++- .../move_convert09.fail.cpp | 79 +++- .../move_convert10.fail.cpp | 58 ++- .../move_convert11.fail.cpp | 62 ++- .../move_convert12.fail.cpp | 79 +++- .../move_convert13.fail.cpp | 58 ++- .../move_convert14.fail.cpp | 62 ++- .../move_convert15.fail.cpp | 79 +++- .../move_convert16.fail.cpp | 58 ++- .../move_convert17.fail.cpp | 62 ++- .../move_convert18.fail.cpp | 79 +++- .../unique.ptr.runtime.ctor/nullptr.pass.cpp | 47 ++- .../pointer01.fail.cpp | 37 +- .../pointer01.pass.cpp | 64 ++- .../pointer02.fail.cpp | 30 +- .../pointer02.pass.cpp | 96 ++++- .../pointer03.fail.cpp | 24 +- .../pointer04.fail.cpp | 68 +++- .../pointer_deleter01.pass.cpp | 44 ++- .../pointer_deleter02.pass.cpp | 59 ++- .../pointer_deleter03.pass.cpp | 61 ++- .../pointer_deleter04.fail.cpp | 56 ++- .../pointer_deleter04.pass.cpp | 59 ++- .../pointer_deleter05.fail.cpp | 59 ++- .../release.pass.cpp | 28 +- .../reset1.pass.cpp | 49 ++- .../reset2.fail.cpp | 65 ++- .../swap.pass.cpp | 57 ++- .../dereference.fail.cpp | 24 +- .../explicit_bool.pass.cpp | 40 +- .../unique.ptr.runtime.observers/get.pass.cpp | 25 +- .../get_deleter.pass.cpp | 38 +- .../index.pass.cpp | 48 ++- .../op_arrow.fail.cpp | 31 +- .../unique.ptr.single/pointer_type.pass.cpp | 35 +- .../unique.ptr.single.asgn/move01.fail.cpp | 39 +- .../unique.ptr.single.asgn/move01.pass.cpp | 75 +++- .../unique.ptr.single.asgn/move02.fail.cpp | 39 +- .../unique.ptr.single.asgn/move03.fail.cpp | 57 ++- .../unique.ptr.single.asgn/move04.fail.cpp | 57 ++- .../move_convert01.fail.cpp | 57 ++- .../move_convert01.pass.cpp | 56 ++- .../move_convert02.fail.cpp | 61 ++- .../move_convert02.pass.cpp | 60 ++- .../move_convert03.fail.cpp | 62 ++- .../move_convert03.pass.cpp | 63 ++- .../move_convert04.fail.cpp | 57 ++- .../move_convert05.fail.cpp | 61 ++- .../move_convert06.fail.cpp | 62 ++- .../move_convert13.fail.cpp | 36 +- .../unique.ptr.single.asgn/null.pass.cpp | 42 +- .../unique.ptr.single.asgn/nullptr.pass.cpp | 42 +- .../auto_pointer.pass.cpp | 68 +++- .../auto_pointer01.fail.cpp | 68 +++- .../auto_pointer02.fail.cpp | 62 ++- .../unique.ptr.single.ctor/default01.fail.cpp | 36 +- .../unique.ptr.single.ctor/default01.pass.cpp | 47 ++- .../unique.ptr.single.ctor/default02.fail.cpp | 30 +- .../unique.ptr.single.ctor/default02.pass.cpp | 85 +++- .../unique.ptr.single.ctor/default03.fail.cpp | 24 +- .../unique.ptr.single.ctor/move01.fail.cpp | 43 +- .../unique.ptr.single.ctor/move01.pass.cpp | 142 ++++++- .../unique.ptr.single.ctor/move02.fail.cpp | 43 +- .../unique.ptr.single.ctor/move02.pass.cpp | 144 ++++++- .../unique.ptr.single.ctor/move03.fail.cpp | 56 ++- .../unique.ptr.single.ctor/move04.fail.cpp | 56 ++- .../move_convert01.fail.cpp | 56 ++- .../move_convert01.pass.cpp | 58 ++- .../move_convert02.fail.cpp | 62 ++- .../move_convert02.pass.cpp | 62 ++- .../move_convert03.fail.cpp | 79 +++- .../move_convert03.pass.cpp | 79 +++- .../move_convert04.fail.cpp | 58 ++- .../move_convert04.pass.cpp | 58 ++- .../move_convert05.fail.cpp | 51 ++- .../move_convert05.pass.cpp | 62 ++- .../move_convert06.fail.cpp | 79 +++- .../move_convert06.pass.cpp | 79 +++- .../move_convert07.fail.cpp | 58 ++- .../move_convert07.pass.cpp | 63 ++- .../move_convert08.fail.cpp | 118 +++++- .../move_convert09.fail.cpp | 79 +++- .../move_convert10.fail.cpp | 58 ++- .../move_convert11.fail.cpp | 118 +++++- .../move_convert12.fail.cpp | 79 +++- .../move_convert13.fail.cpp | 35 +- .../unique.ptr.single.ctor/nullptr.pass.cpp | 47 ++- .../unique.ptr.single.ctor/pointer01.fail.cpp | 36 +- .../unique.ptr.single.ctor/pointer01.pass.cpp | 64 ++- .../unique.ptr.single.ctor/pointer02.fail.cpp | 30 +- .../unique.ptr.single.ctor/pointer02.pass.cpp | 96 ++++- .../unique.ptr.single.ctor/pointer03.fail.cpp | 24 +- .../unique.ptr.single.ctor/pointer03.pass.cpp | 79 +++- .../pointer_deleter01.pass.cpp | 100 ++++- .../pointer_deleter02.pass.cpp | 59 ++- .../pointer_deleter03.pass.cpp | 61 ++- .../pointer_deleter04.fail.cpp | 56 ++- .../pointer_deleter04.pass.cpp | 59 ++- .../pointer_deleter05.pass.cpp | 67 +++- .../pointer_deleter06.pass.cpp | 40 +- .../unique.ptr.single.dtor/null.pass.cpp | 45 ++- .../release.pass.cpp | 28 +- .../reset1.pass.cpp | 49 ++- .../reset2.pass.cpp | 65 ++- .../reset_self.pass.cpp | 30 +- .../unique.ptr.single.modifiers/swap.pass.cpp | 60 ++- .../dereference.pass.cpp | 24 +- .../explicit_bool.pass.cpp | 40 +- .../unique.ptr.single.observers/get.pass.cpp | 25 +- .../get_deleter.pass.cpp | 38 +- .../index.fail.cpp | 48 ++- .../op_arrow.pass.cpp | 31 +- .../unique.ptr/unique.ptr.special/eq.pass.cpp | 87 +++- .../unique.ptr.special/rel.pass.cpp | 101 ++++- .../unique.ptr.special/swap.pass.cpp | 78 +++- .../util.smartptr/nothing_to_do.pass.cpp | 13 +- .../enable_shared_from_this.pass.cpp | 50 ++- .../hash_shared_ptr.pass.cpp | 31 +- .../hash_unique_ptr.pass.cpp | 31 +- .../util.smartptr.shared/test_allocator.h | 2 +- .../util.smartptr.shared/test_deleter.h | 61 ++- .../util.smartptr.shared/types.pass.cpp | 27 +- .../get_deleter.pass.cpp | 68 +++- .../auto_ptr_Y.pass.cpp | 114 +++++- .../shared_ptr.pass.cpp | 122 +++++- .../shared_ptr_Y.pass.cpp | 122 +++++- .../shared_ptr_Y_rv.pass.cpp | 122 +++++- .../shared_ptr_rv.pass.cpp | 122 +++++- .../unique_ptr_Y.pass.cpp | 114 +++++- .../const_pointer_cast.pass.cpp | 58 ++- .../dynamic_pointer_cast.pass.cpp | 58 ++- .../static_pointer_cast.pass.cpp | 70 +++- .../util.smartptr.shared.cmp/eq.pass.cpp | 32 +- .../util.smartptr.shared.cmp/lt.pass.cpp | 31 +- .../auto_ptr.pass.cpp | 95 ++++- .../default.pass.cpp | 23 +- .../nullptr_t.pass.cpp | 23 +- .../nullptr_t_deleter.pass.cpp | 48 ++- .../nullptr_t_deleter_allocator.pass.cpp | 51 ++- ...nullptr_t_deleter_allocator_throw.pass.cpp | 47 ++- .../nullptr_t_deleter_throw.pass.cpp | 62 ++- .../pointer.pass.cpp | 47 ++- .../pointer_deleter.pass.cpp | 49 ++- .../pointer_deleter_allocator.pass.cpp | 52 ++- .../pointer_deleter_allocator_throw.pass.cpp | 48 ++- .../pointer_deleter_throw.pass.cpp | 63 ++- .../pointer_throw.pass.cpp | 61 ++- .../shared_ptr.pass.cpp | 63 ++- .../shared_ptr_Y.pass.cpp | 98 ++++- .../shared_ptr_Y_rv.pass.cpp | 110 +++++- .../shared_ptr_pointer.pass.cpp | 62 ++- .../shared_ptr_rv.pass.cpp | 74 +++- .../unique_ptr.pass.cpp | 87 +++- .../weak_ptr.pass.cpp | 80 +++- .../allocate_shared.pass.cpp | 58 ++- .../make_shared.pass.cpp | 67 +++- .../tested_elsewhere.pass.cpp | 13 +- .../util.smartptr.shared.mod/reset.pass.cpp | 63 ++- .../reset_pointer.pass.cpp | 65 ++- .../reset_pointer_deleter.pass.cpp | 80 +++- .../reset_pointer_deleter_allocator.pass.cpp | 89 ++++- .../util.smartptr.shared.mod/swap.pass.cpp | 105 ++++- .../util.smartptr.shared.obs/arrow.pass.cpp | 30 +- .../dereference.pass.cpp | 26 +- .../util.smartptr.shared.obs/op_bool.pass.cpp | 30 +- .../owner_before_shared_ptr.pass.cpp | 29 +- .../owner_before_weak_ptr.pass.cpp | 32 +- .../util.smartptr.shared.obs/unique.pass.cpp | 29 +- .../util.smartptr.shared.spec/swap.pass.cpp | 105 ++++- .../util.smartptr.weak/types.pass.cpp | 27 +- .../owner_less.pass.cpp | 75 +++- .../shared_ptr_Y.pass.cpp | 62 ++- .../weak_ptr.pass.cpp | 63 ++- .../weak_ptr_Y.pass.cpp | 63 ++- .../util.smartptr.weak.const/default.pass.cpp | 26 +- .../shared_ptr_Y.pass.cpp | 96 ++++- .../weak_ptr.pass.cpp | 94 ++++- .../weak_ptr_Y.pass.cpp | 96 ++++- .../tested_elsewhere.pass.cpp | 13 +- .../util.smartptr.weak.mod/reset.pass.cpp | 42 +- .../util.smartptr.weak.mod/swap.pass.cpp | 50 ++- .../util.smartptr.weak.obs/expired.pass.cpp | 47 ++- .../util.smartptr.weak.obs/lock.pass.cpp | 59 ++- .../not_less_than.fail.cpp | 28 +- .../owner_before_shared_ptr.pass.cpp | 32 +- .../owner_before_weak_ptr.pass.cpp | 32 +- .../util.smartptr.weak.spec/swap.pass.cpp | 50 ++- .../bad_weak_ptr.pass.cpp | 32 +- test/utilities/memory/version.pass.cpp | 21 +- .../meta/meta.hel/integral_constant.pass.cpp | 37 +- .../meta/meta.rel/is_base_of.pass.cpp | 51 ++- .../meta/meta.rel/is_convertible.pass.cpp | 370 +++++++++++++++++- test/utilities/meta/meta.rel/is_same.pass.cpp | 60 ++- .../meta/meta.rqmts/nothing_to_do.pass.cpp | 13 +- .../remove_all_extents.pass.cpp | 33 +- .../meta.trans.arr/remove_extent.pass.cpp | 33 +- .../meta.trans.cv/add_const.pass.cpp | 41 +- .../meta.trans/meta.trans.cv/add_cv.pass.cpp | 41 +- .../meta.trans.cv/add_volatile.pass.cpp | 41 +- .../meta.trans.cv/remove_const.pass.cpp | 41 +- .../meta.trans.cv/remove_cv.pass.cpp | 41 +- .../meta.trans.cv/remove_volatile.pass.cpp | 41 +- .../meta.trans.other/aligned_storage.pass.cpp | 124 +++++- .../meta.trans.other/common_type.pass.cpp | 27 +- .../meta.trans.other/conditional.pass.cpp | 21 +- .../meta.trans.other/decay.pass.cpp | 32 +- .../meta.trans.other/enable_if.fail.cpp | 20 +- .../meta.trans.other/enable_if.pass.cpp | 21 +- .../meta.trans.other/result_of.pass.cpp | 40 +- .../meta.trans.other/underlying_type.pass.cpp | 20 +- .../meta.trans.ptr/add_pointer.pass.cpp | 32 +- .../meta.trans.ptr/remove_pointer.pass.cpp | 41 +- .../meta.trans.ref/add_lvalue_ref.pass.cpp | 32 +- .../meta.trans.ref/add_rvalue_ref.pass.cpp | 38 +- .../meta.trans.ref/remove_ref.pass.cpp | 44 ++- .../meta.trans.sign/make_signed.pass.cpp | 43 +- .../meta.trans.sign/make_unsigned.pass.cpp | 43 +- .../meta/meta.trans/nothing_to_do.pass.cpp | 13 +- .../meta.type.synop/nothing_to_do.pass.cpp | 13 +- .../meta.unary/meta.unary.cat/array.pass.cpp | 53 ++- .../meta.unary/meta.unary.cat/class.pass.cpp | 53 ++- .../meta.unary/meta.unary.cat/enum.pass.cpp | 49 ++- .../meta.unary.cat/floating_point.pass.cpp | 49 ++- .../meta.unary.cat/function.pass.cpp | 50 ++- .../meta.unary.cat/integral.pass.cpp | 59 ++- .../meta.unary.cat/lvalue_ref.pass.cpp | 39 +- .../member_function_pointer.pass.cpp | 53 ++- .../member_object_pointer.pass.cpp | 51 ++- .../meta.unary.cat/pointer.pass.cpp | 50 ++- .../meta.unary.cat/rvalue_ref.pass.cpp | 41 +- .../meta.unary/meta.unary.cat/union.pass.cpp | 53 ++- .../meta.unary/meta.unary.cat/void.pass.cpp | 47 ++- .../meta.unary/meta.unary.comp/array.pass.cpp | 47 ++- .../meta.unary/meta.unary.comp/class.pass.cpp | 47 ++- .../meta.unary/meta.unary.comp/enum.pass.cpp | 43 +- .../meta.unary.comp/floating_point.pass.cpp | 43 +- .../meta.unary.comp/function.pass.cpp | 44 ++- .../meta.unary.comp/integral.pass.cpp | 53 ++- .../meta.unary.comp/lvalue_ref.pass.cpp | 33 +- .../member_function_pointer.pass.cpp | 47 ++- .../member_object_pointer.pass.cpp | 45 ++- .../meta.unary.comp/pointer.pass.cpp | 44 ++- .../meta.unary.comp/rvalue_ref.pass.cpp | 35 +- .../meta.unary/meta.unary.comp/union.pass.cpp | 47 ++- .../meta.unary/meta.unary.comp/void.pass.cpp | 41 +- .../meta.unary.prop/alignment_of.pass.cpp | 43 +- .../meta.unary.prop/extent.pass.cpp | 61 ++- .../has_nothrow_copy_assign.pass.cpp | 78 +++- .../has_nothrow_copy_constructor.pass.cpp | 78 +++- .../has_nothrow_default_constructor.pass.cpp | 78 +++- .../has_trivial_copy_assign.pass.cpp | 78 +++- .../has_trivial_copy_constructor.pass.cpp | 78 +++- .../has_trivial_default_constructor.pass.cpp | 78 +++- .../has_trivial_destructor.pass.cpp | 78 +++- .../has_virtual_destructor.pass.cpp | 78 +++- .../meta.unary.prop/is_abstract.pass.cpp | 72 +++- .../meta.unary.prop/is_const.pass.cpp | 38 +- .../meta.unary.prop/is_constructible.pass.cpp | 39 +- .../meta.unary.prop/is_empty.pass.cpp | 66 +++- .../meta.unary.prop/is_literal_type.pass.cpp | 23 +- .../is_nothrow_constructible.pass.cpp | 53 ++- .../meta.unary.prop/is_pod.pass.cpp | 53 ++- .../meta.unary.prop/is_polymorphic.pass.cpp | 72 +++- .../meta.unary.prop/is_signed.pass.cpp | 55 ++- .../is_standard_layout.pass.cpp | 22 +- .../meta.unary.prop/is_trivial.pass.cpp | 22 +- .../is_trivialially_copyable.pass.cpp | 38 +- .../meta.unary.prop/is_unsigned.pass.cpp | 55 ++- .../meta.unary.prop/is_volatile.pass.cpp | 38 +- .../meta.unary/meta.unary.prop/rank.pass.cpp | 47 ++- .../meta/meta.unary/nothing_to_do.pass.cpp | 13 +- test/utilities/meta/version.pass.cpp | 21 +- test/utilities/nothing_to_do.pass.cpp | 13 +- .../ratio/ratio.arithmetic/ratio_add.fail.cpp | 20 +- .../ratio/ratio.arithmetic/ratio_add.pass.cpp | 59 ++- .../ratio.arithmetic/ratio_divide.fail.cpp | 20 +- .../ratio.arithmetic/ratio_divide.pass.cpp | 59 ++- .../ratio.arithmetic/ratio_multiply.fail.cpp | 20 +- .../ratio.arithmetic/ratio_multiply.pass.cpp | 59 ++- .../ratio.arithmetic/ratio_subtract.fail.cpp | 20 +- .../ratio.arithmetic/ratio_subtract.pass.cpp | 59 ++- .../ratio.comparison/ratio_equal.pass.cpp | 57 ++- .../ratio.comparison/ratio_greater.pass.cpp | 57 ++- .../ratio_greater_equal.pass.cpp | 57 ++- .../ratio.comparison/ratio_less.pass.cpp | 87 +++- .../ratio_less_equal.pass.cpp | 57 ++- .../ratio.comparison/ratio_not_equal.pass.cpp | 57 ++- .../ratio/ratio.ratio/ratio.pass.cpp | 45 ++- .../ratio/ratio.ratio/ratio1.fail.cpp | 19 +- .../ratio/ratio.ratio/ratio2.fail.cpp | 20 +- .../ratio/ratio.ratio/ratio3.fail.cpp | 20 +- .../ratio/ratio.si/nothing_to_do.pass.cpp | 13 +- test/utilities/ratio/typedefs.pass.cpp | 33 +- test/utilities/ratio/version.pass.cpp | 21 +- .../bitset.cons/char_ptr_ctor.pass.cpp | 52 ++- .../bitset.cons/default.pass.cpp | 38 +- .../bitset.cons/string_ctor.pass.cpp | 87 +++- .../bitset.cons/ull_ctor.pass.cpp | 41 +- .../bitset.members/all.pass.cpp | 42 +- .../bitset.members/any.pass.cpp | 45 ++- .../bitset.members/count.pass.cpp | 50 ++- .../bitset.members/flip_all.pass.cpp | 48 ++- .../bitset.members/flip_one.pass.cpp | 59 ++- .../bitset.members/index.pass.cpp | 66 +++- .../bitset.members/index_const.pass.cpp | 48 ++- .../bitset.members/left_shift.pass.cpp | 49 ++- .../bitset.members/left_shift_eq.pass.cpp | 54 ++- .../bitset.members/none.pass.cpp | 45 ++- .../bitset.members/not_all.pass.cpp | 47 ++- .../bitset.members/op_and_eq.pass.cpp | 49 ++- .../bitset.members/op_eq_eq.pass.cpp | 54 ++- .../bitset.members/op_or_eq.pass.cpp | 49 ++- .../bitset.members/op_xor_eq.pass.cpp | 49 ++- .../bitset.members/reset_all.pass.cpp | 37 +- .../bitset.members/reset_one.pass.cpp | 48 ++- .../bitset.members/right_shift.pass.cpp | 49 ++- .../bitset.members/right_shift_eq.pass.cpp | 54 ++- .../bitset.members/set_all.pass.cpp | 36 +- .../bitset.members/set_one.pass.cpp | 53 ++- .../bitset.members/size.pass.cpp | 34 +- .../bitset.members/test.pass.cpp | 54 ++- .../bitset.members/to_string.pass.cpp | 161 +++++++- .../bitset.members/to_ullong.pass.cpp | 51 ++- .../bitset.members/to_ulong.pass.cpp | 51 ++- .../bitset.operators/op_and.pass.cpp | 47 ++- .../bitset.operators/op_not.pass.cpp | 47 ++- .../bitset.operators/op_or.pass.cpp | 47 ++- .../bitset.operators/stream_in.pass.cpp | 27 +- .../bitset.operators/stream_out.pass.cpp | 27 +- .../template.bitset/includes.pass.cpp | 33 +- .../template.bitset/version.pass.cpp | 21 +- test/utilities/time/clock.h | 2 +- test/utilities/time/hours.pass.cpp | 28 +- test/utilities/time/microseconds.pass.cpp | 28 +- test/utilities/time/milliseconds.pass.cpp | 28 +- test/utilities/time/minutes.pass.cpp | 28 +- test/utilities/time/nanoseconds.pass.cpp | 28 +- test/utilities/time/rep.h | 2 +- test/utilities/time/seconds.pass.cpp | 28 +- .../time.clock.req/nothing_to_do.pass.cpp | 13 +- .../time/time.clock/nothing_to_do.pass.cpp | 13 +- .../time.clock.hires/consistency.pass.cpp | 26 +- .../time.clock/time.clock.hires/now.pass.cpp | 23 +- .../time.clock.monotonic/consistency.pass.cpp | 26 +- .../time.clock.monotonic/now.pass.cpp | 26 +- .../time.clock.system/consistency.pass.cpp | 27 +- .../time.clock.system/from_time_t.pass.cpp | 24 +- .../time.clock/time.clock.system/now.pass.cpp | 23 +- .../time.clock.system/rep_signed.pass.cpp | 24 +- .../time.clock.system/to_time_t.pass.cpp | 24 +- .../time/time.duration/default_ratio.pass.cpp | 27 +- .../time/time.duration/duration.fail.cpp | 24 +- .../time/time.duration/positive_num.fail.cpp | 23 +- .../time/time.duration/ratio.fail.cpp | 31 +- .../time.duration.arithmetic/op_++.pass.cpp | 26 +- .../op_++int.pass.cpp | 26 +- .../time.duration.arithmetic/op_+.pass.cpp | 25 +- .../time.duration.arithmetic/op_+=.pass.cpp | 27 +- .../time.duration.arithmetic/op_--.pass.cpp | 26 +- .../op_--int.pass.cpp | 26 +- .../time.duration.arithmetic/op_-.pass.cpp | 25 +- .../time.duration.arithmetic/op_-=.pass.cpp | 27 +- .../op_divide=.pass.cpp | 25 +- .../op_mod=duration.pass.cpp | 28 +- .../op_mod=rep.pass.cpp | 25 +- .../op_times=.pass.cpp | 25 +- .../time.duration.cast/duration_cast.pass.cpp | 44 ++- .../time.duration.cast/toduration.fail.cpp | 26 +- .../op_equal.pass.cpp | 70 +++- .../op_less.pass.cpp | 92 ++++- .../time.duration.cons/convert_exact.pass.cpp | 28 +- .../convert_float_to_int.fail.cpp | 26 +- .../convert_inexact.fail.cpp | 26 +- .../convert_inexact.pass.cpp | 28 +- .../convert_int_to_float.pass.cpp | 28 +- .../time.duration.cons/default.pass.cpp | 35 +- .../time.duration.cons/rep.pass.cpp | 37 +- .../time.duration.cons/rep01.fail.cpp | 27 +- .../time.duration.cons/rep02.fail.cpp | 27 +- .../time.duration.cons/rep02.pass.cpp | 27 +- .../time.duration.cons/rep03.fail.cpp | 25 +- .../time.duration.nonmember/op_+.pass.cpp | 48 ++- .../time.duration.nonmember/op_-.pass.cpp | 48 ++- .../op_divide_duration.pass.cpp | 44 ++- .../op_divide_rep.fail.cpp | 27 +- .../op_divide_rep.pass.cpp | 27 +- .../op_mod_duration.pass.cpp | 42 +- .../op_mod_rep.fail.cpp | 27 +- .../op_times_rep.pass.cpp | 8 +- .../op_times_rep1.fail.cpp | 8 +- .../op_times_rep2.fail.cpp | 8 +- .../time/time.duration/types.pass.cpp | 4 +- .../time/time.point/default_duration.pass.cpp | 2 +- .../time.point.cast/time_point_cast.pass.cpp | 2 +- .../time.point.cast/toduration.fail.cpp | 2 +- .../time.point.comparisons/op_equal.fail.cpp | 4 +- .../time.point.comparisons/op_equal.pass.cpp | 4 +- .../time.point.comparisons/op_less.fail.cpp | 8 +- .../time.point.comparisons/op_less.pass.cpp | 8 +- .../time.point.cons/convert.fail.cpp | 2 +- .../time.point.cons/convert.pass.cpp | 2 +- .../time.point.nonmember/op_+.pass.cpp | 8 +- .../op_-duration.pass.cpp | 4 +- .../op_-time_point.pass.cpp | 4 +- .../duration.pass.cpp | 4 +- .../time_point.pass.cpp | 6 +- .../utilities/tuple/tuple.tuple/DefaultOnly.h | 2 +- test/utilities/tuple/tuple.tuple/MoveOnly.h | 8 +- .../utilities/tuple/tuple.tuple/alloc_first.h | 2 +- test/utilities/tuple/tuple.tuple/alloc_last.h | 2 +- test/utilities/tuple/tuple.tuple/allocators.h | 6 +- .../tuple.assign/move_pair.pass.cpp | 1 - .../tuple.cnstr/alloc_UTypes.pass.cpp | 6 +- .../tuple.cnstr/alloc_move_pair.pass.cpp | 1 - .../tuple.cnstr/move_pair.pass.cpp | 1 - .../tuple.creation/forward_as_tuple.pass.cpp | 1 - .../utility/forward/forward.pass.cpp | 6 +- .../utility/forward/move_copy.pass.cpp | 4 +- .../utility/forward/move_if_noexcept.pass.cpp | 4 +- .../utility/forward/move_only.pass.cpp | 8 +- .../utility/forward/move_only1.fail.cpp | 8 +- .../utility/forward/move_only2.fail.cpp | 8 +- .../utility/forward/move_only3.fail.cpp | 8 +- .../utility/forward/move_only4.fail.cpp | 8 +- .../utility/pairs/pairs.pair/U_V.pass.cpp | 2 +- .../pairs/pairs.pair/assign_rv_pair.pass.cpp | 2 +- .../pairs.pair/assign_rv_pair_U_V.pass.cpp | 2 +- .../pairs/pairs.pair/make_pair.pass.cpp | 2 +- .../pairs/pairs.pair/piecewise.pass.cpp | 2 +- .../pairs/pairs.pair/rv_pair_U_V.pass.cpp | 2 +- .../utility/pairs/pairs.pair/types.pass.cpp | 1 - .../utility/utility.swap/swap.pass.cpp | 6 +- .../utility/utility.swap/swap_array.pass.cpp | 6 +- 652 files changed, 29155 insertions(+), 716 deletions(-) diff --git a/test/utilities/date.time/tested_elsewhere.pass.cpp b/test/utilities/date.time/tested_elsewhere.pass.cpp index bdb4d3403..0e8e2b8f1 100644 --- a/test/utilities/date.time/tested_elsewhere.pass.cpp +++ b/test/utilities/date.time/tested_elsewhere.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include #include #ifndef NULL #error NULL not defined #endif #ifndef CLOCKS_PER_SEC #error CLOCKS_PER_SEC not defined #endif int main() { std::clock_t c = 0; std::size_t s = 0; std::time_t t = 0; std::tm tm = {0}; char str[3]; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include +#include + +#ifndef NULL +#error NULL not defined +#endif + +#ifndef CLOCKS_PER_SEC +#error CLOCKS_PER_SEC not defined +#endif + +int main() +{ + std::clock_t c = 0; + std::size_t s = 0; + std::time_t t = 0; + std::tm tm = {0}; + char str[3]; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/function.objects/arithmetic.operations/divides.pass.cpp b/test/utilities/function.objects/arithmetic.operations/divides.pass.cpp index c8528c230..3c19624e7 100644 --- a/test/utilities/function.objects/arithmetic.operations/divides.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/divides.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // divides #include #include #include int main() { typedef std::divides F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 4) == 9); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// divides + +#include +#include +#include + +int main() +{ + typedef std::divides F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 4) == 9); +} diff --git a/test/utilities/function.objects/arithmetic.operations/minus.pass.cpp b/test/utilities/function.objects/arithmetic.operations/minus.pass.cpp index e21d03f43..11336d113 100644 --- a/test/utilities/function.objects/arithmetic.operations/minus.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/minus.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // minus #include #include #include int main() { typedef std::minus F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(3, 2) == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// minus + +#include +#include +#include + +int main() +{ + typedef std::minus F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(3, 2) == 1); +} diff --git a/test/utilities/function.objects/arithmetic.operations/modulus.pass.cpp b/test/utilities/function.objects/arithmetic.operations/modulus.pass.cpp index 393156966..ade0f91c1 100644 --- a/test/utilities/function.objects/arithmetic.operations/modulus.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/modulus.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // modulus #include #include #include int main() { typedef std::modulus F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 8) == 4); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// modulus + +#include +#include +#include + +int main() +{ + typedef std::modulus F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 8) == 4); +} diff --git a/test/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp b/test/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp index f020cd561..93dbf4137 100644 --- a/test/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/multiplies.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // multiplies #include #include #include int main() { typedef std::multiplies F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(3, 2) == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// multiplies + +#include +#include +#include + +int main() +{ + typedef std::multiplies F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(3, 2) == 6); +} diff --git a/test/utilities/function.objects/arithmetic.operations/negate.pass.cpp b/test/utilities/function.objects/arithmetic.operations/negate.pass.cpp index 59b56a3c6..72a90b903 100644 --- a/test/utilities/function.objects/arithmetic.operations/negate.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/negate.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // negate #include #include #include int main() { typedef std::negate F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36) == -36); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// negate + +#include +#include +#include + +int main() +{ + typedef std::negate F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36) == -36); +} diff --git a/test/utilities/function.objects/arithmetic.operations/plus.pass.cpp b/test/utilities/function.objects/arithmetic.operations/plus.pass.cpp index 2e922d2d0..40077fe36 100644 --- a/test/utilities/function.objects/arithmetic.operations/plus.pass.cpp +++ b/test/utilities/function.objects/arithmetic.operations/plus.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // plus #include #include #include int main() { typedef std::plus F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(3, 2) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// plus + +#include +#include +#include + +int main() +{ + typedef std::plus F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(3, 2) == 5); +} diff --git a/test/utilities/function.objects/base/nothing_to_do.pass.cpp b/test/utilities/function.objects/base/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/function.objects/base/nothing_to_do.pass.cpp +++ b/test/utilities/function.objects/base/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp index 28ec9d4b1..61211308b 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_int_0.pass.cpp @@ -1 +1,53 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified bind(Fn, Types...); // template // unspecified bind(Fn, Types...); #include #include template void test(F f, R expected) { assert(f() == expected); } template void test_const(const F& f, R expected) { assert(f() == expected); } int f() {return 1;} struct A_int_0 { int operator()() {return 4;} int operator()() const {return 5;} }; int main() { test(std::bind(f), 1); test(std::bind(&f), 1); test(std::bind(A_int_0()), 4); test_const(std::bind(A_int_0()), 5); test(std::bind(f), 1); test(std::bind(&f), 1); test(std::bind(A_int_0()), 4); test_const(std::bind(A_int_0()), 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified bind(Fn, Types...); +// template +// unspecified bind(Fn, Types...); + +#include +#include + +template +void +test(F f, R expected) +{ + assert(f() == expected); +} + +template +void +test_const(const F& f, R expected) +{ + assert(f() == expected); +} + +int f() {return 1;} + +struct A_int_0 +{ + int operator()() {return 4;} + int operator()() const {return 5;} +}; + +int main() +{ + test(std::bind(f), 1); + test(std::bind(&f), 1); + test(std::bind(A_int_0()), 4); + test_const(std::bind(A_int_0()), 5); + + test(std::bind(f), 1); + test(std::bind(&f), 1); + test(std::bind(A_int_0()), 4); + test_const(std::bind(A_int_0()), 5); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp index 84afdea2b..3b6f5d440 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_lvalue.pass.cpp @@ -1 +1,267 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified bind(Fn, Types...); // template // unspecified bind(Fn, Types...); #include #include #include int count = 0; // 1 arg, return void void f_void_1(int i) { count += i; } struct A_void_1 { void operator()(int i) { count += i; } void mem1() {++count;} void mem2() const {count += 2;} }; void test_void_1() { using namespace std::placeholders; int save_count = count; // function { int i = 2; std::bind(f_void_1, _1)(i); assert(count == save_count + 2); save_count = count; } { int i = 2; std::bind(f_void_1, i)(); assert(count == save_count + 2); save_count = count; } // function pointer { void (*fp)(int) = f_void_1; int i = 3; std::bind(fp, _1)(i); assert(count == save_count+3); save_count = count; } { void (*fp)(int) = f_void_1; int i = 3; std::bind(fp, i)(); assert(count == save_count+3); save_count = count; } // functor { A_void_1 a0; int i = 4; std::bind(a0, _1)(i); assert(count == save_count+4); save_count = count; } { A_void_1 a0; int i = 4; std::bind(a0, i)(); assert(count == save_count+4); save_count = count; } // member function pointer { void (A_void_1::*fp)() = &A_void_1::mem1; A_void_1 a; std::bind(fp, _1)(a); assert(count == save_count+1); save_count = count; A_void_1* ap = &a; std::bind(fp, _1)(ap); assert(count == save_count+1); save_count = count; } { void (A_void_1::*fp)() = &A_void_1::mem1; A_void_1 a; std::bind(fp, a)(); assert(count == save_count+1); save_count = count; A_void_1* ap = &a; std::bind(fp, ap)(); assert(count == save_count+1); save_count = count; } // const member function pointer { void (A_void_1::*fp)() const = &A_void_1::mem2; A_void_1 a; std::bind(fp, _1)(a); assert(count == save_count+2); save_count = count; A_void_1* ap = &a; std::bind(fp, _1)(ap); assert(count == save_count+2); save_count = count; } { void (A_void_1::*fp)() const = &A_void_1::mem2; A_void_1 a; std::bind(fp, a)(); assert(count == save_count+2); save_count = count; A_void_1* ap = &a; std::bind(fp, ap)(); assert(count == save_count+2); save_count = count; } } // 1 arg, return int int f_int_1(int i) { return i + 1; } struct A_int_1 { A_int_1() : data_(5) {} int operator()(int i) { return i - 1; } int mem1() {return 3;} int mem2() const {return 4;} int data_; }; void test_int_1() { using namespace std::placeholders; // function { int i = 2; assert(std::bind(f_int_1, _1)(i) == 3); assert(std::bind(f_int_1, i)() == 3); } // function pointer { int (*fp)(int) = f_int_1; int i = 3; assert(std::bind(fp, _1)(i) == 4); assert(std::bind(fp, i)() == 4); } // functor { int i = 4; assert(std::bind(A_int_1(), _1)(i) == 3); assert(std::bind(A_int_1(), i)() == 3); } // member function pointer { A_int_1 a; assert(std::bind(&A_int_1::mem1, _1)(a) == 3); assert(std::bind(&A_int_1::mem1, a)() == 3); A_int_1* ap = &a; assert(std::bind(&A_int_1::mem1, _1)(ap) == 3); assert(std::bind(&A_int_1::mem1, ap)() == 3); } // const member function pointer { A_int_1 a; assert(std::bind(&A_int_1::mem2, _1)(A_int_1()) == 4); assert(std::bind(&A_int_1::mem2, A_int_1())() == 4); A_int_1* ap = &a; assert(std::bind(&A_int_1::mem2, _1)(ap) == 4); assert(std::bind(&A_int_1::mem2, ap)() == 4); } // member data pointer { A_int_1 a; assert(std::bind(&A_int_1::data_, _1)(a) == 5); assert(std::bind(&A_int_1::data_, a)() == 5); A_int_1* ap = &a; assert(std::bind(&A_int_1::data_, _1)(a) == 5); std::bind(&A_int_1::data_, _1)(a) = 6; assert(std::bind(&A_int_1::data_, _1)(a) == 6); assert(std::bind(&A_int_1::data_, _1)(ap) == 6); std::bind(&A_int_1::data_, _1)(ap) = 7; assert(std::bind(&A_int_1::data_, _1)(ap) == 7); } } // 2 arg, return void void f_void_2(int i, int j) { count += i+j; } struct A_void_2 { void operator()(int i, int j) { count += i+j; } void mem1(int i) {count += i;} void mem2(int i) const {count += i;} }; void test_void_2() { using namespace std::placeholders; int save_count = count; // function { int i = 2; int j = 3; std::bind(f_void_2, _1, _2)(i, j); assert(count == save_count+5); save_count = count; std::bind(f_void_2, i, _1)(j); assert(count == save_count+5); save_count = count; std::bind(f_void_2, i, j)(); assert(count == save_count+5); save_count = count; } // member function pointer { int j = 3; std::bind(&A_void_2::mem1, _1, _2)(A_void_2(), j); assert(count == save_count+3); save_count = count; std::bind(&A_void_2::mem1, _2, _1)(j, A_void_2()); assert(count == save_count+3); save_count = count; } } int main() { test_void_1(); test_int_1(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified bind(Fn, Types...); +// template +// unspecified bind(Fn, Types...); + +#include + +#include +#include + +int count = 0; + +// 1 arg, return void + +void f_void_1(int i) +{ + count += i; +} + +struct A_void_1 +{ + void operator()(int i) + { + count += i; + } + + void mem1() {++count;} + void mem2() const {count += 2;} +}; + +void +test_void_1() +{ + using namespace std::placeholders; + int save_count = count; + // function + { + int i = 2; + std::bind(f_void_1, _1)(i); + assert(count == save_count + 2); + save_count = count; + } + { + int i = 2; + std::bind(f_void_1, i)(); + assert(count == save_count + 2); + save_count = count; + } + // function pointer + { + void (*fp)(int) = f_void_1; + int i = 3; + std::bind(fp, _1)(i); + assert(count == save_count+3); + save_count = count; + } + { + void (*fp)(int) = f_void_1; + int i = 3; + std::bind(fp, i)(); + assert(count == save_count+3); + save_count = count; + } + // functor + { + A_void_1 a0; + int i = 4; + std::bind(a0, _1)(i); + assert(count == save_count+4); + save_count = count; + } + { + A_void_1 a0; + int i = 4; + std::bind(a0, i)(); + assert(count == save_count+4); + save_count = count; + } + // member function pointer + { + void (A_void_1::*fp)() = &A_void_1::mem1; + A_void_1 a; + std::bind(fp, _1)(a); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + std::bind(fp, _1)(ap); + assert(count == save_count+1); + save_count = count; + } + { + void (A_void_1::*fp)() = &A_void_1::mem1; + A_void_1 a; + std::bind(fp, a)(); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + std::bind(fp, ap)(); + assert(count == save_count+1); + save_count = count; + } + // const member function pointer + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + A_void_1 a; + std::bind(fp, _1)(a); + assert(count == save_count+2); + save_count = count; + A_void_1* ap = &a; + std::bind(fp, _1)(ap); + assert(count == save_count+2); + save_count = count; + } + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + A_void_1 a; + std::bind(fp, a)(); + assert(count == save_count+2); + save_count = count; + A_void_1* ap = &a; + std::bind(fp, ap)(); + assert(count == save_count+2); + save_count = count; + } +} + +// 1 arg, return int + +int f_int_1(int i) +{ + return i + 1; +} + +struct A_int_1 +{ + A_int_1() : data_(5) {} + int operator()(int i) + { + return i - 1; + } + + int mem1() {return 3;} + int mem2() const {return 4;} + int data_; +}; + +void +test_int_1() +{ + using namespace std::placeholders; + // function + { + int i = 2; + assert(std::bind(f_int_1, _1)(i) == 3); + assert(std::bind(f_int_1, i)() == 3); + } + // function pointer + { + int (*fp)(int) = f_int_1; + int i = 3; + assert(std::bind(fp, _1)(i) == 4); + assert(std::bind(fp, i)() == 4); + } + // functor + { + int i = 4; + assert(std::bind(A_int_1(), _1)(i) == 3); + assert(std::bind(A_int_1(), i)() == 3); + } + // member function pointer + { + A_int_1 a; + assert(std::bind(&A_int_1::mem1, _1)(a) == 3); + assert(std::bind(&A_int_1::mem1, a)() == 3); + A_int_1* ap = &a; + assert(std::bind(&A_int_1::mem1, _1)(ap) == 3); + assert(std::bind(&A_int_1::mem1, ap)() == 3); + } + // const member function pointer + { + A_int_1 a; + assert(std::bind(&A_int_1::mem2, _1)(A_int_1()) == 4); + assert(std::bind(&A_int_1::mem2, A_int_1())() == 4); + A_int_1* ap = &a; + assert(std::bind(&A_int_1::mem2, _1)(ap) == 4); + assert(std::bind(&A_int_1::mem2, ap)() == 4); + } + // member data pointer + { + A_int_1 a; + assert(std::bind(&A_int_1::data_, _1)(a) == 5); + assert(std::bind(&A_int_1::data_, a)() == 5); + A_int_1* ap = &a; + assert(std::bind(&A_int_1::data_, _1)(a) == 5); + std::bind(&A_int_1::data_, _1)(a) = 6; + assert(std::bind(&A_int_1::data_, _1)(a) == 6); + assert(std::bind(&A_int_1::data_, _1)(ap) == 6); + std::bind(&A_int_1::data_, _1)(ap) = 7; + assert(std::bind(&A_int_1::data_, _1)(ap) == 7); + } +} + +// 2 arg, return void + +void f_void_2(int i, int j) +{ + count += i+j; +} + +struct A_void_2 +{ + void operator()(int i, int j) + { + count += i+j; + } + + void mem1(int i) {count += i;} + void mem2(int i) const {count += i;} +}; + +void +test_void_2() +{ + using namespace std::placeholders; + int save_count = count; + // function + { + int i = 2; + int j = 3; + std::bind(f_void_2, _1, _2)(i, j); + assert(count == save_count+5); + save_count = count; + std::bind(f_void_2, i, _1)(j); + assert(count == save_count+5); + save_count = count; + std::bind(f_void_2, i, j)(); + assert(count == save_count+5); + save_count = count; + } + // member function pointer + { + int j = 3; + std::bind(&A_void_2::mem1, _1, _2)(A_void_2(), j); + assert(count == save_count+3); + save_count = count; + std::bind(&A_void_2::mem1, _2, _1)(j, A_void_2()); + assert(count == save_count+3); + save_count = count; + } +} + +int main() +{ + test_void_1(); + test_int_1(); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp index 508caee69..365b38e87 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_rvalue.pass.cpp @@ -1 +1,248 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified bind(Fn, Types...); // template // unspecified bind(Fn, Types...); #include #include #include int count = 0; // 1 arg, return void void f_void_1(int i) { count += i; } struct A_void_1 { void operator()(int i) { count += i; } void mem1() {++count;} void mem2() const {count += 2;} }; void test_void_1() { using namespace std::placeholders; int save_count = count; // function { std::bind(f_void_1, _1)(2); assert(count == save_count + 2); save_count = count; } { std::bind(f_void_1, 2)(); assert(count == save_count + 2); save_count = count; } // function pointer { void (*fp)(int) = f_void_1; std::bind(fp, _1)(3); assert(count == save_count+3); save_count = count; } { void (*fp)(int) = f_void_1; std::bind(fp, 3)(); assert(count == save_count+3); save_count = count; } // functor { A_void_1 a0; std::bind(a0, _1)(4); assert(count == save_count+4); save_count = count; } { A_void_1 a0; std::bind(a0, 4)(); assert(count == save_count+4); save_count = count; } // member function pointer { void (A_void_1::*fp)() = &A_void_1::mem1; std::bind(fp, _1)(A_void_1()); assert(count == save_count+1); save_count = count; A_void_1 a; std::bind(fp, _1)(&a); assert(count == save_count+1); save_count = count; } { void (A_void_1::*fp)() = &A_void_1::mem1; std::bind(fp, A_void_1())(); assert(count == save_count+1); save_count = count; A_void_1 a; std::bind(fp, &a)(); assert(count == save_count+1); save_count = count; } // const member function pointer { void (A_void_1::*fp)() const = &A_void_1::mem2; std::bind(fp, _1)(A_void_1()); assert(count == save_count+2); save_count = count; A_void_1 a; std::bind(fp, _1)(&a); assert(count == save_count+2); save_count = count; } { void (A_void_1::*fp)() const = &A_void_1::mem2; std::bind(fp, A_void_1())(); assert(count == save_count+2); save_count = count; A_void_1 a; std::bind(fp, &a)(); assert(count == save_count+2); save_count = count; } } // 1 arg, return int int f_int_1(int i) { return i + 1; } struct A_int_1 { A_int_1() : data_(5) {} int operator()(int i) { return i - 1; } int mem1() {return 3;} int mem2() const {return 4;} int data_; }; void test_int_1() { using namespace std::placeholders; // function { assert(std::bind(f_int_1, _1)(2) == 3); assert(std::bind(f_int_1, 2)() == 3); } // function pointer { int (*fp)(int) = f_int_1; assert(std::bind(fp, _1)(3) == 4); assert(std::bind(fp, 3)() == 4); } // functor { assert(std::bind(A_int_1(), _1)(4) == 3); assert(std::bind(A_int_1(), 4)() == 3); } // member function pointer { assert(std::bind(&A_int_1::mem1, _1)(A_int_1()) == 3); assert(std::bind(&A_int_1::mem1, A_int_1())() == 3); A_int_1 a; assert(std::bind(&A_int_1::mem1, _1)(&a) == 3); assert(std::bind(&A_int_1::mem1, &a)() == 3); } // const member function pointer { assert(std::bind(&A_int_1::mem2, _1)(A_int_1()) == 4); assert(std::bind(&A_int_1::mem2, A_int_1())() == 4); A_int_1 a; assert(std::bind(&A_int_1::mem2, _1)(&a) == 4); assert(std::bind(&A_int_1::mem2, &a)() == 4); } // member data pointer { assert(std::bind(&A_int_1::data_, _1)(A_int_1()) == 5); assert(std::bind(&A_int_1::data_, A_int_1())() == 5); A_int_1 a; assert(std::bind(&A_int_1::data_, _1)(a) == 5); std::bind(&A_int_1::data_, _1)(a) = 6; assert(std::bind(&A_int_1::data_, _1)(a) == 6); assert(std::bind(&A_int_1::data_, _1)(&a) == 6); std::bind(&A_int_1::data_, _1)(&a) = 7; assert(std::bind(&A_int_1::data_, _1)(&a) == 7); } } // 2 arg, return void void f_void_2(int i, int j) { count += i+j; } struct A_void_2 { void operator()(int i, int j) { count += i+j; } void mem1(int i) {count += i;} void mem2(int i) const {count += i;} }; void test_void_2() { using namespace std::placeholders; int save_count = count; // function { std::bind(f_void_2, _1, _2)(2, 3); assert(count == save_count+5); save_count = count; std::bind(f_void_2, 2, _1)(3); assert(count == save_count+5); save_count = count; std::bind(f_void_2, 2, 3)(); assert(count == save_count+5); save_count = count; } // member function pointer { std::bind(&A_void_2::mem1, _1, _2)(A_void_2(), 3); assert(count == save_count+3); save_count = count; std::bind(&A_void_2::mem1, _2, _1)(3, A_void_2()); assert(count == save_count+3); save_count = count; } } int main() { test_void_1(); test_int_1(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified bind(Fn, Types...); +// template +// unspecified bind(Fn, Types...); + +#include + +#include +#include + +int count = 0; + +// 1 arg, return void + +void f_void_1(int i) +{ + count += i; +} + +struct A_void_1 +{ + void operator()(int i) + { + count += i; + } + + void mem1() {++count;} + void mem2() const {count += 2;} +}; + +void +test_void_1() +{ + using namespace std::placeholders; + int save_count = count; + // function + { + std::bind(f_void_1, _1)(2); + assert(count == save_count + 2); + save_count = count; + } + { + std::bind(f_void_1, 2)(); + assert(count == save_count + 2); + save_count = count; + } + // function pointer + { + void (*fp)(int) = f_void_1; + std::bind(fp, _1)(3); + assert(count == save_count+3); + save_count = count; + } + { + void (*fp)(int) = f_void_1; + std::bind(fp, 3)(); + assert(count == save_count+3); + save_count = count; + } + // functor + { + A_void_1 a0; + std::bind(a0, _1)(4); + assert(count == save_count+4); + save_count = count; + } + { + A_void_1 a0; + std::bind(a0, 4)(); + assert(count == save_count+4); + save_count = count; + } + // member function pointer + { + void (A_void_1::*fp)() = &A_void_1::mem1; + std::bind(fp, _1)(A_void_1()); + assert(count == save_count+1); + save_count = count; + A_void_1 a; + std::bind(fp, _1)(&a); + assert(count == save_count+1); + save_count = count; + } + { + void (A_void_1::*fp)() = &A_void_1::mem1; + std::bind(fp, A_void_1())(); + assert(count == save_count+1); + save_count = count; + A_void_1 a; + std::bind(fp, &a)(); + assert(count == save_count+1); + save_count = count; + } + // const member function pointer + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + std::bind(fp, _1)(A_void_1()); + assert(count == save_count+2); + save_count = count; + A_void_1 a; + std::bind(fp, _1)(&a); + assert(count == save_count+2); + save_count = count; + } + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + std::bind(fp, A_void_1())(); + assert(count == save_count+2); + save_count = count; + A_void_1 a; + std::bind(fp, &a)(); + assert(count == save_count+2); + save_count = count; + } +} + +// 1 arg, return int + +int f_int_1(int i) +{ + return i + 1; +} + +struct A_int_1 +{ + A_int_1() : data_(5) {} + int operator()(int i) + { + return i - 1; + } + + int mem1() {return 3;} + int mem2() const {return 4;} + int data_; +}; + +void +test_int_1() +{ + using namespace std::placeholders; + // function + { + assert(std::bind(f_int_1, _1)(2) == 3); + assert(std::bind(f_int_1, 2)() == 3); + } + // function pointer + { + int (*fp)(int) = f_int_1; + assert(std::bind(fp, _1)(3) == 4); + assert(std::bind(fp, 3)() == 4); + } + // functor + { + assert(std::bind(A_int_1(), _1)(4) == 3); + assert(std::bind(A_int_1(), 4)() == 3); + } + // member function pointer + { + assert(std::bind(&A_int_1::mem1, _1)(A_int_1()) == 3); + assert(std::bind(&A_int_1::mem1, A_int_1())() == 3); + A_int_1 a; + assert(std::bind(&A_int_1::mem1, _1)(&a) == 3); + assert(std::bind(&A_int_1::mem1, &a)() == 3); + } + // const member function pointer + { + assert(std::bind(&A_int_1::mem2, _1)(A_int_1()) == 4); + assert(std::bind(&A_int_1::mem2, A_int_1())() == 4); + A_int_1 a; + assert(std::bind(&A_int_1::mem2, _1)(&a) == 4); + assert(std::bind(&A_int_1::mem2, &a)() == 4); + } + // member data pointer + { + assert(std::bind(&A_int_1::data_, _1)(A_int_1()) == 5); + assert(std::bind(&A_int_1::data_, A_int_1())() == 5); + A_int_1 a; + assert(std::bind(&A_int_1::data_, _1)(a) == 5); + std::bind(&A_int_1::data_, _1)(a) = 6; + assert(std::bind(&A_int_1::data_, _1)(a) == 6); + assert(std::bind(&A_int_1::data_, _1)(&a) == 6); + std::bind(&A_int_1::data_, _1)(&a) = 7; + assert(std::bind(&A_int_1::data_, _1)(&a) == 7); + } +} + +// 2 arg, return void + +void f_void_2(int i, int j) +{ + count += i+j; +} + +struct A_void_2 +{ + void operator()(int i, int j) + { + count += i+j; + } + + void mem1(int i) {count += i;} + void mem2(int i) const {count += i;} +}; + +void +test_void_2() +{ + using namespace std::placeholders; + int save_count = count; + // function + { + std::bind(f_void_2, _1, _2)(2, 3); + assert(count == save_count+5); + save_count = count; + std::bind(f_void_2, 2, _1)(3); + assert(count == save_count+5); + save_count = count; + std::bind(f_void_2, 2, 3)(); + assert(count == save_count+5); + save_count = count; + } + // member function pointer + { + std::bind(&A_void_2::mem1, _1, _2)(A_void_2(), 3); + assert(count == save_count+3); + save_count = count; + std::bind(&A_void_2::mem1, _2, _1)(3, A_void_2()); + assert(count == save_count+3); + save_count = count; + } +} + +int main() +{ + test_void_1(); + test_int_1(); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp index d9d7e94df..f84d1bf18 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.bind/invoke_void_0.pass.cpp @@ -1 +1,59 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified bind(Fn, Types...); // template // unspecified bind(Fn, Types...); #include #include int count = 0; template void test(F f) { int save_count = count; f(); assert(count == save_count + 1); } template void test_const(const F& f) { int save_count = count; f(); assert(count == save_count + 2); } void f() {++count;} struct A_int_0 { void operator()() {++count;} void operator()() const {count += 2;} }; int main() { test(std::bind(f)); test(std::bind(&f)); test(std::bind(A_int_0())); test_const(std::bind(A_int_0())); test(std::bind(f)); test(std::bind(&f)); test(std::bind(A_int_0())); test_const(std::bind(A_int_0())); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified bind(Fn, Types...); +// template +// unspecified bind(Fn, Types...); + +#include +#include + +int count = 0; + +template +void +test(F f) +{ + int save_count = count; + f(); + assert(count == save_count + 1); +} + +template +void +test_const(const F& f) +{ + int save_count = count; + f(); + assert(count == save_count + 2); +} + +void f() {++count;} + +struct A_int_0 +{ + void operator()() {++count;} + void operator()() const {count += 2;} +}; + +int main() +{ + test(std::bind(f)); + test(std::bind(&f)); + test(std::bind(A_int_0())); + test_const(std::bind(A_int_0())); + + test(std::bind(f)); + test(std::bind(&f)); + test(std::bind(A_int_0())); + test_const(std::bind(A_int_0())); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp index 54c44a666..a572a6f61 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_bind_expression.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template struct is_bind_expression #include template void test(const T&) { static_assert(std::is_bind_expression::value == Expected, ""); } struct C {}; int main() { test(std::bind(C())); test(std::bind(C(), std::placeholders::_2)); test(std::bind(C())); test(1); test(std::placeholders::_2); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template struct is_bind_expression + +#include + +template +void +test(const T&) +{ + static_assert(std::is_bind_expression::value == Expected, ""); +} + +struct C {}; + +int main() +{ + test(std::bind(C())); + test(std::bind(C(), std::placeholders::_2)); + test(std::bind(C())); + test(1); + test(std::placeholders::_2); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp index 93fca7be2..a3f9ce5a3 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.isbind/is_placeholder.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // struct is_placeholder #include template void test(const T&) { static_assert(std::is_placeholder::value == Expected, ""); } struct C {}; int main() { test<1>(std::placeholders::_1); test<2>(std::placeholders::_2); test<3>(std::placeholders::_3); test<4>(std::placeholders::_4); test<5>(std::placeholders::_5); test<6>(std::placeholders::_6); test<7>(std::placeholders::_7); test<8>(std::placeholders::_8); test<9>(std::placeholders::_9); test<10>(std::placeholders::_10); test<0>(4); test<0>(5.5); test<0>('a'); test<0>(C()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// struct is_placeholder + +#include + +template +void +test(const T&) +{ + static_assert(std::is_placeholder::value == Expected, ""); +} + +struct C {}; + +int main() +{ + test<1>(std::placeholders::_1); + test<2>(std::placeholders::_2); + test<3>(std::placeholders::_3); + test<4>(std::placeholders::_4); + test<5>(std::placeholders::_5); + test<6>(std::placeholders::_6); + test<7>(std::placeholders::_7); + test<8>(std::placeholders::_8); + test<9>(std::placeholders::_9); + test<10>(std::placeholders::_10); + test<0>(4); + test<0>(5.5); + test<0>('a'); + test<0>(C()); +} diff --git a/test/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp b/test/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp index 0414f62c8..182d613f0 100644 --- a/test/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/func.bind.place/placeholders.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // placeholders #include template void test(const T& t) { T t2; T t3 = t; } int main() { test(std::placeholders::_1); test(std::placeholders::_2); test(std::placeholders::_3); test(std::placeholders::_4); test(std::placeholders::_5); test(std::placeholders::_6); test(std::placeholders::_7); test(std::placeholders::_8); test(std::placeholders::_9); test(std::placeholders::_10); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// placeholders + +#include + +template +void +test(const T& t) +{ + T t2; + T t3 = t; +} + +int main() +{ + test(std::placeholders::_1); + test(std::placeholders::_2); + test(std::placeholders::_3); + test(std::placeholders::_4); + test(std::placeholders::_5); + test(std::placeholders::_6); + test(std::placeholders::_7); + test(std::placeholders::_8); + test(std::placeholders::_9); + test(std::placeholders::_10); +} diff --git a/test/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp b/test/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp +++ b/test/utilities/function.objects/bind/func.bind/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/function.objects/bind/nothing_to_do.pass.cpp b/test/utilities/function.objects/bind/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/function.objects/bind/nothing_to_do.pass.cpp +++ b/test/utilities/function.objects/bind/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/function.objects/bitwise.operations/bit_and.pass.cpp b/test/utilities/function.objects/bitwise.operations/bit_and.pass.cpp index b334dac7f..95b19b8ce 100644 --- a/test/utilities/function.objects/bitwise.operations/bit_and.pass.cpp +++ b/test/utilities/function.objects/bitwise.operations/bit_and.pass.cpp @@ -1 +1,28 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // bit_and #include #include #include int main() { typedef std::bit_and F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(0xEA95, 0xEA95) == 0xEA95); assert(f(0xEA95, 0x58D3) == 0x4891); assert(f(0x58D3, 0xEA95) == 0x4891); assert(f(0x58D3, 0) == 0); assert(f(0xFFFF, 0x58D3) == 0x58D3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// bit_and + +#include +#include +#include + +int main() +{ + typedef std::bit_and F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(0xEA95, 0xEA95) == 0xEA95); + assert(f(0xEA95, 0x58D3) == 0x4891); + assert(f(0x58D3, 0xEA95) == 0x4891); + assert(f(0x58D3, 0) == 0); + assert(f(0xFFFF, 0x58D3) == 0x58D3); +} diff --git a/test/utilities/function.objects/bitwise.operations/bit_or.pass.cpp b/test/utilities/function.objects/bitwise.operations/bit_or.pass.cpp index 227863b48..70a2aa070 100644 --- a/test/utilities/function.objects/bitwise.operations/bit_or.pass.cpp +++ b/test/utilities/function.objects/bitwise.operations/bit_or.pass.cpp @@ -1 +1,28 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // bit_or #include #include #include int main() { typedef std::bit_or F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(0xEA95, 0xEA95) == 0xEA95); assert(f(0xEA95, 0x58D3) == 0xFAD7); assert(f(0x58D3, 0xEA95) == 0xFAD7); assert(f(0x58D3, 0) == 0x58D3); assert(f(0xFFFF, 0x58D3) == 0xFFFF); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// bit_or + +#include +#include +#include + +int main() +{ + typedef std::bit_or F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(0xEA95, 0xEA95) == 0xEA95); + assert(f(0xEA95, 0x58D3) == 0xFAD7); + assert(f(0x58D3, 0xEA95) == 0xFAD7); + assert(f(0x58D3, 0) == 0x58D3); + assert(f(0xFFFF, 0x58D3) == 0xFFFF); +} diff --git a/test/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp b/test/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp index 657498f69..205cca0eb 100644 --- a/test/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp +++ b/test/utilities/function.objects/bitwise.operations/bit_xor.pass.cpp @@ -1 +1,28 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // bit_xor #include #include #include int main() { typedef std::bit_xor F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(0xEA95, 0xEA95) == 0); assert(f(0xEA95, 0x58D3) == 0xB246); assert(f(0x58D3, 0xEA95) == 0xB246); assert(f(0x58D3, 0) == 0x58D3); assert(f(0xFFFF, 0x58D3) == 0xA72C); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// bit_xor + +#include +#include +#include + +int main() +{ + typedef std::bit_xor F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(0xEA95, 0xEA95) == 0); + assert(f(0xEA95, 0x58D3) == 0xB246); + assert(f(0x58D3, 0xEA95) == 0xB246); + assert(f(0x58D3, 0) == 0x58D3); + assert(f(0xFFFF, 0x58D3) == 0xA72C); +} diff --git a/test/utilities/function.objects/comparisons/equal_to.pass.cpp b/test/utilities/function.objects/comparisons/equal_to.pass.cpp index 282d41021..fb856863c 100644 --- a/test/utilities/function.objects/comparisons/equal_to.pass.cpp +++ b/test/utilities/function.objects/comparisons/equal_to.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // equal_to #include #include #include int main() { typedef std::equal_to F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 36)); assert(!f(36, 6)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// equal_to + +#include +#include +#include + +int main() +{ + typedef std::equal_to F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 36)); + assert(!f(36, 6)); +} diff --git a/test/utilities/function.objects/comparisons/greater.pass.cpp b/test/utilities/function.objects/comparisons/greater.pass.cpp index 4595c9742..4642b27e8 100644 --- a/test/utilities/function.objects/comparisons/greater.pass.cpp +++ b/test/utilities/function.objects/comparisons/greater.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // greater #include #include #include int main() { typedef std::greater F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(!f(36, 36)); assert(f(36, 6)); assert(!f(6, 36)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// greater + +#include +#include +#include + +int main() +{ + typedef std::greater F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(!f(36, 36)); + assert(f(36, 6)); + assert(!f(6, 36)); +} diff --git a/test/utilities/function.objects/comparisons/greater_equal.pass.cpp b/test/utilities/function.objects/comparisons/greater_equal.pass.cpp index 52089e079..76d56bbc9 100644 --- a/test/utilities/function.objects/comparisons/greater_equal.pass.cpp +++ b/test/utilities/function.objects/comparisons/greater_equal.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // greater_equal #include #include #include int main() { typedef std::greater_equal F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 36)); assert(f(36, 6)); assert(!f(6, 36)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// greater_equal + +#include +#include +#include + +int main() +{ + typedef std::greater_equal F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 36)); + assert(f(36, 6)); + assert(!f(6, 36)); +} diff --git a/test/utilities/function.objects/comparisons/less.pass.cpp b/test/utilities/function.objects/comparisons/less.pass.cpp index 178378a4f..b0ca99619 100644 --- a/test/utilities/function.objects/comparisons/less.pass.cpp +++ b/test/utilities/function.objects/comparisons/less.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // less #include #include #include int main() { typedef std::less F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(!f(36, 36)); assert(!f(36, 6)); assert(f(6, 36)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// less + +#include +#include +#include + +int main() +{ + typedef std::less F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(!f(36, 36)); + assert(!f(36, 6)); + assert(f(6, 36)); +} diff --git a/test/utilities/function.objects/comparisons/less_equal.pass.cpp b/test/utilities/function.objects/comparisons/less_equal.pass.cpp index 9df852816..d40839c51 100644 --- a/test/utilities/function.objects/comparisons/less_equal.pass.cpp +++ b/test/utilities/function.objects/comparisons/less_equal.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // less_equal #include #include #include int main() { typedef std::less_equal F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 36)); assert(!f(36, 6)); assert(f(6, 36)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// less_equal + +#include +#include +#include + +int main() +{ + typedef std::less_equal F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 36)); + assert(!f(36, 6)); + assert(f(6, 36)); +} diff --git a/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp b/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp index d3793340c..3b1a0d507 100644 --- a/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp +++ b/test/utilities/function.objects/comparisons/not_equal_to.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // not_equal_to #include #include #include int main() { typedef std::not_equal_to F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(!f(36, 36)); assert(f(36, 6)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// not_equal_to + +#include +#include +#include + +int main() +{ + typedef std::not_equal_to F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(!f(36, 36)); + assert(f(36, 6)); +} diff --git a/test/utilities/function.objects/func.def/nothing_to_do.pass.cpp b/test/utilities/function.objects/func.def/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/function.objects/func.def/nothing_to_do.pass.cpp +++ b/test/utilities/function.objects/func.def/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/function.objects/func.memfn/member_data.fail.cpp b/test/utilities/function.objects/func.memfn/member_data.fail.cpp index 4a284d251..2f893e6aa 100644 --- a/test/utilities/function.objects/func.memfn/member_data.fail.cpp +++ b/test/utilities/function.objects/func.memfn/member_data.fail.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template unspecified mem_fn(R T::* pm); #include #include struct A { double data_; }; template void test(F f) { { A a; f(a) = 5; assert(a.data_ == 5); A* ap = &a; f(ap) = 6; assert(a.data_ == 6); const A* cap = ap; assert(f(cap) == f(ap)); f(cap) = 7; } } int main() { test(std::mem_fn(&A::data_)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template unspecified mem_fn(R T::* pm); + +#include +#include + +struct A +{ + double data_; +}; + +template +void +test(F f) +{ + { + A a; + f(a) = 5; + assert(a.data_ == 5); + A* ap = &a; + f(ap) = 6; + assert(a.data_ == 6); + const A* cap = ap; + assert(f(cap) == f(ap)); + f(cap) = 7; + } +} + +int main() +{ + test(std::mem_fn(&A::data_)); +} diff --git a/test/utilities/function.objects/func.memfn/member_data.pass.cpp b/test/utilities/function.objects/func.memfn/member_data.pass.cpp index 54cf2d3df..906088ce9 100644 --- a/test/utilities/function.objects/func.memfn/member_data.pass.cpp +++ b/test/utilities/function.objects/func.memfn/member_data.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template unspecified mem_fn(R T::* pm); #include #include struct A { double data_; }; template void test(F f) { { A a; f(a) = 5; assert(a.data_ == 5); A* ap = &a; f(ap) = 6; assert(a.data_ == 6); const A* cap = ap; assert(f(cap) == f(ap)); } } int main() { test(std::mem_fn(&A::data_)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template unspecified mem_fn(R T::* pm); + +#include +#include + +struct A +{ + double data_; +}; + +template +void +test(F f) +{ + { + A a; + f(a) = 5; + assert(a.data_ == 5); + A* ap = &a; + f(ap) = 6; + assert(a.data_ == 6); + const A* cap = ap; + assert(f(cap) == f(ap)); + } +} + +int main() +{ + test(std::mem_fn(&A::data_)); +} diff --git a/test/utilities/function.objects/func.memfn/member_function.pass.cpp b/test/utilities/function.objects/func.memfn/member_function.pass.cpp index 5995c618c..89016a523 100644 --- a/test/utilities/function.objects/func.memfn/member_function.pass.cpp +++ b/test/utilities/function.objects/func.memfn/member_function.pass.cpp @@ -1 +1,66 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified mem_fn(R (T::* pm)(Args...)); #include #include struct A { char test0() {return 'a';} char test1(int) {return 'b';} char test2(int, double) {return 'c';} }; template void test0(F f) { { A a; assert(f(a) == 'a'); A* ap = &a; assert(f(ap) == 'a'); } } template void test1(F f) { { A a; assert(f(a, 1) == 'b'); A* ap = &a; assert(f(ap, 2) == 'b'); } } template void test2(F f) { { A a; assert(f(a, 1, 2) == 'c'); A* ap = &a; assert(f(ap, 2, 3.5) == 'c'); } } int main() { test0(std::mem_fn(&A::test0)); test1(std::mem_fn(&A::test1)); test2(std::mem_fn(&A::test2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified mem_fn(R (T::* pm)(Args...)); + +#include +#include + +struct A +{ + char test0() {return 'a';} + char test1(int) {return 'b';} + char test2(int, double) {return 'c';} +}; + +template +void +test0(F f) +{ + { + A a; + assert(f(a) == 'a'); + A* ap = &a; + assert(f(ap) == 'a'); + } +} + +template +void +test1(F f) +{ + { + A a; + assert(f(a, 1) == 'b'); + A* ap = &a; + assert(f(ap, 2) == 'b'); + } +} + +template +void +test2(F f) +{ + { + A a; + assert(f(a, 1, 2) == 'c'); + A* ap = &a; + assert(f(ap, 2, 3.5) == 'c'); + } +} + +int main() +{ + test0(std::mem_fn(&A::test0)); + test1(std::mem_fn(&A::test1)); + test2(std::mem_fn(&A::test2)); +} diff --git a/test/utilities/function.objects/func.memfn/member_function_const.pass.cpp b/test/utilities/function.objects/func.memfn/member_function_const.pass.cpp index f927474b4..38f920474 100644 --- a/test/utilities/function.objects/func.memfn/member_function_const.pass.cpp +++ b/test/utilities/function.objects/func.memfn/member_function_const.pass.cpp @@ -1 +1,72 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified mem_fn(R (T::* pm)(Args...) const); #include #include struct A { char test0() const {return 'a';} char test1(int) const {return 'b';} char test2(int, double) const {return 'c';} }; template void test0(F f) { { A a; assert(f(a) == 'a'); A* ap = &a; assert(f(ap) == 'a'); const A* cap = &a; assert(f(cap) == 'a'); } } template void test1(F f) { { A a; assert(f(a, 1) == 'b'); A* ap = &a; assert(f(ap, 2) == 'b'); const A* cap = &a; assert(f(cap, 2) == 'b'); } } template void test2(F f) { { A a; assert(f(a, 1, 2) == 'c'); A* ap = &a; assert(f(ap, 2, 3.5) == 'c'); const A* cap = &a; assert(f(cap, 2, 3.5) == 'c'); } } int main() { test0(std::mem_fn(&A::test0)); test1(std::mem_fn(&A::test1)); test2(std::mem_fn(&A::test2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified mem_fn(R (T::* pm)(Args...) const); + +#include +#include + +struct A +{ + char test0() const {return 'a';} + char test1(int) const {return 'b';} + char test2(int, double) const {return 'c';} +}; + +template +void +test0(F f) +{ + { + A a; + assert(f(a) == 'a'); + A* ap = &a; + assert(f(ap) == 'a'); + const A* cap = &a; + assert(f(cap) == 'a'); + } +} + +template +void +test1(F f) +{ + { + A a; + assert(f(a, 1) == 'b'); + A* ap = &a; + assert(f(ap, 2) == 'b'); + const A* cap = &a; + assert(f(cap, 2) == 'b'); + } +} + +template +void +test2(F f) +{ + { + A a; + assert(f(a, 1, 2) == 'c'); + A* ap = &a; + assert(f(ap, 2, 3.5) == 'c'); + const A* cap = &a; + assert(f(cap, 2, 3.5) == 'c'); + } +} + +int main() +{ + test0(std::mem_fn(&A::test0)); + test1(std::mem_fn(&A::test1)); + test2(std::mem_fn(&A::test2)); +} diff --git a/test/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp b/test/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp index a33c13c56..beec02d9b 100644 --- a/test/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp +++ b/test/utilities/function.objects/func.memfn/member_function_const_volatile.pass.cpp @@ -1 +1,72 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified mem_fn(R (T::* pm)(Args...) const volatile); #include #include struct A { char test0() const volatile {return 'a';} char test1(int) const volatile {return 'b';} char test2(int, double) const volatile {return 'c';} }; template void test0(F f) { { A a; assert(f(a) == 'a'); A* ap = &a; assert(f(ap) == 'a'); const volatile A* cap = &a; assert(f(cap) == 'a'); } } template void test1(F f) { { A a; assert(f(a, 1) == 'b'); A* ap = &a; assert(f(ap, 2) == 'b'); const volatile A* cap = &a; assert(f(cap, 2) == 'b'); } } template void test2(F f) { { A a; assert(f(a, 1, 2) == 'c'); A* ap = &a; assert(f(ap, 2, 3.5) == 'c'); const volatile A* cap = &a; assert(f(cap, 2, 3.5) == 'c'); } } int main() { test0(std::mem_fn(&A::test0)); test1(std::mem_fn(&A::test1)); test2(std::mem_fn(&A::test2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified mem_fn(R (T::* pm)(Args...) const volatile); + +#include +#include + +struct A +{ + char test0() const volatile {return 'a';} + char test1(int) const volatile {return 'b';} + char test2(int, double) const volatile {return 'c';} +}; + +template +void +test0(F f) +{ + { + A a; + assert(f(a) == 'a'); + A* ap = &a; + assert(f(ap) == 'a'); + const volatile A* cap = &a; + assert(f(cap) == 'a'); + } +} + +template +void +test1(F f) +{ + { + A a; + assert(f(a, 1) == 'b'); + A* ap = &a; + assert(f(ap, 2) == 'b'); + const volatile A* cap = &a; + assert(f(cap, 2) == 'b'); + } +} + +template +void +test2(F f) +{ + { + A a; + assert(f(a, 1, 2) == 'c'); + A* ap = &a; + assert(f(ap, 2, 3.5) == 'c'); + const volatile A* cap = &a; + assert(f(cap, 2, 3.5) == 'c'); + } +} + +int main() +{ + test0(std::mem_fn(&A::test0)); + test1(std::mem_fn(&A::test1)); + test2(std::mem_fn(&A::test2)); +} diff --git a/test/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp b/test/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp index 3f445f5fb..80959716b 100644 --- a/test/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp +++ b/test/utilities/function.objects/func.memfn/member_function_volatile.pass.cpp @@ -1 +1,72 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // unspecified mem_fn(R (T::* pm)(Args...) volatile); #include #include struct A { char test0() volatile {return 'a';} char test1(int) volatile {return 'b';} char test2(int, double) volatile {return 'c';} }; template void test0(F f) { { A a; assert(f(a) == 'a'); A* ap = &a; assert(f(ap) == 'a'); volatile A* cap = &a; assert(f(cap) == 'a'); } } template void test1(F f) { { A a; assert(f(a, 1) == 'b'); A* ap = &a; assert(f(ap, 2) == 'b'); volatile A* cap = &a; assert(f(cap, 2) == 'b'); } } template void test2(F f) { { A a; assert(f(a, 1, 2) == 'c'); A* ap = &a; assert(f(ap, 2, 3.5) == 'c'); volatile A* cap = &a; assert(f(cap, 2, 3.5) == 'c'); } } int main() { test0(std::mem_fn(&A::test0)); test1(std::mem_fn(&A::test1)); test2(std::mem_fn(&A::test2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// unspecified mem_fn(R (T::* pm)(Args...) volatile); + +#include +#include + +struct A +{ + char test0() volatile {return 'a';} + char test1(int) volatile {return 'b';} + char test2(int, double) volatile {return 'c';} +}; + +template +void +test0(F f) +{ + { + A a; + assert(f(a) == 'a'); + A* ap = &a; + assert(f(ap) == 'a'); + volatile A* cap = &a; + assert(f(cap) == 'a'); + } +} + +template +void +test1(F f) +{ + { + A a; + assert(f(a, 1) == 'b'); + A* ap = &a; + assert(f(ap, 2) == 'b'); + volatile A* cap = &a; + assert(f(cap, 2) == 'b'); + } +} + +template +void +test2(F f) +{ + { + A a; + assert(f(a, 1, 2) == 'c'); + A* ap = &a; + assert(f(ap, 2, 3.5) == 'c'); + volatile A* cap = &a; + assert(f(cap, 2, 3.5) == 'c'); + } +} + +int main() +{ + test0(std::mem_fn(&A::test0)); + test1(std::mem_fn(&A::test1)); + test2(std::mem_fn(&A::test2)); +} diff --git a/test/utilities/function.objects/func.require/binary_function.pass.cpp b/test/utilities/function.objects/func.require/binary_function.pass.cpp index 53ac5c57f..4bf9c8336 100644 --- a/test/utilities/function.objects/func.require/binary_function.pass.cpp +++ b/test/utilities/function.objects/func.require/binary_function.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // binary_function #include #include int main() { typedef std::binary_function bf; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// binary_function + +#include +#include + +int main() +{ + typedef std::binary_function bf; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/function.objects/func.require/unary_function.pass.cpp b/test/utilities/function.objects/func.require/unary_function.pass.cpp index 5f251260e..6af07ef9a 100644 --- a/test/utilities/function.objects/func.require/unary_function.pass.cpp +++ b/test/utilities/function.objects/func.require/unary_function.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unary_function #include #include int main() { typedef std::unary_function uf; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unary_function + +#include +#include + +int main() +{ + typedef std::unary_function uf; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp index b39198f8d..121235fcf 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.badcall/bad_function_call.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // Class bad_function_call // class bad_function_call // : public exception // { // public: // // 20.7.16.1.1, constructor: // bad_function_call(); // }; #include #include int main() { static_assert((std::is_base_of::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// Class bad_function_call + +// class bad_function_call +// : public exception +// { +// public: +// // 20.7.16.1.1, constructor: +// bad_function_call(); +// }; + +#include +#include + +int main() +{ + static_assert((std::is_base_of::value), ""); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp index d9fb5fd1d..31ccdba09 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.badcall/func.wrap.badcall.const/bad_function_call_ctor.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // Class bad_function_call // bad_function_call(); #include #include int main() { std::bad_function_call ex; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// Class bad_function_call + +// bad_function_call(); + +#include +#include + +int main() +{ + std::bad_function_call ex; +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp index 12f95a720..d3e50f2d1 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.alg/swap.pass.cpp @@ -1 +1,135 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // template // void swap(function&, function&); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; explicit A(int j) { ++count; data_[0] = j; } A(const A& a) { ++count; for (int i = 0; i < 10; ++i) data_[i] = a.data_[i]; } ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int id() const {return data_[0];} }; int A::count = 0; int g(int) {return 0;} int h(int) {return 1;} int main() { assert(new_called == 0); { std::function f1 = A(1); std::function f2 = A(2); assert(A::count == 2); assert(new_called == 2); assert(f1.target()->id() == 1); assert(f2.target()->id() == 2); swap(f1, f2); assert(A::count == 2); assert(new_called == 2); assert(f1.target()->id() == 2); assert(f2.target()->id() == 1); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = A(1); std::function f2 = g; assert(A::count == 1); assert(new_called == 1); assert(f1.target()->id() == 1); assert(*f2.target() == g); swap(f1, f2); assert(A::count == 1); assert(new_called == 1); assert(*f1.target() == g); assert(f2.target()->id() == 1); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = g; std::function f2 = A(1); assert(A::count == 1); assert(new_called == 1); assert(*f1.target() == g); assert(f2.target()->id() == 1); swap(f1, f2); assert(A::count == 1); assert(new_called == 1); assert(f1.target()->id() == 1); assert(*f2.target() == g); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = g; std::function f2 = h; assert(A::count == 0); assert(new_called == 0); assert(*f1.target() == g); assert(*f2.target() == h); swap(f1, f2); assert(A::count == 0); assert(new_called == 0); assert(*f1.target() == h); assert(*f2.target() == g); } assert(A::count == 0); assert(new_called == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// template +// void swap(function&, function&); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + explicit A(int j) + { + ++count; + data_[0] = j; + } + + A(const A& a) + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = a.data_[i]; + } + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int id() const {return data_[0];} +}; + +int A::count = 0; + +int g(int) {return 0;} +int h(int) {return 1;} + +int main() +{ + assert(new_called == 0); + { + std::function f1 = A(1); + std::function f2 = A(2); + assert(A::count == 2); + assert(new_called == 2); + assert(f1.target()->id() == 1); + assert(f2.target()->id() == 2); + swap(f1, f2); + assert(A::count == 2); + assert(new_called == 2); + assert(f1.target()->id() == 2); + assert(f2.target()->id() == 1); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = A(1); + std::function f2 = g; + assert(A::count == 1); + assert(new_called == 1); + assert(f1.target()->id() == 1); + assert(*f2.target() == g); + swap(f1, f2); + assert(A::count == 1); + assert(new_called == 1); + assert(*f1.target() == g); + assert(f2.target()->id() == 1); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = g; + std::function f2 = A(1); + assert(A::count == 1); + assert(new_called == 1); + assert(*f1.target() == g); + assert(f2.target()->id() == 1); + swap(f1, f2); + assert(A::count == 1); + assert(new_called == 1); + assert(f1.target()->id() == 1); + assert(*f2.target() == g); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = g; + std::function f2 = h; + assert(A::count == 0); + assert(new_called == 0); + assert(*f1.target() == g); + assert(*f2.target() == h); + swap(f1, f2); + assert(A::count == 0); + assert(new_called == 0); + assert(*f1.target() == h); + assert(*f2.target() == g); + } + assert(A::count == 0); + assert(new_called == 0); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp index 44327baed..63683c958 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.cap/operator_bool.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // explicit operator bool() const #include #include int g(int) {return 0;} int main() { { std::function f; assert(!f); f = g; assert(f); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// explicit operator bool() const + +#include +#include + +int g(int) {return 0;} + +int main() +{ + { + std::function f; + assert(!f); + f = g; + assert(f); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp index 06368fe3e..22706dc2c 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F.pass.cpp @@ -1 +1,98 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // function(nullptr_t); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int foo(int) const {return 1;} }; int A::count = 0; int g(int) {return 0;} int main() { assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); assert(new_called == 0); { std::function f = g; assert(new_called == 0); assert(f.target()); assert(f.target() == 0); } assert(new_called == 0); { std::function f = (int (*)(int))0; assert(!f); assert(new_called == 0); assert(f.target() == 0); assert(f.target() == 0); } { std::function f = &A::foo; assert(f); assert(new_called == 0); assert(f.target() != 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// function(nullptr_t); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int foo(int) const {return 1;} +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f = g; + assert(new_called == 0); + assert(f.target()); + assert(f.target() == 0); + } + assert(new_called == 0); + { + std::function f = (int (*)(int))0; + assert(!f); + assert(new_called == 0); + assert(f.target() == 0); + assert(f.target() == 0); + } + { + std::function f = &A::foo; + assert(f); + assert(new_called == 0); + assert(f.target() != 0); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp index 2d6ab4b94..2d48079c9 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/F_assign.pass.cpp @@ -1 +1,105 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // template // requires CopyConstructible && Callable // && Convertible::result_type // operator=(F f); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int foo(int) const {return 1;} }; int A::count = 0; int g(int) {return 0;} int main() { assert(new_called == 0); { std::function f; f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); assert(new_called == 0); { std::function f; f = g; assert(new_called == 0); assert(f.target()); assert(f.target() == 0); } assert(new_called == 0); { std::function f; f = (int (*)(int))0; assert(!f); assert(new_called == 0); assert(f.target() == 0); assert(f.target() == 0); } { std::function f; f = &A::foo; assert(f); assert(new_called == 0); assert(f.target() != 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// template +// requires CopyConstructible && Callable +// && Convertible::result_type +// operator=(F f); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int foo(int) const {return 1;} +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + assert(new_called == 0); + { + std::function f; + f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f; + f = g; + assert(new_called == 0); + assert(f.target()); + assert(f.target() == 0); + } + assert(new_called == 0); + { + std::function f; + f = (int (*)(int))0; + assert(!f); + assert(new_called == 0); + assert(f.target() == 0); + assert(f.target() == 0); + } + { + std::function f; + f = &A::foo; + assert(f); + assert(new_called == 0); + assert(f.target() != 0); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp index 263cd81ae..000faa7f2 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/alloc_rfunction.pass.cpp @@ -77,5 +77,5 @@ int main() assert(f.target() == 0); assert(f.target() == 0); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy.pass.cpp index d41975262..dc4b092d8 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy.pass.cpp @@ -1 +1,119 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // function(const function& f); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } }; int A::count = 0; int g(int) {return 0;} int main() { assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); std::function f2 = f; assert(A::count == 2); assert(new_called == 2); assert(f2.target()); assert(f2.target() == 0); } assert(A::count == 0); assert(new_called == 0); { std::function f = g; assert(new_called == 0); assert(f.target()); assert(f.target() == 0); std::function f2 = f; assert(new_called == 0); assert(f2.target()); assert(f2.target() == 0); } assert(new_called == 0); { std::function f; assert(new_called == 0); assert(f.target() == 0); assert(f.target() == 0); std::function f2 = f; assert(new_called == 0); assert(f2.target() == 0); assert(f2.target() == 0); } #ifdef _LIBCPP_MOVE assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); std::function f2 = _STD::move(f); assert(A::count == 1); assert(new_called == 1); assert(f2.target()); assert(f2.target() == 0); assert(f.target() == 0); assert(f.target() == 0); } #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// function(const function& f); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + std::function f2 = f; + assert(A::count == 2); + assert(new_called == 2); + assert(f2.target()); + assert(f2.target() == 0); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f = g; + assert(new_called == 0); + assert(f.target()); + assert(f.target() == 0); + std::function f2 = f; + assert(new_called == 0); + assert(f2.target()); + assert(f2.target() == 0); + } + assert(new_called == 0); + { + std::function f; + assert(new_called == 0); + assert(f.target() == 0); + assert(f.target() == 0); + std::function f2 = f; + assert(new_called == 0); + assert(f2.target() == 0); + assert(f2.target() == 0); + } +#ifdef _LIBCPP_MOVE + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + std::function f2 = _STD::move(f); + assert(A::count == 1); + assert(new_called == 1); + assert(f2.target()); + assert(f2.target() == 0); + assert(f.target() == 0); + assert(f.target() == 0); + } +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp index 2dc88a93c..1202914c3 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/copy_assign.pass.cpp @@ -1 +1,123 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // function& operator=(const function& f); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } }; int A::count = 0; int g(int) {return 0;} int main() { assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); std::function f2; f2 = f; assert(A::count == 2); assert(new_called == 2); assert(f2.target()); assert(f2.target() == 0); } assert(A::count == 0); assert(new_called == 0); { std::function f = g; assert(new_called == 0); assert(f.target()); assert(f.target() == 0); std::function f2; f2 = f; assert(new_called == 0); assert(f2.target()); assert(f2.target() == 0); } assert(new_called == 0); { std::function f; assert(new_called == 0); assert(f.target() == 0); assert(f.target() == 0); std::function f2; f2 = f; assert(new_called == 0); assert(f2.target() == 0); assert(f2.target() == 0); } #ifdef _LIBCPP_MOVE assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); assert(f.target() == 0); std::function f2; f2 = _STD::move(f); assert(A::count == 1); assert(new_called == 1); assert(f2.target()); assert(f2.target() == 0); assert(f.target() == 0); assert(f.target() == 0); } #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// function& operator=(const function& f); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + std::function f2; + f2 = f; + assert(A::count == 2); + assert(new_called == 2); + assert(f2.target()); + assert(f2.target() == 0); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f = g; + assert(new_called == 0); + assert(f.target()); + assert(f.target() == 0); + std::function f2; + f2 = f; + assert(new_called == 0); + assert(f2.target()); + assert(f2.target() == 0); + } + assert(new_called == 0); + { + std::function f; + assert(new_called == 0); + assert(f.target() == 0); + assert(f.target() == 0); + std::function f2; + f2 = f; + assert(new_called == 0); + assert(f2.target() == 0); + assert(f2.target() == 0); + } +#ifdef _LIBCPP_MOVE + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + assert(f.target() == 0); + std::function f2; + f2 = _STD::move(f); + assert(A::count == 1); + assert(new_called == 1); + assert(f2.target()); + assert(f2.target() == 0); + assert(f.target() == 0); + assert(f.target() == 0); + } +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp index 98e11620c..3a1cd6675 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/default.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // explicit function(); #include #include int main() { std::function f; assert(!f); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// explicit function(); + +#include +#include + +int main() +{ + std::function f; + assert(!f); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp index e812070ff..824e62c2e 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // function(nullptr_t); #include #include int main() { std::function f(nullptr); assert(!f); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// function(nullptr_t); + +#include +#include + +int main() +{ + std::function f(nullptr); + assert(!f); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp index aa00a04f1..5d64fa4fc 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.con/nullptr_t_assign.pass.cpp @@ -1 +1,86 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // function& operator=(nullptr_t); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } }; int A::count = 0; int g(int) {return 0;} int main() { assert(new_called == 0); { std::function f = A(); assert(A::count == 1); assert(new_called == 1); assert(f.target()); f = nullptr; assert(A::count == 0); assert(new_called == 0); assert(f.target() == 0); } { std::function f = g; assert(new_called == 0); assert(f.target()); assert(f.target() == 0); f = nullptr; assert(new_called == 0); assert(f.target() == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// function& operator=(nullptr_t); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + assert(new_called == 0); + { + std::function f = A(); + assert(A::count == 1); + assert(new_called == 1); + assert(f.target()); + f = nullptr; + assert(A::count == 0); + assert(new_called == 0); + assert(f.target() == 0); + } + { + std::function f = g; + assert(new_called == 0); + assert(f.target()); + assert(f.target() == 0); + f = nullptr; + assert(new_called == 0); + assert(f.target() == 0); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp index 9df88e8c1..a7d16e938 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.fail.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // R operator()(ArgTypes... args) const #include #include // member data pointer: cv qualifiers should transfer from argument to return type struct A_int_1 { A_int_1() : data_(5) {} int data_; }; void test_int_1() { // member data pointer { int A_int_1::*fp = &A_int_1::data_; A_int_1 a; std::function r2(fp); const A_int_1* ap = &a; assert(r2(ap) == 6); r2(ap) = 7; assert(r2(ap) == 7); } } int main() { test_int_1(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// R operator()(ArgTypes... args) const + +#include +#include + +// member data pointer: cv qualifiers should transfer from argument to return type + +struct A_int_1 +{ + A_int_1() : data_(5) {} + + int data_; +}; + +void +test_int_1() +{ + // member data pointer + { + int A_int_1::*fp = &A_int_1::data_; + A_int_1 a; + std::function r2(fp); + const A_int_1* ap = &a; + assert(r2(ap) == 6); + r2(ap) = 7; + assert(r2(ap) == 7); + } +} + +int main() +{ + test_int_1(); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp index f95f082cf..ab3d600b5 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke.pass.cpp @@ -1 +1,335 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // R operator()(ArgTypes... args) const #include #include int count = 0; // 1 arg, return void void f_void_1(int i) { count += i; } struct A_void_1 { void operator()(int i) { count += i; } void mem1() {++count;} void mem2() const {++count;} }; void test_void_1() { int save_count = count; // function { std::function r1(f_void_1); int i = 2; r1(i); assert(count == save_count+2); save_count = count; } // function pointer { void (*fp)(int) = f_void_1; std::function r1(fp); int i = 3; r1(i); assert(count == save_count+3); save_count = count; } // functor { A_void_1 a0; std::function r1(a0); int i = 4; r1(i); assert(count == save_count+4); save_count = count; } // member function pointer { void (A_void_1::*fp)() = &A_void_1::mem1; std::function r1(fp); A_void_1 a; r1(a); assert(count == save_count+1); save_count = count; A_void_1* ap = &a; std::function r2 = fp; r2(ap); assert(count == save_count+1); save_count = count; } // const member function pointer { void (A_void_1::*fp)() const = &A_void_1::mem2; std::function r1(fp); A_void_1 a; r1(a); assert(count == save_count+1); save_count = count; std::function r2(fp); A_void_1* ap = &a; r2(ap); assert(count == save_count+1); save_count = count; } } // 1 arg, return int int f_int_1(int i) { return i + 1; } struct A_int_1 { A_int_1() : data_(5) {} int operator()(int i) { return i - 1; } int mem1() {return 3;} int mem2() const {return 4;} int data_; }; void test_int_1() { // function { std::function r1(f_int_1); int i = 2; assert(r1(i) == 3); } // function pointer { int (*fp)(int) = f_int_1; std::function r1(fp); int i = 3; assert(r1(i) == 4); } // functor { A_int_1 a0; std::function r1(a0); int i = 4; assert(r1(i) == 3); } // member function pointer { int (A_int_1::*fp)() = &A_int_1::mem1; std::function r1(fp); A_int_1 a; assert(r1(a) == 3); std::function r2(fp); A_int_1* ap = &a; assert(r2(ap) == 3); } // const member function pointer { int (A_int_1::*fp)() const = &A_int_1::mem2; std::function r1(fp); A_int_1 a; assert(r1(a) == 4); std::function r2(fp); A_int_1* ap = &a; assert(r2(ap) == 4); } // member data pointer { int A_int_1::*fp = &A_int_1::data_; std::function r1(fp); A_int_1 a; assert(r1(a) == 5); r1(a) = 6; assert(r1(a) == 6); std::function r2(fp); A_int_1* ap = &a; assert(r2(ap) == 6); r2(ap) = 7; assert(r2(ap) == 7); } } // 2 arg, return void void f_void_2(int i, int j) { count += i+j; } struct A_void_2 { void operator()(int i, int j) { count += i+j; } void mem1(int i) {count += i;} void mem2(int i) const {count += i;} }; void test_void_2() { int save_count = count; // function { std::function r1(f_void_2); int i = 2; int j = 3; r1(i, j); assert(count == save_count+5); save_count = count; } // function pointer { void (*fp)(int, int) = f_void_2; std::function r1(fp); int i = 3; int j = 4; r1(i, j); assert(count == save_count+7); save_count = count; } // functor { A_void_2 a0; std::function r1(a0); int i = 4; int j = 5; r1(i, j); assert(count == save_count+9); save_count = count; } // member function pointer { void (A_void_2::*fp)(int) = &A_void_2::mem1; std::function r1(fp); A_void_2 a; int i = 3; r1(a, i); assert(count == save_count+3); save_count = count; std::function r2(fp); A_void_2* ap = &a; r2(ap, i); assert(count == save_count+3); save_count = count; } // const member function pointer { void (A_void_2::*fp)(int) const = &A_void_2::mem2; std::function r1(fp); A_void_2 a; int i = 4; r1(a, i); assert(count == save_count+4); save_count = count; std::function r2(fp); A_void_2* ap = &a; r2(ap, i); assert(count == save_count+4); save_count = count; } } // 2 arg, return int int f_int_2(int i, int j) { return i+j; } struct A_int_2 { int operator()(int i, int j) { return i+j; } int mem1(int i) {return i+1;} int mem2(int i) const {return i+2;} }; void testint_2() { // function { std::function r1(f_int_2); int i = 2; int j = 3; assert(r1(i, j) == i+j); } // function pointer { int (*fp)(int, int) = f_int_2; std::function r1(fp); int i = 3; int j = 4; assert(r1(i, j) == i+j); } // functor { A_int_2 a0; std::function r1(a0); int i = 4; int j = 5; assert(r1(i, j) == i+j); } // member function pointer { int(A_int_2::*fp)(int) = &A_int_2::mem1; std::function r1(fp); A_int_2 a; int i = 3; assert(r1(a, i) == i+1); std::function r2(fp); A_int_2* ap = &a; assert(r2(ap, i) == i+1); } // const member function pointer { int (A_int_2::*fp)(int) const = &A_int_2::mem2; std::function r1(fp); A_int_2 a; int i = 4; assert(r1(a, i) == i+2); std::function r2(fp); A_int_2* ap = &a; assert(r2(ap, i) == i+2); } } int main() { test_void_1(); test_int_1(); test_void_2(); testint_2(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// R operator()(ArgTypes... args) const + +#include +#include + +int count = 0; + +// 1 arg, return void + +void f_void_1(int i) +{ + count += i; +} + +struct A_void_1 +{ + void operator()(int i) + { + count += i; + } + + void mem1() {++count;} + void mem2() const {++count;} +}; + +void +test_void_1() +{ + int save_count = count; + // function + { + std::function r1(f_void_1); + int i = 2; + r1(i); + assert(count == save_count+2); + save_count = count; + } + // function pointer + { + void (*fp)(int) = f_void_1; + std::function r1(fp); + int i = 3; + r1(i); + assert(count == save_count+3); + save_count = count; + } + // functor + { + A_void_1 a0; + std::function r1(a0); + int i = 4; + r1(i); + assert(count == save_count+4); + save_count = count; + } + // member function pointer + { + void (A_void_1::*fp)() = &A_void_1::mem1; + std::function r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + std::function r2 = fp; + r2(ap); + assert(count == save_count+1); + save_count = count; + } + // const member function pointer + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + std::function r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + std::function r2(fp); + A_void_1* ap = &a; + r2(ap); + assert(count == save_count+1); + save_count = count; + } +} + +// 1 arg, return int + +int f_int_1(int i) +{ + return i + 1; +} + +struct A_int_1 +{ + A_int_1() : data_(5) {} + int operator()(int i) + { + return i - 1; + } + + int mem1() {return 3;} + int mem2() const {return 4;} + int data_; +}; + +void +test_int_1() +{ + // function + { + std::function r1(f_int_1); + int i = 2; + assert(r1(i) == 3); + } + // function pointer + { + int (*fp)(int) = f_int_1; + std::function r1(fp); + int i = 3; + assert(r1(i) == 4); + } + // functor + { + A_int_1 a0; + std::function r1(a0); + int i = 4; + assert(r1(i) == 3); + } + // member function pointer + { + int (A_int_1::*fp)() = &A_int_1::mem1; + std::function r1(fp); + A_int_1 a; + assert(r1(a) == 3); + std::function r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 3); + } + // const member function pointer + { + int (A_int_1::*fp)() const = &A_int_1::mem2; + std::function r1(fp); + A_int_1 a; + assert(r1(a) == 4); + std::function r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 4); + } + // member data pointer + { + int A_int_1::*fp = &A_int_1::data_; + std::function r1(fp); + A_int_1 a; + assert(r1(a) == 5); + r1(a) = 6; + assert(r1(a) == 6); + std::function r2(fp); + A_int_1* ap = &a; + assert(r2(ap) == 6); + r2(ap) = 7; + assert(r2(ap) == 7); + } +} + +// 2 arg, return void + +void f_void_2(int i, int j) +{ + count += i+j; +} + +struct A_void_2 +{ + void operator()(int i, int j) + { + count += i+j; + } + + void mem1(int i) {count += i;} + void mem2(int i) const {count += i;} +}; + +void +test_void_2() +{ + int save_count = count; + // function + { + std::function r1(f_void_2); + int i = 2; + int j = 3; + r1(i, j); + assert(count == save_count+5); + save_count = count; + } + // function pointer + { + void (*fp)(int, int) = f_void_2; + std::function r1(fp); + int i = 3; + int j = 4; + r1(i, j); + assert(count == save_count+7); + save_count = count; + } + // functor + { + A_void_2 a0; + std::function r1(a0); + int i = 4; + int j = 5; + r1(i, j); + assert(count == save_count+9); + save_count = count; + } + // member function pointer + { + void (A_void_2::*fp)(int) = &A_void_2::mem1; + std::function r1(fp); + A_void_2 a; + int i = 3; + r1(a, i); + assert(count == save_count+3); + save_count = count; + std::function r2(fp); + A_void_2* ap = &a; + r2(ap, i); + assert(count == save_count+3); + save_count = count; + } + // const member function pointer + { + void (A_void_2::*fp)(int) const = &A_void_2::mem2; + std::function r1(fp); + A_void_2 a; + int i = 4; + r1(a, i); + assert(count == save_count+4); + save_count = count; + std::function r2(fp); + A_void_2* ap = &a; + r2(ap, i); + assert(count == save_count+4); + save_count = count; + } +} + +// 2 arg, return int + +int f_int_2(int i, int j) +{ + return i+j; +} + +struct A_int_2 +{ + int operator()(int i, int j) + { + return i+j; + } + + int mem1(int i) {return i+1;} + int mem2(int i) const {return i+2;} +}; + +void +testint_2() +{ + // function + { + std::function r1(f_int_2); + int i = 2; + int j = 3; + assert(r1(i, j) == i+j); + } + // function pointer + { + int (*fp)(int, int) = f_int_2; + std::function r1(fp); + int i = 3; + int j = 4; + assert(r1(i, j) == i+j); + } + // functor + { + A_int_2 a0; + std::function r1(a0); + int i = 4; + int j = 5; + assert(r1(i, j) == i+j); + } + // member function pointer + { + int(A_int_2::*fp)(int) = &A_int_2::mem1; + std::function r1(fp); + A_int_2 a; + int i = 3; + assert(r1(a, i) == i+1); + std::function r2(fp); + A_int_2* ap = &a; + assert(r2(ap, i) == i+1); + } + // const member function pointer + { + int (A_int_2::*fp)(int) const = &A_int_2::mem2; + std::function r1(fp); + A_int_2 a; + int i = 4; + assert(r1(a, i) == i+2); + std::function r2(fp); + A_int_2* ap = &a; + assert(r2(ap, i) == i+2); + } +} + +int main() +{ + test_void_1(); + test_int_1(); + test_void_2(); + testint_2(); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp index 1f84b3c78..aed33e309 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_int_0.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // R operator()(ArgTypes... args) const #include #include // 0 args, return int int count = 0; int f_int_0() { return 3; } struct A_int_0 { int operator()() {return 4;} }; void test_int_0() { // function { std::function r1(f_int_0); assert(r1() == 3); } // function pointer { int (*fp)() = f_int_0; std::function r1(fp); assert(r1() == 3); } // functor { A_int_0 a0; std::function r1(a0); assert(r1() == 4); } } int main() { test_int_0(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// R operator()(ArgTypes... args) const + +#include +#include + +// 0 args, return int + +int count = 0; + +int f_int_0() +{ + return 3; +} + +struct A_int_0 +{ + int operator()() {return 4;} +}; + +void +test_int_0() +{ + // function + { + std::function r1(f_int_0); + assert(r1() == 3); + } + // function pointer + { + int (*fp)() = f_int_0; + std::function r1(fp); + assert(r1() == 3); + } + // functor + { + A_int_0 a0; + std::function r1(a0); + assert(r1() == 4); + } +} + +int main() +{ + test_int_0(); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp index d9f92d398..024b4b956 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.inv/invoke_void_0.pass.cpp @@ -1 +1,67 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // R operator()(ArgTypes... args) const #include #include #include #include // 0 args, return void int count = 0; void f_void_0() { ++count; } struct A_void_0 { void operator()() {++count;} }; void test_void_0() { int save_count = count; // function { std::function r1(f_void_0); r1(); assert(count == save_count+1); save_count = count; } // function pointer { void (*fp)() = f_void_0; std::function r1(fp); r1(); assert(count == save_count+1); save_count = count; } // functor { A_void_0 a0; std::function r1(a0); r1(); assert(count == save_count+1); save_count = count; } } int main() { test_void_0(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// R operator()(ArgTypes... args) const + +#include +#include +#include +#include + +// 0 args, return void + +int count = 0; + +void f_void_0() +{ + ++count; +} + +struct A_void_0 +{ + void operator()() {++count;} +}; + +void +test_void_0() +{ + int save_count = count; + // function + { + std::function r1(f_void_0); + r1(); + assert(count == save_count+1); + save_count = count; + } + // function pointer + { + void (*fp)() = f_void_0; + std::function r1(fp); + r1(); + assert(count == save_count+1); + save_count = count; + } + // functor + { + A_void_0 a0; + std::function r1(a0); + r1(); + assert(count == save_count+1); + save_count = count; + } +} + +int main() +{ + test_void_0(); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp index 935bc839d..02e3e1f11 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.mod/swap.pass.cpp @@ -1 +1,134 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // void swap(function& other); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } class A { int data_[10]; public: static int count; explicit A(int j) { ++count; data_[0] = j; } A(const A& a) { ++count; for (int i = 0; i < 10; ++i) data_[i] = a.data_[i]; } ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int id() const {return data_[0];} }; int A::count = 0; int g(int) {return 0;} int h(int) {return 1;} int main() { assert(new_called == 0); { std::function f1 = A(1); std::function f2 = A(2); assert(A::count == 2); assert(new_called == 2); assert(f1.target()->id() == 1); assert(f2.target()->id() == 2); f1.swap(f2); assert(A::count == 2); assert(new_called == 2); assert(f1.target()->id() == 2); assert(f2.target()->id() == 1); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = A(1); std::function f2 = g; assert(A::count == 1); assert(new_called == 1); assert(f1.target()->id() == 1); assert(*f2.target() == g); f1.swap(f2); assert(A::count == 1); assert(new_called == 1); assert(*f1.target() == g); assert(f2.target()->id() == 1); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = g; std::function f2 = A(1); assert(A::count == 1); assert(new_called == 1); assert(*f1.target() == g); assert(f2.target()->id() == 1); f1.swap(f2); assert(A::count == 1); assert(new_called == 1); assert(f1.target()->id() == 1); assert(*f2.target() == g); } assert(A::count == 0); assert(new_called == 0); { std::function f1 = g; std::function f2 = h; assert(A::count == 0); assert(new_called == 0); assert(*f1.target() == g); assert(*f2.target() == h); f1.swap(f2); assert(A::count == 0); assert(new_called == 0); assert(*f1.target() == h); assert(*f2.target() == g); } assert(A::count == 0); assert(new_called == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// void swap(function& other); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +class A +{ + int data_[10]; +public: + static int count; + + explicit A(int j) + { + ++count; + data_[0] = j; + } + + A(const A& a) + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = a.data_[i]; + } + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int id() const {return data_[0];} +}; + +int A::count = 0; + +int g(int) {return 0;} +int h(int) {return 1;} + +int main() +{ + assert(new_called == 0); + { + std::function f1 = A(1); + std::function f2 = A(2); + assert(A::count == 2); + assert(new_called == 2); + assert(f1.target()->id() == 1); + assert(f2.target()->id() == 2); + f1.swap(f2); + assert(A::count == 2); + assert(new_called == 2); + assert(f1.target()->id() == 2); + assert(f2.target()->id() == 1); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = A(1); + std::function f2 = g; + assert(A::count == 1); + assert(new_called == 1); + assert(f1.target()->id() == 1); + assert(*f2.target() == g); + f1.swap(f2); + assert(A::count == 1); + assert(new_called == 1); + assert(*f1.target() == g); + assert(f2.target()->id() == 1); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = g; + std::function f2 = A(1); + assert(A::count == 1); + assert(new_called == 1); + assert(*f1.target() == g); + assert(f2.target()->id() == 1); + f1.swap(f2); + assert(A::count == 1); + assert(new_called == 1); + assert(f1.target()->id() == 1); + assert(*f2.target() == g); + } + assert(A::count == 0); + assert(new_called == 0); + { + std::function f1 = g; + std::function f2 = h; + assert(A::count == 0); + assert(new_called == 0); + assert(*f1.target() == g); + assert(*f2.target() == h); + f1.swap(f2); + assert(A::count == 0); + assert(new_called == 0); + assert(*f1.target() == h); + assert(*f2.target() == g); + } + assert(A::count == 0); + assert(new_called == 0); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp index 6ea89d4c1..91083bbe6 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.nullptr/operator_==.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // template // bool operator==(const function&, nullptr_t); // // template // bool operator==(nullptr_t, const function&); // // template // bool operator!=(const function&, nullptr_t); // // template // bool operator!=(nullptr_t, const function&); #include #include int g(int) {return 0;} int main() { { std::function f; assert(f == nullptr); assert(nullptr == f); f = g; assert(f != nullptr); assert(nullptr != f); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// template +// bool operator==(const function&, nullptr_t); +// +// template +// bool operator==(nullptr_t, const function&); +// +// template +// bool operator!=(const function&, nullptr_t); +// +// template +// bool operator!=(nullptr_t, const function&); + +#include +#include + +int g(int) {return 0;} + +int main() +{ + { + std::function f; + assert(f == nullptr); + assert(nullptr == f); + f = g; + assert(f != nullptr); + assert(nullptr != f); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp index 718aedcb2..d58131c0b 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target.pass.cpp @@ -1 +1,89 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // template // requires Callable && Convertible::result_type, R> // T* // target(); // template // requires Callable && Convertible::result_type, R> // const T* // target() const; #include #include #include #include class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int foo(int) const {return 1;} }; int A::count = 0; int g(int) {return 0;} int main() { { std::function f = A(); assert(A::count == 1); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); { std::function f = g; assert(A::count == 0); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); { const std::function f = A(); assert(A::count == 1); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); { const std::function f = g; assert(A::count == 0); assert(f.target()); assert(f.target() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// template +// requires Callable && Convertible::result_type, R> +// T* +// target(); +// template +// requires Callable && Convertible::result_type, R> +// const T* +// target() const; + +#include +#include +#include +#include + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int foo(int) const {return 1;} +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + { + std::function f = A(); + assert(A::count == 1); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); + { + std::function f = g; + assert(A::count == 0); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); + { + const std::function f = A(); + assert(A::count == 1); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); + { + const std::function f = g; + assert(A::count == 0); + assert(f.target()); + assert(f.target() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp index 36bd29fcf..c675dfcd7 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/func.wrap.func.targ/target_type.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class function // const std::type_info& target_type() const; #include #include #include class A { int data_[10]; public: static int count; A() { ++count; for (int i = 0; i < 10; ++i) data_[i] = i; } A(const A&) {++count;} ~A() {--count;} int operator()(int i) const { for (int j = 0; j < 10; ++j) i += data_[j]; return i; } int foo(int) const {return 1;} }; int A::count = 0; int g(int) {return 0;} int main() { { std::function f = A(); assert(f.target_type() == typeid(A)); } { std::function f; assert(f.target_type() == typeid(void)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class function + +// const std::type_info& target_type() const; + +#include +#include +#include + +class A +{ + int data_[10]; +public: + static int count; + + A() + { + ++count; + for (int i = 0; i < 10; ++i) + data_[i] = i; + } + + A(const A&) {++count;} + + ~A() {--count;} + + int operator()(int i) const + { + for (int j = 0; j < 10; ++j) + i += data_[j]; + return i; + } + + int foo(int) const {return 1;} +}; + +int A::count = 0; + +int g(int) {return 0;} + +int main() +{ + { + std::function f = A(); + assert(f.target_type() == typeid(A)); + } + { + std::function f; + assert(f.target_type() == typeid(void)); + } +} diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/test_allocator.h b/test/utilities/function.objects/func.wrap/func.wrap.func/test_allocator.h index 898c0900d..1c0f163d0 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/test_allocator.h +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/test_allocator.h @@ -62,7 +62,7 @@ public: #ifdef _LIBCPP_MOVE void construct(pointer p, T&& val) {::new(p) T(std::move(val));} -#endif +#endif // _LIBCPP_MOVE void destroy(pointer p) {p->~T();} friend bool operator==(const test_allocator& x, const test_allocator& y) @@ -105,8 +105,8 @@ public: #ifdef _LIBCPP_HAS_NO_ADVANCED_SFINAE std::size_t max_size() const {return UINT_MAX / sizeof(T);} -#endif +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE }; -#endif +#endif // TEST_ALLOCATOR_H diff --git a/test/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp b/test/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp index 819c8fd1b..94e07ecea 100644 --- a/test/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp +++ b/test/utilities/function.objects/func.wrap/func.wrap.func/types.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // class function // : public unary_function // iff sizeof...(ArgTypes) == 1 and // // ArgTypes contains T1 // : public binary_function // iff sizeof...(ArgTypes) == 2 and // // ArgTypes contains T1 and T2 // { // public: // typedef R result_type; // ... // }; #include #include int main() { static_assert((!std::is_base_of, std::function >::value), ""); static_assert((!std::is_base_of, std::function >::value), ""); static_assert(( std::is_same< std::function::result_type, int>::value), ""); static_assert(( std::is_base_of, std::function >::value), ""); static_assert((!std::is_base_of, std::function >::value), ""); static_assert(( std::is_same< std::function::result_type, double>::value), ""); static_assert((!std::is_base_of, std::function >::value), ""); static_assert(( std::is_base_of, std::function >::value), ""); static_assert(( std::is_same< std::function::result_type, double>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// class function +// : public unary_function // iff sizeof...(ArgTypes) == 1 and +// // ArgTypes contains T1 +// : public binary_function // iff sizeof...(ArgTypes) == 2 and +// // ArgTypes contains T1 and T2 +// { +// public: +// typedef R result_type; +// ... +// }; + +#include +#include + +int main() +{ + static_assert((!std::is_base_of, + std::function >::value), ""); + static_assert((!std::is_base_of, + std::function >::value), ""); + static_assert(( std::is_same< std::function::result_type, + int>::value), ""); + + static_assert(( std::is_base_of, + std::function >::value), ""); + static_assert((!std::is_base_of, + std::function >::value), ""); + static_assert(( std::is_same< std::function::result_type, + double>::value), ""); + + static_assert((!std::is_base_of, + std::function >::value), ""); + static_assert(( std::is_base_of, + std::function >::value), ""); + static_assert(( std::is_same< std::function::result_type, + double>::value), ""); +} diff --git a/test/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp b/test/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp +++ b/test/utilities/function.objects/func.wrap/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/function.objects/function.pointer.adaptors/pointer_to_binary_function.pass.cpp b/test/utilities/function.objects/function.pointer.adaptors/pointer_to_binary_function.pass.cpp index 0538c6ea3..d3587aa0e 100644 --- a/test/utilities/function.objects/function.pointer.adaptors/pointer_to_binary_function.pass.cpp +++ b/test/utilities/function.objects/function.pointer.adaptors/pointer_to_binary_function.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // pointer_to_binary_function #include #include #include double binary_f(int i, short j) {return i - j + .75;} int main() { typedef std::pointer_to_binary_function F; static_assert((std::is_base_of, F>::value), ""); const F f(binary_f); assert(f(36, 27) == 9.75); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// pointer_to_binary_function + +#include +#include +#include + +double binary_f(int i, short j) {return i - j + .75;} + +int main() +{ + typedef std::pointer_to_binary_function F; + static_assert((std::is_base_of, F>::value), ""); + const F f(binary_f); + assert(f(36, 27) == 9.75); +} diff --git a/test/utilities/function.objects/function.pointer.adaptors/pointer_to_unary_function.pass.cpp b/test/utilities/function.objects/function.pointer.adaptors/pointer_to_unary_function.pass.cpp index 9ff953e55..30e130102 100644 --- a/test/utilities/function.objects/function.pointer.adaptors/pointer_to_unary_function.pass.cpp +++ b/test/utilities/function.objects/function.pointer.adaptors/pointer_to_unary_function.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // pointer_to_unary_function #include #include #include double unary_f(int i) {return 0.5 - i;} int main() { typedef std::pointer_to_unary_function F; static_assert((std::is_base_of, F>::value), ""); const F f(unary_f); assert(f(36) == -35.5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// pointer_to_unary_function + +#include +#include +#include + +double unary_f(int i) {return 0.5 - i;} + +int main() +{ + typedef std::pointer_to_unary_function F; + static_assert((std::is_base_of, F>::value), ""); + const F f(unary_f); + assert(f(36) == -35.5); +} diff --git a/test/utilities/function.objects/function.pointer.adaptors/ptr_fun1.pass.cpp b/test/utilities/function.objects/function.pointer.adaptors/ptr_fun1.pass.cpp index a4f16d0a8..25162c3b5 100644 --- a/test/utilities/function.objects/function.pointer.adaptors/ptr_fun1.pass.cpp +++ b/test/utilities/function.objects/function.pointer.adaptors/ptr_fun1.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // pointer_to_unary_function // ptr_fun(Result (*f)(Arg)); #include #include #include double unary_f(int i) {return 0.5 - i;} int main() { assert(std::ptr_fun(unary_f)(36) == -35.5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// pointer_to_unary_function +// ptr_fun(Result (*f)(Arg)); + +#include +#include +#include + +double unary_f(int i) {return 0.5 - i;} + +int main() +{ + assert(std::ptr_fun(unary_f)(36) == -35.5); +} diff --git a/test/utilities/function.objects/function.pointer.adaptors/ptr_fun2.pass.cpp b/test/utilities/function.objects/function.pointer.adaptors/ptr_fun2.pass.cpp index 846223209..61525dd4d 100644 --- a/test/utilities/function.objects/function.pointer.adaptors/ptr_fun2.pass.cpp +++ b/test/utilities/function.objects/function.pointer.adaptors/ptr_fun2.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // pointer_to_binary_function // ptr_fun(Result (*f)(Arg1, Arg2)); #include #include #include double binary_f(int i, short j) {return i - j + .75;} int main() { assert(std::ptr_fun(binary_f)(36, 27) == 9.75); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// pointer_to_binary_function +// ptr_fun(Result (*f)(Arg1, Arg2)); + +#include +#include +#include + +double binary_f(int i, short j) {return i - j + .75;} + +int main() +{ + assert(std::ptr_fun(binary_f)(36, 27) == 9.75); +} diff --git a/test/utilities/function.objects/logical.operations/logical_and.pass.cpp b/test/utilities/function.objects/logical.operations/logical_and.pass.cpp index ae03d2c74..e9ae960a0 100644 --- a/test/utilities/function.objects/logical.operations/logical_and.pass.cpp +++ b/test/utilities/function.objects/logical.operations/logical_and.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // logical_and #include #include #include int main() { typedef std::logical_and F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 36)); assert(!f(36, 0)); assert(!f(0, 36)); assert(!f(0, 0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// logical_and + +#include +#include +#include + +int main() +{ + typedef std::logical_and F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 36)); + assert(!f(36, 0)); + assert(!f(0, 36)); + assert(!f(0, 0)); +} diff --git a/test/utilities/function.objects/logical.operations/logical_not.pass.cpp b/test/utilities/function.objects/logical.operations/logical_not.pass.cpp index 471b145aa..c2bb2566e 100644 --- a/test/utilities/function.objects/logical.operations/logical_not.pass.cpp +++ b/test/utilities/function.objects/logical.operations/logical_not.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // logical_not #include #include #include int main() { typedef std::logical_not F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(!f(36)); assert(f(0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// logical_not + +#include +#include +#include + +int main() +{ + typedef std::logical_not F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(!f(36)); + assert(f(0)); +} diff --git a/test/utilities/function.objects/logical.operations/logical_or.pass.cpp b/test/utilities/function.objects/logical.operations/logical_or.pass.cpp index 35c1f815b..17efd5cba 100644 --- a/test/utilities/function.objects/logical.operations/logical_or.pass.cpp +++ b/test/utilities/function.objects/logical.operations/logical_or.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // logical_or #include #include #include int main() { typedef std::logical_or F; const F f = F(); static_assert((std::is_base_of, F>::value), ""); assert(f(36, 36)); assert(f(36, 0)); assert(f(0, 36)); assert(!f(0, 0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// logical_or + +#include +#include +#include + +int main() +{ + typedef std::logical_or F; + const F f = F(); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36, 36)); + assert(f(36, 0)); + assert(f(0, 36)); + assert(!f(0, 0)); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun.pass.cpp index 7c1fb7432..a06374f97 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // const_mem_fun_t // mem_fun(S (T::*f)() const); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { const A a = A(); assert(std::mem_fun(&A::a3)(&a) == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// const_mem_fun_t +// mem_fun(S (T::*f)() const); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + const A a = A(); + assert(std::mem_fun(&A::a3)(&a) == 1); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1.pass.cpp index b23389abb..ae8995634 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // const_mem_fun1_t // mem_fun(S (T::*f)(A) const); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { const A a = A(); assert(std::mem_fun(&A::a4)(&a, 6) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// const_mem_fun1_t +// mem_fun(S (T::*f)(A) const); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + const A a = A(); + assert(std::mem_fun(&A::a4)(&a, 6) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_ref_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_ref_t.pass.cpp index a7b5d50c2..f918ff990 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_ref_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_ref_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // const_mem_fun1_ref_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::const_mem_fun1_ref_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a4); const A a = A(); assert(f(a, 6) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// const_mem_fun1_ref_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::const_mem_fun1_ref_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a4); + const A a = A(); + assert(f(a, 6) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_t.pass.cpp index 8989ae778..c99674282 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun1_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // const_mem_fun1_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::const_mem_fun1_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a4); const A a = A(); assert(f(&a, 6) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// const_mem_fun1_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::const_mem_fun1_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a4); + const A a = A(); + assert(f(&a, 6) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref.pass.cpp index 987b4c72f..93273aeea 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // const_mem_fun_ref_t // mem_fun_ref(S (T::*f)() const); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { const A a = A(); assert(std::mem_fun_ref(&A::a3)(a) == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// const_mem_fun_ref_t +// mem_fun_ref(S (T::*f)() const); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + const A a = A(); + assert(std::mem_fun_ref(&A::a3)(a) == 1); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref1.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref1.pass.cpp index 60aadc799..3eaee7f03 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref1.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref1.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // const_mem_fun1_ref_t // mem_fun_ref(S (T::*f)(A) const); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { const A a = A(); assert(std::mem_fun_ref(&A::a4)(a, 6) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// const_mem_fun1_ref_t +// mem_fun_ref(S (T::*f)(A) const); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + const A a = A(); + assert(std::mem_fun_ref(&A::a4)(a, 6) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref_t.pass.cpp index 424622ed3..83d677ff3 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_ref_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // const_mem_fun_ref_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::const_mem_fun_ref_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a3); const A a = A(); assert(f(a) == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// const_mem_fun_ref_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::const_mem_fun_ref_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a3); + const A a = A(); + assert(f(a) == 1); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_t.pass.cpp index 6eebb0edb..3f099face 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/const_mem_fun_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // const_mem_fun_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::const_mem_fun_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a3); const A a = A(); assert(f(&a) == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// const_mem_fun_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::const_mem_fun_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a3); + const A a = A(); + assert(f(&a) == 1); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun.pass.cpp index 144691bf8..5a227fae7 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // mem_fun_t // mem_fun(S (T::*f)()); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { A a; assert(std::mem_fun(&A::a1)(&a) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// mem_fun_t +// mem_fun(S (T::*f)()); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + A a; + assert(std::mem_fun(&A::a1)(&a) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1.pass.cpp index 514fac930..a1f4c1971 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // mem_fun1_t // mem_fun(S (T::*f)(A)); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { A a; assert(std::mem_fun(&A::a2)(&a, 5) == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// mem_fun1_t +// mem_fun(S (T::*f)(A)); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + A a; + assert(std::mem_fun(&A::a2)(&a, 5) == 6); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_ref_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_ref_t.pass.cpp index b451d680b..3aab735a2 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_ref_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_ref_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // mem_fun1_ref_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::mem_fun1_ref_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a2); A a; assert(f(a, 5) == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// mem_fun1_ref_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::mem_fun1_ref_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a2); + A a; + assert(f(a, 5) == 6); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_t.pass.cpp index a9a62e050..7fb6ebdc1 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun1_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // mem_fun1_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::mem_fun1_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a2); A a; assert(f(&a, 5) == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// mem_fun1_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::mem_fun1_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a2); + A a; + assert(f(&a, 5) == 6); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref.pass.cpp index 785305eaa..401b5745d 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // mem_fun_ref_t // mem_fun_ref(S (T::*f)()); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { A a; assert(std::mem_fun_ref(&A::a1)(a) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// mem_fun_ref_t +// mem_fun_ref(S (T::*f)()); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + A a; + assert(std::mem_fun_ref(&A::a1)(a) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref1.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref1.pass.cpp index 733db16ee..8a29d0a7e 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref1.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref1.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // mem_fun1_ref_t // mem_fun_ref(S (T::*f)(A)); #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { A a; assert(std::mem_fun_ref(&A::a2)(a, 5) == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// mem_fun1_ref_t +// mem_fun_ref(S (T::*f)(A)); + +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + A a; + assert(std::mem_fun_ref(&A::a2)(a, 5) == 6); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref_t.pass.cpp index d92f378f6..f407506bd 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_ref_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // mem_fun_ref_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::mem_fun_ref_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a1); A a; assert(f(a) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// mem_fun_ref_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::mem_fun_ref_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a1); + A a; + assert(f(a) == 5); +} diff --git a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_t.pass.cpp b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_t.pass.cpp index 721e9266d..b8a340ca4 100644 --- a/test/utilities/function.objects/member.pointer.adaptors/mem_fun_t.pass.cpp +++ b/test/utilities/function.objects/member.pointer.adaptors/mem_fun_t.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // mem_fun_t #include #include #include struct A { char a1() {return 5;} short a2(int i) {return short(i+1);} int a3() const {return 1;} double a4(unsigned i) const {return i-1;} }; int main() { typedef std::mem_fun_t F; static_assert((std::is_base_of, F>::value), ""); const F f(&A::a1); A a; assert(f(&a) == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// mem_fun_t + +#include +#include +#include + +struct A +{ + char a1() {return 5;} + short a2(int i) {return short(i+1);} + int a3() const {return 1;} + double a4(unsigned i) const {return i-1;} +}; + +int main() +{ + typedef std::mem_fun_t F; + static_assert((std::is_base_of, F>::value), ""); + const F f(&A::a1); + A a; + assert(f(&a) == 5); +} diff --git a/test/utilities/function.objects/negators/binary_negate.pass.cpp b/test/utilities/function.objects/negators/binary_negate.pass.cpp index da48bbd4f..e846f6c51 100644 --- a/test/utilities/function.objects/negators/binary_negate.pass.cpp +++ b/test/utilities/function.objects/negators/binary_negate.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // binary_negate #include #include #include int main() { typedef std::binary_negate > F; const F f = F(std::logical_and()); static_assert((std::is_base_of, F>::value), ""); assert(!f(36, 36)); assert( f(36, 0)); assert( f(0, 36)); assert( f(0, 0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// binary_negate + +#include +#include +#include + +int main() +{ + typedef std::binary_negate > F; + const F f = F(std::logical_and()); + static_assert((std::is_base_of, F>::value), ""); + assert(!f(36, 36)); + assert( f(36, 0)); + assert( f(0, 36)); + assert( f(0, 0)); +} diff --git a/test/utilities/function.objects/negators/not1.pass.cpp b/test/utilities/function.objects/negators/not1.pass.cpp index 6b399307e..c0ec87f52 100644 --- a/test/utilities/function.objects/negators/not1.pass.cpp +++ b/test/utilities/function.objects/negators/not1.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // not1 #include #include int main() { typedef std::logical_not F; assert(std::not1(F())(36)); assert(!std::not1(F())(0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// not1 + +#include +#include + +int main() +{ + typedef std::logical_not F; + assert(std::not1(F())(36)); + assert(!std::not1(F())(0)); +} diff --git a/test/utilities/function.objects/negators/not2.pass.cpp b/test/utilities/function.objects/negators/not2.pass.cpp index 9e65415cb..ff5db68ad 100644 --- a/test/utilities/function.objects/negators/not2.pass.cpp +++ b/test/utilities/function.objects/negators/not2.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // not2 #include #include int main() { typedef std::logical_and F; assert(!std::not2(F())(36, 36)); assert( std::not2(F())(36, 0)); assert( std::not2(F())(0, 36)); assert( std::not2(F())(0, 0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// not2 + +#include +#include + +int main() +{ + typedef std::logical_and F; + assert(!std::not2(F())(36, 36)); + assert( std::not2(F())(36, 0)); + assert( std::not2(F())(0, 36)); + assert( std::not2(F())(0, 0)); +} diff --git a/test/utilities/function.objects/negators/unary_negate.pass.cpp b/test/utilities/function.objects/negators/unary_negate.pass.cpp index 9c5c2592b..1479e12b2 100644 --- a/test/utilities/function.objects/negators/unary_negate.pass.cpp +++ b/test/utilities/function.objects/negators/unary_negate.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unary_negate #include #include #include int main() { typedef std::unary_negate > F; const F f = F(std::logical_not()); static_assert((std::is_base_of, F>::value), ""); assert(f(36)); assert(!f(0)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unary_negate + +#include +#include +#include + +int main() +{ + typedef std::unary_negate > F; + const F f = F(std::logical_not()); + static_assert((std::is_base_of, F>::value), ""); + assert(f(36)); + assert(!f(0)); +} diff --git a/test/utilities/function.objects/refwrap/binary.pass.cpp b/test/utilities/function.objects/refwrap/binary.pass.cpp index e9d7dda00..5c4c730ac 100644 --- a/test/utilities/function.objects/refwrap/binary.pass.cpp +++ b/test/utilities/function.objects/refwrap/binary.pass.cpp @@ -1 +1,80 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // check for deriving from binary_function #include #include class functor1 : public std::unary_function { }; class functor2 : public std::binary_function { }; class functor3 : public std::unary_function, public std::binary_function { public: typedef float result_type; }; class functor4 : public std::unary_function, public std::binary_function { public: }; struct C { typedef int argument_type; typedef int result_type; }; int main() { static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// check for deriving from binary_function + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +class functor2 + : public std::binary_function +{ +}; + +class functor3 + : public std::unary_function, + public std::binary_function +{ +public: + typedef float result_type; +}; + +class functor4 + : public std::unary_function, + public std::binary_function +{ +public: +}; + +struct C +{ + typedef int argument_type; + typedef int result_type; +}; + +int main() +{ + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp index 76986162b..7c33f7712 100644 --- a/test/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.access/conversion.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // operator T& () const; #include #include class functor1 : public std::unary_function { }; template void test(T& t) { std::reference_wrapper r(t); T& r2 = r; assert(&r2 == &t); } void f() {} int main() { void (*fp)() = f; test(fp); test(f); functor1 f1; test(f1); int i = 0; test(i); const int j = 0; test(j); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// operator T& () const; + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +template +void +test(T& t) +{ + std::reference_wrapper r(t); + T& r2 = r; + assert(&r2 == &t); +} + +void f() {} + +int main() +{ + void (*fp)() = f; + test(fp); + test(f); + functor1 f1; + test(f1); + int i = 0; + test(i); + const int j = 0; + test(j); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp index bccafd746..b08fb87b0 100644 --- a/test/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.assign/copy_assign.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // reference_wrapper& operator=(const reference_wrapper& x); #include #include class functor1 : public std::unary_function { }; template void test(T& t) { std::reference_wrapper r(t); T t2 = t; std::reference_wrapper r2(t2); r2 = r; assert(&r2.get() == &t); } void f() {} void g() {} void test_function() { std::reference_wrapper r(f); std::reference_wrapper r2(g); r2 = r; assert(&r2.get() == &f); } int main() { void (*fp)() = f; test(fp); test_function(); functor1 f1; test(f1); int i = 0; test(i); const int j = 0; test(j); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// reference_wrapper& operator=(const reference_wrapper& x); + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +template +void +test(T& t) +{ + std::reference_wrapper r(t); + T t2 = t; + std::reference_wrapper r2(t2); + r2 = r; + assert(&r2.get() == &t); +} + +void f() {} +void g() {} + +void +test_function() +{ + std::reference_wrapper r(f); + std::reference_wrapper r2(g); + r2 = r; + assert(&r2.get() == &f); +} + +int main() +{ + void (*fp)() = f; + test(fp); + test_function(); + functor1 f1; + test(f1); + int i = 0; + test(i); + const int j = 0; + test(j); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp index 8bdbec5a7..497e5fbc1 100644 --- a/test/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.const/copy_ctor.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // reference_wrapper(const reference_wrapper& x); #include #include class functor1 : public std::unary_function { }; template void test(T& t) { std::reference_wrapper r(t); std::reference_wrapper r2 = r; assert(&r2.get() == &t); } void f() {} int main() { void (*fp)() = f; test(fp); test(f); functor1 f1; test(f1); int i = 0; test(i); const int j = 0; test(j); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// reference_wrapper(const reference_wrapper& x); + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +template +void +test(T& t) +{ + std::reference_wrapper r(t); + std::reference_wrapper r2 = r; + assert(&r2.get() == &t); +} + +void f() {} + +int main() +{ + void (*fp)() = f; + test(fp); + test(f); + functor1 f1; + test(f1); + int i = 0; + test(i); + const int j = 0; + test(j); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp b/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp index f07592db4..78153d6bd 100644 --- a/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.fail.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // reference_wrapper(T&&) = delete; #include #include int main() { std::reference_wrapper r(3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// reference_wrapper(T&&) = delete; + +#include +#include + +int main() +{ + std::reference_wrapper r(3); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp index a4c2c8727..770ac52dd 100644 --- a/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.const/type_ctor.pass.cpp @@ -1 +1,45 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // reference_wrapper(T& t); #include #include class functor1 : public std::unary_function { }; template void test(T& t) { std::reference_wrapper r(t); assert(&r.get() == &t); } void f() {} int main() { void (*fp)() = f; test(fp); test(f); functor1 f1; test(f1); int i = 0; test(i); const int j = 0; test(j); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// reference_wrapper(T& t); + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +template +void +test(T& t) +{ + std::reference_wrapper r(t); + assert(&r.get() == &t); +} + +void f() {} + +int main() +{ + void (*fp)() = f; + test(fp); + test(f); + functor1 f1; + test(f1); + int i = 0; + test(i); + const int j = 0; + test(j); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp index f60de648d..22ad0b8a2 100644 --- a/test/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.helpers/cref_1.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template reference_wrapper cref(const T& t); #include #include int main() { int i = 0; std::reference_wrapper r = std::cref(i); assert(&r.get() == &i); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template reference_wrapper cref(const T& t); + +#include +#include + +int main() +{ + int i = 0; + std::reference_wrapper r = std::cref(i); + assert(&r.get() == &i); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp index 2f05d467e..a11e3dad9 100644 --- a/test/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template reference_wrapper cref(reference_wrapper t); #include #include int main() { const int i = 0; std::reference_wrapper r1 = std::cref(i); std::reference_wrapper r2 = std::cref(r1); assert(&r2.get() == &i); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template reference_wrapper cref(reference_wrapper t); + +#include +#include + +int main() +{ + const int i = 0; + std::reference_wrapper r1 = std::cref(i); + std::reference_wrapper r2 = std::cref(r1); + assert(&r2.get() == &i); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp index 7fe32d7b0..abdd9fa26 100644 --- a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.fail.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template reference_wrapper ref(T& t); // Don't allow binding to a temp #include struct A {}; const A source() {return A();} int main() { std::reference_wrapper r = std::ref(source()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template reference_wrapper ref(T& t); + +// Don't allow binding to a temp + +#include + +struct A {}; + +const A source() {return A();} + +int main() +{ + std::reference_wrapper r = std::ref(source()); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp index d4e493e09..c01286c17 100644 --- a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_1.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template reference_wrapper ref(T& t); #include #include int main() { int i = 0; std::reference_wrapper r = std::ref(i); assert(&r.get() == &i); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template reference_wrapper ref(T& t); + +#include +#include + +int main() +{ + int i = 0; + std::reference_wrapper r = std::ref(i); + assert(&r.get() == &i); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp index f486a00ae..646cd10aa 100644 --- a/test/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.helpers/ref_2.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template reference_wrapper ref(reference_wrappert); #include #include int main() { int i = 0; std::reference_wrapper r1 = std::ref(i); std::reference_wrapper r2 = std::ref(r1); assert(&r2.get() == &i); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template reference_wrapper ref(reference_wrappert); + +#include +#include + +int main() +{ + int i = 0; + std::reference_wrapper r1 = std::ref(i); + std::reference_wrapper r2 = std::ref(r1); + assert(&r2.get() == &i); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp index d7b94ab60..60c7bf060 100644 --- a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.fail.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template // requires Callable // Callable::result_type // operator()(ArgTypes&&... args) const; #include #include // member data pointer: cv qualifiers should transfer from argument to return type struct A_int_1 { A_int_1() : data_(5) {} int data_; }; void test_int_1() { // member data pointer { int A_int_1::*fp = &A_int_1::data_; std::reference_wrapper r1(fp); A_int_1 a; assert(r1(a) == 5); r1(a) = 6; assert(r1(a) == 6); const A_int_1* ap = &a; assert(r1(ap) == 6); r1(ap) = 7; assert(r1(ap) == 7); } } int main() { test_int_1(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template +// requires Callable +// Callable::result_type +// operator()(ArgTypes&&... args) const; + +#include +#include + +// member data pointer: cv qualifiers should transfer from argument to return type + +struct A_int_1 +{ + A_int_1() : data_(5) {} + + int data_; +}; + +void +test_int_1() +{ + // member data pointer + { + int A_int_1::*fp = &A_int_1::data_; + std::reference_wrapper r1(fp); + A_int_1 a; + assert(r1(a) == 5); + r1(a) = 6; + assert(r1(a) == 6); + const A_int_1* ap = &a; + assert(r1(ap) == 6); + r1(ap) = 7; + assert(r1(ap) == 7); + } +} + +int main() +{ + test_int_1(); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp index ca7f226b6..b750564ff 100644 --- a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke.pass.cpp @@ -1 +1,329 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template // requires Callable // Callable::result_type // operator()(ArgTypes&&... args) const; #include #include int count = 0; // 1 arg, return void void f_void_1(int i) { count += i; } struct A_void_1 { void operator()(int i) { count += i; } void mem1() {++count;} void mem2() const {++count;} }; void test_void_1() { int save_count = count; // function { std::reference_wrapper r1(f_void_1); int i = 2; r1(i); assert(count == save_count+2); save_count = count; } // function pointer { void (*fp)(int) = f_void_1; std::reference_wrapper r1(fp); int i = 3; r1(i); assert(count == save_count+3); save_count = count; } // functor { A_void_1 a0; std::reference_wrapper r1(a0); int i = 4; r1(i); assert(count == save_count+4); save_count = count; } // member function pointer { void (A_void_1::*fp)() = &A_void_1::mem1; std::reference_wrapper r1(fp); A_void_1 a; r1(a); assert(count == save_count+1); save_count = count; A_void_1* ap = &a; r1(ap); assert(count == save_count+1); save_count = count; } // const member function pointer { void (A_void_1::*fp)() const = &A_void_1::mem2; std::reference_wrapper r1(fp); A_void_1 a; r1(a); assert(count == save_count+1); save_count = count; A_void_1* ap = &a; r1(ap); assert(count == save_count+1); save_count = count; } } // 1 arg, return int int f_int_1(int i) { return i + 1; } struct A_int_1 { A_int_1() : data_(5) {} int operator()(int i) { return i - 1; } int mem1() {return 3;} int mem2() const {return 4;} int data_; }; void test_int_1() { // function { std::reference_wrapper r1(f_int_1); int i = 2; assert(r1(i) == 3); } // function pointer { int (*fp)(int) = f_int_1; std::reference_wrapper r1(fp); int i = 3; assert(r1(i) == 4); } // functor { A_int_1 a0; std::reference_wrapper r1(a0); int i = 4; assert(r1(i) == 3); } // member function pointer { int (A_int_1::*fp)() = &A_int_1::mem1; std::reference_wrapper r1(fp); A_int_1 a; assert(r1(a) == 3); A_int_1* ap = &a; assert(r1(ap) == 3); } // const member function pointer { int (A_int_1::*fp)() const = &A_int_1::mem2; std::reference_wrapper r1(fp); A_int_1 a; assert(r1(a) == 4); A_int_1* ap = &a; assert(r1(ap) == 4); } // member data pointer { int A_int_1::*fp = &A_int_1::data_; std::reference_wrapper r1(fp); A_int_1 a; assert(r1(a) == 5); r1(a) = 6; assert(r1(a) == 6); A_int_1* ap = &a; assert(r1(ap) == 6); r1(ap) = 7; assert(r1(ap) == 7); } } // 2 arg, return void void f_void_2(int i, int j) { count += i+j; } struct A_void_2 { void operator()(int i, int j) { count += i+j; } void mem1(int i) {count += i;} void mem2(int i) const {count += i;} }; void test_void_2() { int save_count = count; // function { std::reference_wrapper r1(f_void_2); int i = 2; int j = 3; r1(i, j); assert(count == save_count+5); save_count = count; } // function pointer { void (*fp)(int, int) = f_void_2; std::reference_wrapper r1(fp); int i = 3; int j = 4; r1(i, j); assert(count == save_count+7); save_count = count; } // functor { A_void_2 a0; std::reference_wrapper r1(a0); int i = 4; int j = 5; r1(i, j); assert(count == save_count+9); save_count = count; } // member function pointer { void (A_void_2::*fp)(int) = &A_void_2::mem1; std::reference_wrapper r1(fp); A_void_2 a; int i = 3; r1(a, i); assert(count == save_count+3); save_count = count; A_void_2* ap = &a; r1(ap, i); assert(count == save_count+3); save_count = count; } // const member function pointer { void (A_void_2::*fp)(int) const = &A_void_2::mem2; std::reference_wrapper r1(fp); A_void_2 a; int i = 4; r1(a, i); assert(count == save_count+4); save_count = count; A_void_2* ap = &a; r1(ap, i); assert(count == save_count+4); save_count = count; } } // 2 arg, return int int f_int_2(int i, int j) { return i+j; } struct A_int_2 { int operator()(int i, int j) { return i+j; } int mem1(int i) {return i+1;} int mem2(int i) const {return i+2;} }; void testint_2() { // function { std::reference_wrapper r1(f_int_2); int i = 2; int j = 3; assert(r1(i, j) == i+j); } // function pointer { int (*fp)(int, int) = f_int_2; std::reference_wrapper r1(fp); int i = 3; int j = 4; assert(r1(i, j) == i+j); } // functor { A_int_2 a0; std::reference_wrapper r1(a0); int i = 4; int j = 5; assert(r1(i, j) == i+j); } // member function pointer { int(A_int_2::*fp)(int) = &A_int_2::mem1; std::reference_wrapper r1(fp); A_int_2 a; int i = 3; assert(r1(a, i) == i+1); A_int_2* ap = &a; assert(r1(ap, i) == i+1); } // const member function pointer { int (A_int_2::*fp)(int) const = &A_int_2::mem2; std::reference_wrapper r1(fp); A_int_2 a; int i = 4; assert(r1(a, i) == i+2); A_int_2* ap = &a; assert(r1(ap, i) == i+2); } } int main() { test_void_1(); test_int_1(); test_void_2(); testint_2(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template +// requires Callable +// Callable::result_type +// operator()(ArgTypes&&... args) const; + +#include +#include + +int count = 0; + +// 1 arg, return void + +void f_void_1(int i) +{ + count += i; +} + +struct A_void_1 +{ + void operator()(int i) + { + count += i; + } + + void mem1() {++count;} + void mem2() const {++count;} +}; + +void +test_void_1() +{ + int save_count = count; + // function + { + std::reference_wrapper r1(f_void_1); + int i = 2; + r1(i); + assert(count == save_count+2); + save_count = count; + } + // function pointer + { + void (*fp)(int) = f_void_1; + std::reference_wrapper r1(fp); + int i = 3; + r1(i); + assert(count == save_count+3); + save_count = count; + } + // functor + { + A_void_1 a0; + std::reference_wrapper r1(a0); + int i = 4; + r1(i); + assert(count == save_count+4); + save_count = count; + } + // member function pointer + { + void (A_void_1::*fp)() = &A_void_1::mem1; + std::reference_wrapper r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + r1(ap); + assert(count == save_count+1); + save_count = count; + } + // const member function pointer + { + void (A_void_1::*fp)() const = &A_void_1::mem2; + std::reference_wrapper r1(fp); + A_void_1 a; + r1(a); + assert(count == save_count+1); + save_count = count; + A_void_1* ap = &a; + r1(ap); + assert(count == save_count+1); + save_count = count; + } +} + +// 1 arg, return int + +int f_int_1(int i) +{ + return i + 1; +} + +struct A_int_1 +{ + A_int_1() : data_(5) {} + int operator()(int i) + { + return i - 1; + } + + int mem1() {return 3;} + int mem2() const {return 4;} + int data_; +}; + +void +test_int_1() +{ + // function + { + std::reference_wrapper r1(f_int_1); + int i = 2; + assert(r1(i) == 3); + } + // function pointer + { + int (*fp)(int) = f_int_1; + std::reference_wrapper r1(fp); + int i = 3; + assert(r1(i) == 4); + } + // functor + { + A_int_1 a0; + std::reference_wrapper r1(a0); + int i = 4; + assert(r1(i) == 3); + } + // member function pointer + { + int (A_int_1::*fp)() = &A_int_1::mem1; + std::reference_wrapper r1(fp); + A_int_1 a; + assert(r1(a) == 3); + A_int_1* ap = &a; + assert(r1(ap) == 3); + } + // const member function pointer + { + int (A_int_1::*fp)() const = &A_int_1::mem2; + std::reference_wrapper r1(fp); + A_int_1 a; + assert(r1(a) == 4); + A_int_1* ap = &a; + assert(r1(ap) == 4); + } + // member data pointer + { + int A_int_1::*fp = &A_int_1::data_; + std::reference_wrapper r1(fp); + A_int_1 a; + assert(r1(a) == 5); + r1(a) = 6; + assert(r1(a) == 6); + A_int_1* ap = &a; + assert(r1(ap) == 6); + r1(ap) = 7; + assert(r1(ap) == 7); + } +} + +// 2 arg, return void + +void f_void_2(int i, int j) +{ + count += i+j; +} + +struct A_void_2 +{ + void operator()(int i, int j) + { + count += i+j; + } + + void mem1(int i) {count += i;} + void mem2(int i) const {count += i;} +}; + +void +test_void_2() +{ + int save_count = count; + // function + { + std::reference_wrapper r1(f_void_2); + int i = 2; + int j = 3; + r1(i, j); + assert(count == save_count+5); + save_count = count; + } + // function pointer + { + void (*fp)(int, int) = f_void_2; + std::reference_wrapper r1(fp); + int i = 3; + int j = 4; + r1(i, j); + assert(count == save_count+7); + save_count = count; + } + // functor + { + A_void_2 a0; + std::reference_wrapper r1(a0); + int i = 4; + int j = 5; + r1(i, j); + assert(count == save_count+9); + save_count = count; + } + // member function pointer + { + void (A_void_2::*fp)(int) = &A_void_2::mem1; + std::reference_wrapper r1(fp); + A_void_2 a; + int i = 3; + r1(a, i); + assert(count == save_count+3); + save_count = count; + A_void_2* ap = &a; + r1(ap, i); + assert(count == save_count+3); + save_count = count; + } + // const member function pointer + { + void (A_void_2::*fp)(int) const = &A_void_2::mem2; + std::reference_wrapper r1(fp); + A_void_2 a; + int i = 4; + r1(a, i); + assert(count == save_count+4); + save_count = count; + A_void_2* ap = &a; + r1(ap, i); + assert(count == save_count+4); + save_count = count; + } +} + +// 2 arg, return int + +int f_int_2(int i, int j) +{ + return i+j; +} + +struct A_int_2 +{ + int operator()(int i, int j) + { + return i+j; + } + + int mem1(int i) {return i+1;} + int mem2(int i) const {return i+2;} +}; + +void +testint_2() +{ + // function + { + std::reference_wrapper r1(f_int_2); + int i = 2; + int j = 3; + assert(r1(i, j) == i+j); + } + // function pointer + { + int (*fp)(int, int) = f_int_2; + std::reference_wrapper r1(fp); + int i = 3; + int j = 4; + assert(r1(i, j) == i+j); + } + // functor + { + A_int_2 a0; + std::reference_wrapper r1(a0); + int i = 4; + int j = 5; + assert(r1(i, j) == i+j); + } + // member function pointer + { + int(A_int_2::*fp)(int) = &A_int_2::mem1; + std::reference_wrapper r1(fp); + A_int_2 a; + int i = 3; + assert(r1(a, i) == i+1); + A_int_2* ap = &a; + assert(r1(ap, i) == i+1); + } + // const member function pointer + { + int (A_int_2::*fp)(int) const = &A_int_2::mem2; + std::reference_wrapper r1(fp); + A_int_2 a; + int i = 4; + assert(r1(a, i) == i+2); + A_int_2* ap = &a; + assert(r1(ap, i) == i+2); + } +} + +int main() +{ + test_void_1(); + test_int_1(); + test_void_2(); + testint_2(); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp index 2bef95e6d..709836bd3 100644 --- a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_int_0.pass.cpp @@ -1 +1,76 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template // requires Callable // Callable::result_type // operator()(ArgTypes&&... args) const; #include #include // 0 args, return int int count = 0; int f_int_0() { return 3; } struct A_int_0 { int operator()() {return 4;} }; void test_int_0() { // function { std::reference_wrapper r1(f_int_0); assert(r1() == 3); } // function pointer { int (*fp)() = f_int_0; std::reference_wrapper r1(fp); assert(r1() == 3); } // functor { A_int_0 a0; std::reference_wrapper r1(a0); assert(r1() == 4); } } // 1 arg, return void void f_void_1(int i) { count += i; } struct A_void_1 { void operator()(int i) { count += i; } }; int main() { test_int_0(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template +// requires Callable +// Callable::result_type +// operator()(ArgTypes&&... args) const; + +#include +#include + +// 0 args, return int + +int count = 0; + +int f_int_0() +{ + return 3; +} + +struct A_int_0 +{ + int operator()() {return 4;} +}; + +void +test_int_0() +{ + // function + { + std::reference_wrapper r1(f_int_0); + assert(r1() == 3); + } + // function pointer + { + int (*fp)() = f_int_0; + std::reference_wrapper r1(fp); + assert(r1() == 3); + } + // functor + { + A_int_0 a0; + std::reference_wrapper r1(a0); + assert(r1() == 4); + } +} + +// 1 arg, return void + +void f_void_1(int i) +{ + count += i; +} + +struct A_void_1 +{ + void operator()(int i) + { + count += i; + } +}; + +int main() +{ + test_int_0(); +} diff --git a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp index e7445217c..127a97c67 100644 --- a/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp +++ b/test/utilities/function.objects/refwrap/refwrap.invoke/invoke_void_0.pass.cpp @@ -1 +1,68 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // template // requires Callable // Callable::result_type // operator()(ArgTypes&&... args) const; #include #include // 0 args, return void int count = 0; void f_void_0() { ++count; } struct A_void_0 { void operator()() {++count;} }; void test_void_0() { int save_count = count; // function { std::reference_wrapper r1(f_void_0); r1(); assert(count == save_count+1); save_count = count; } // function pointer { void (*fp)() = f_void_0; std::reference_wrapper r1(fp); r1(); assert(count == save_count+1); save_count = count; } // functor { A_void_0 a0; std::reference_wrapper r1(a0); r1(); assert(count == save_count+1); save_count = count; } } int main() { test_void_0(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// template +// requires Callable +// Callable::result_type +// operator()(ArgTypes&&... args) const; + +#include +#include + +// 0 args, return void + +int count = 0; + +void f_void_0() +{ + ++count; +} + +struct A_void_0 +{ + void operator()() {++count;} +}; + +void +test_void_0() +{ + int save_count = count; + // function + { + std::reference_wrapper r1(f_void_0); + r1(); + assert(count == save_count+1); + save_count = count; + } + // function pointer + { + void (*fp)() = f_void_0; + std::reference_wrapper r1(fp); + r1(); + assert(count == save_count+1); + save_count = count; + } + // functor + { + A_void_0 a0; + std::reference_wrapper r1(a0); + r1(); + assert(count == save_count+1); + save_count = count; + } +} + +int main() +{ + test_void_0(); +} diff --git a/test/utilities/function.objects/refwrap/type.pass.cpp b/test/utilities/function.objects/refwrap/type.pass.cpp index 0ff125368..fb1523e7d 100644 --- a/test/utilities/function.objects/refwrap/type.pass.cpp +++ b/test/utilities/function.objects/refwrap/type.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // check for member typedef type #include #include class C {}; int main() { static_assert((std::is_same::type, C>::value), ""); static_assert((std::is_same::type, void ()>::value), ""); static_assert((std::is_same::type, int* (double*)>::value), ""); static_assert((std::is_same::type, void(*)()>::value), ""); static_assert((std::is_same::type, int*(*)(double*)>::value), ""); static_assert((std::is_same::type, int*(C::*)(double*)>::value), ""); static_assert((std::is_same::type, int (C::*)(double*) const volatile>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// check for member typedef type + +#include +#include + +class C {}; + +int main() +{ + static_assert((std::is_same::type, + C>::value), ""); + static_assert((std::is_same::type, + void ()>::value), ""); + static_assert((std::is_same::type, + int* (double*)>::value), ""); + static_assert((std::is_same::type, + void(*)()>::value), ""); + static_assert((std::is_same::type, + int*(*)(double*)>::value), ""); + static_assert((std::is_same::type, + int*(C::*)(double*)>::value), ""); + static_assert((std::is_same::type, + int (C::*)(double*) const volatile>::value), ""); +} diff --git a/test/utilities/function.objects/refwrap/unary.pass.cpp b/test/utilities/function.objects/refwrap/unary.pass.cpp index 411d34fa2..5998deace 100644 --- a/test/utilities/function.objects/refwrap/unary.pass.cpp +++ b/test/utilities/function.objects/refwrap/unary.pass.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // check for deriving from unary_function #include #include class functor1 : public std::unary_function { }; class functor2 : public std::binary_function { }; class functor3 : public std::unary_function, public std::binary_function { public: typedef float result_type; }; class functor4 : public std::unary_function, public std::binary_function { public: }; struct C { typedef int argument_type; typedef int result_type; }; int main() { static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((std::is_base_of, std::reference_wrapper >::value), ""); static_assert((!std::is_base_of, std::reference_wrapper >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// check for deriving from unary_function + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +class functor2 + : public std::binary_function +{ +}; + +class functor3 + : public std::unary_function, + public std::binary_function +{ +public: + typedef float result_type; +}; + +class functor4 + : public std::unary_function, + public std::binary_function +{ +public: +}; + +struct C +{ + typedef int argument_type; + typedef int result_type; +}; + +int main() +{ + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((std::is_base_of, + std::reference_wrapper >::value), ""); + static_assert((!std::is_base_of, + std::reference_wrapper >::value), ""); +} diff --git a/test/utilities/function.objects/refwrap/weak_result.pass.cpp b/test/utilities/function.objects/refwrap/weak_result.pass.cpp index 09cef6642..794651dbd 100644 --- a/test/utilities/function.objects/refwrap/weak_result.pass.cpp +++ b/test/utilities/function.objects/refwrap/weak_result.pass.cpp @@ -1 +1,82 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // reference_wrapper // has weak result type #include #include class functor1 : public std::unary_function { }; class functor2 : public std::binary_function { }; class functor3 : public std::unary_function, public std::binary_function { public: typedef float result_type; }; class functor4 : public std::unary_function, public std::binary_function { public: }; class C {}; template struct has_result_type { private: struct two {char _; char __;}; template static two test(...); template static char test(typename U::result_type* = 0); public: static const bool value = sizeof(test(0)) == 1; }; int main() { static_assert((std::is_same::result_type, char>::value), ""); static_assert((std::is_same::result_type, double>::value), ""); static_assert((std::is_same::result_type, float>::value), ""); static_assert((std::is_same::result_type, void>::value), ""); static_assert((std::is_same::result_type, int*>::value), ""); static_assert((std::is_same::result_type, void>::value), ""); static_assert((std::is_same::result_type, int*>::value), ""); static_assert((std::is_same::result_type, int*>::value), ""); static_assert((std::is_same::result_type, int>::value), ""); static_assert((std::is_same::result_type, C>::value), ""); static_assert(has_result_type >::value, ""); static_assert(!has_result_type >::value, ""); static_assert(!has_result_type >::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// reference_wrapper + +// has weak result type + +#include +#include + +class functor1 + : public std::unary_function +{ +}; + +class functor2 + : public std::binary_function +{ +}; + +class functor3 + : public std::unary_function, + public std::binary_function +{ +public: + typedef float result_type; +}; + +class functor4 + : public std::unary_function, + public std::binary_function +{ +public: +}; + +class C {}; + +template +struct has_result_type +{ +private: + struct two {char _; char __;}; + template static two test(...); + template static char test(typename U::result_type* = 0); +public: + static const bool value = sizeof(test(0)) == 1; +}; + +int main() +{ + static_assert((std::is_same::result_type, + char>::value), ""); + static_assert((std::is_same::result_type, + double>::value), ""); + static_assert((std::is_same::result_type, + float>::value), ""); + static_assert((std::is_same::result_type, + void>::value), ""); + static_assert((std::is_same::result_type, + int*>::value), ""); + static_assert((std::is_same::result_type, + void>::value), ""); + static_assert((std::is_same::result_type, + int*>::value), ""); + static_assert((std::is_same::result_type, + int*>::value), ""); + static_assert((std::is_same::result_type, + int>::value), ""); + static_assert((std::is_same::result_type, + C>::value), ""); + static_assert(has_result_type >::value, ""); + static_assert(!has_result_type >::value, ""); + static_assert(!has_result_type >::value, ""); +} diff --git a/test/utilities/function.objects/version.pass.cpp b/test/utilities/function.objects/version.pass.cpp index 293168ba4..03024d1f1 100644 --- a/test/utilities/function.objects/version.pass.cpp +++ b/test/utilities/function.objects/version.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // #include #ifndef _LIBCPP_VERSION #error _LIBCPP_VERSION not defined #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/allocs.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/allocs.pass.cpp index a75ae5444..19b81a8a5 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/allocs.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/allocs.pass.cpp @@ -108,5 +108,5 @@ int main() std::scoped_allocator_adaptor, A3>(A2(5), A3(6)))); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_copy.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_copy.pass.cpp index 64296e3ec..49ea9c067 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_copy.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_copy.pass.cpp @@ -65,5 +65,5 @@ int main() assert(a2 == a1); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_move.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_move.pass.cpp index 2fae9037a..0db40da6b 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_move.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/converting_move.pass.cpp @@ -71,5 +71,5 @@ int main() assert(a2 == a1); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/copy.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/copy.pass.cpp index 1bf66370d..6db3d3a65 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/copy.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/copy.pass.cpp @@ -66,5 +66,5 @@ int main() assert(a2 == a1); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/default.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/default.pass.cpp index eeac01607..26dc7f551 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/default.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.cnstr/default.pass.cpp @@ -54,5 +54,5 @@ int main() assert(A3::move_called == false); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size.pass.cpp index 220306824..1a433cfa4 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size.pass.cpp @@ -45,5 +45,5 @@ int main() assert(A1::allocate_called == true); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size_hint.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size_hint.pass.cpp index 9ea3da801..43916cb0b 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size_hint.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/allocate_size_hint.pass.cpp @@ -66,5 +66,5 @@ int main() assert(a.allocate(10, (const void*)20) == (int*)20); assert(A2::allocate_called == true); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/construct.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/construct.pass.cpp index 47d3be53c..56306f29c 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/construct.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/construct.pass.cpp @@ -111,7 +111,7 @@ struct F bool F::constructed = false; -#endif +#endif // _LIBCPP_MOVE int main() { @@ -189,5 +189,5 @@ int main() s->~S(); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/deallocate.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/deallocate.pass.cpp index c123cd8b9..137d8011d 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/deallocate.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/deallocate.pass.cpp @@ -42,5 +42,5 @@ int main() assert((A1::deallocate_called == std::pair((int*)10, 20))); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/destroy.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/destroy.pass.cpp index 6456c12cf..9201e16ea 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/destroy.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/destroy.pass.cpp @@ -66,5 +66,5 @@ int main() assert(A3::destroy_called); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/inner_allocator.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/inner_allocator.pass.cpp index 85b772408..1eef5beed 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/inner_allocator.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/inner_allocator.pass.cpp @@ -41,5 +41,5 @@ int main() std::scoped_allocator_adaptor, A3>(A2(6), A3(8)))); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/max_size.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/max_size.pass.cpp index 8c2db74bd..22655a363 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/max_size.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/max_size.pass.cpp @@ -39,5 +39,5 @@ int main() assert(a.max_size() == 200); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/outer_allocator.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/outer_allocator.pass.cpp index 61ac84738..23ab0e599 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/outer_allocator.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/outer_allocator.pass.cpp @@ -40,5 +40,5 @@ int main() assert(a.outer_allocator() == A1(5)); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction.pass.cpp index 883d57360..a5d5b109b 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.members/select_on_container_copy_construction.pass.cpp @@ -51,5 +51,5 @@ int main() assert(a2.inner_allocator().inner_allocator().outer_allocator().id() == -1); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/inner_allocator_type.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/inner_allocator_type.pass.cpp index 952e31ddd..416ac5241 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/inner_allocator_type.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/inner_allocator_type.pass.cpp @@ -35,5 +35,5 @@ int main() std::scoped_allocator_adaptor, A2, A3>::inner_allocator_type, std::scoped_allocator_adaptor, A3>>::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment.pass.cpp index 479f65496..46ae7812e 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_copy_assignment.pass.cpp @@ -35,5 +35,5 @@ int main() std::scoped_allocator_adaptor, A2, A3>::propagate_on_container_copy_assignment, std::true_type>::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment.pass.cpp index d443b0bfb..664c27bd7 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_move_assignment.pass.cpp @@ -35,5 +35,5 @@ int main() std::scoped_allocator_adaptor, A2, A3>::propagate_on_container_move_assignment, std::true_type>::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap.pass.cpp b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap.pass.cpp index 76da120de..585bd14bc 100644 --- a/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/allocator.adaptor.types/propagate_on_container_swap.pass.cpp @@ -35,5 +35,5 @@ int main() std::scoped_allocator_adaptor, A2, A3>::propagate_on_container_swap, std::true_type>::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.adaptor/allocators.h b/test/utilities/memory/allocator.adaptor/allocators.h index 7075f85e2..0e4b7f329 100644 --- a/test/utilities/memory/allocator.adaptor/allocators.h +++ b/test/utilities/memory/allocator.adaptor/allocators.h @@ -150,8 +150,6 @@ public: A3 select_on_container_copy_construction() const {return A3(-1);} }; - - template bool A3::copy_called = false; template bool A3::move_called = false; template bool A3::constructed = false; @@ -171,6 +169,6 @@ bool operator!=(const A3& x, const A3& y) return !(x == y); } -#endif +#endif // _LIBCPP_MOVE -#endif +#endif // ALLOCATORS_H diff --git a/test/utilities/memory/allocator.adaptor/types.pass.cpp b/test/utilities/memory/allocator.adaptor/types.pass.cpp index af1e3d24b..61a347f5f 100644 --- a/test/utilities/memory/allocator.adaptor/types.pass.cpp +++ b/test/utilities/memory/allocator.adaptor/types.pass.cpp @@ -65,7 +65,6 @@ int main() std::scoped_allocator_adaptor>::const_void_pointer, const void*>::value), ""); - static_assert((std::is_base_of< A2, std::scoped_allocator_adaptor, A1> @@ -99,5 +98,5 @@ int main() std::scoped_allocator_adaptor, A1>::const_void_pointer, const void*>::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/memory/allocator.tag/allocator_arg.pass.cpp b/test/utilities/memory/allocator.tag/allocator_arg.pass.cpp index fb0b9f69a..43331ab35 100644 --- a/test/utilities/memory/allocator.tag/allocator_arg.pass.cpp +++ b/test/utilities/memory/allocator.tag/allocator_arg.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // struct allocator_arg_t { }; // const allocator_arg_t allocator_arg = allocator_arg_t(); #include void test(std::allocator_arg_t) {} int main() { test(std::allocator_arg); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// struct allocator_arg_t { }; +// const allocator_arg_t allocator_arg = allocator_arg_t(); + +#include + +void test(std::allocator_arg_t) {} + +int main() +{ + test(std::allocator_arg); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/allocate.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/allocate.pass.cpp index c797b1020..ebbfa15d7 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/allocate.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/allocate.pass.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static pointer allocate(allocator_type& a, size_type n); // ... // }; #include #include template struct A { typedef T value_type; value_type* allocate(std::size_t n) { assert(n == 10); return (value_type*)0xDEADBEEF; } }; int main() { A a; assert(std::allocator_traits >::allocate(a, 10) == (int*)0xDEADBEEF); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// static pointer allocate(allocator_type& a, size_type n); +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + + value_type* allocate(std::size_t n) + { + assert(n == 10); + return (value_type*)0xDEADBEEF; + } +}; + +int main() +{ + A a; + assert(std::allocator_traits >::allocate(a, 10) == (int*)0xDEADBEEF); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/allocate_hint.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/allocate_hint.pass.cpp index 9847c2a60..527f51b1e 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/allocate_hint.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/allocate_hint.pass.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static pointer allocate(allocator_type& a, size_type n, const_void_pointer hint); // ... // }; #include #include template struct A { typedef T value_type; value_type* allocate(std::size_t n) { assert(n == 10); return (value_type*)0xDEADBEEF; } }; template struct B { typedef T value_type; value_type* allocate(std::size_t n) { assert(n == 12); return (value_type*)0xEEADBEEF; } value_type* allocate(std::size_t n, const void* p) { assert(n == 11); assert(p == 0); return (value_type*)0xFEADBEEF; } }; int main() { #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE A a; assert(std::allocator_traits >::allocate(a, 10, nullptr) == (int*)0xDEADBEEF); #endif B b; assert(std::allocator_traits >::allocate(b, 11, nullptr) == (int*)0xFEADBEEF); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// static pointer allocate(allocator_type& a, size_type n, const_void_pointer hint); +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + + value_type* allocate(std::size_t n) + { + assert(n == 10); + return (value_type*)0xDEADBEEF; + } +}; + +template +struct B +{ + typedef T value_type; + + value_type* allocate(std::size_t n) + { + assert(n == 12); + return (value_type*)0xEEADBEEF; + } + value_type* allocate(std::size_t n, const void* p) + { + assert(n == 11); + assert(p == 0); + return (value_type*)0xFEADBEEF; + } +}; + +int main() +{ +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + A a; + assert(std::allocator_traits >::allocate(a, 10, nullptr) == (int*)0xDEADBEEF); +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE + B b; + assert(std::allocator_traits >::allocate(b, 11, nullptr) == (int*)0xFEADBEEF); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/construct.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/construct.pass.cpp index 4dda58f8c..e2d510e1e 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/construct.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/construct.pass.cpp @@ -1 +1,143 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // template // static void construct(allocator_type& a, Ptr p, Args&&... args); // ... // }; #include #include #include #include template struct A { typedef T value_type; }; int b_construct = 0; template struct B { typedef T value_type; #ifndef _LIBCPP_HAS_NO_VARIADICS template void construct(U* p, Args&& ...args) { ++b_construct; ::new ((void*)p) U(std::forward(args)...); } #endif }; struct A0 { static int count; A0() {++count;} }; int A0::count = 0; struct A1 { static int count; A1(char c) { assert(c == 'c'); ++count; } }; int A1::count = 0; struct A2 { static int count; A2(char c, int i) { assert(c == 'd'); assert(i == 5); ++count; } }; int A2::count = 0; int main() { { A0::count = 0; A a; std::aligned_storage::type a0; assert(A0::count == 0); std::allocator_traits >::construct(a, (A0*)&a0); assert(A0::count == 1); } { A1::count = 0; A a; std::aligned_storage::type a1; assert(A1::count == 0); std::allocator_traits >::construct(a, (A1*)&a1, 'c'); assert(A1::count == 1); } { A2::count = 0; A a; std::aligned_storage::type a2; assert(A2::count == 0); std::allocator_traits >::construct(a, (A2*)&a2, 'd', 5); assert(A2::count == 1); } #ifndef _LIBCPP_HAS_NO_VARIADICS { A0::count = 0; b_construct = 0; B b; std::aligned_storage::type a0; assert(A0::count == 0); assert(b_construct == 0); std::allocator_traits >::construct(b, (A0*)&a0); assert(A0::count == 1); assert(b_construct == 1); } { A1::count = 0; b_construct = 0; B b; std::aligned_storage::type a1; assert(A1::count == 0); assert(b_construct == 0); std::allocator_traits >::construct(b, (A1*)&a1, 'c'); assert(A1::count == 1); assert(b_construct == 1); } { A2::count = 0; b_construct = 0; B b; std::aligned_storage::type a2; assert(A2::count == 0); assert(b_construct == 0); std::allocator_traits >::construct(b, (A2*)&a2, 'd', 5); assert(A2::count == 1); assert(b_construct == 1); } #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// template +// static void construct(allocator_type& a, Ptr p, Args&&... args); +// ... +// }; + +#include +#include +#include +#include + +template +struct A +{ + typedef T value_type; + +}; + +int b_construct = 0; + +template +struct B +{ + typedef T value_type; + +#ifndef _LIBCPP_HAS_NO_VARIADICS + template + void construct(U* p, Args&& ...args) + { + ++b_construct; + ::new ((void*)p) U(std::forward(args)...); + } +#endif // _LIBCPP_HAS_NO_VARIADICS +}; + +struct A0 +{ + static int count; + A0() {++count;} +}; + +int A0::count = 0; + +struct A1 +{ + static int count; + A1(char c) + { + assert(c == 'c'); + ++count; + } +}; + +int A1::count = 0; + +struct A2 +{ + static int count; + A2(char c, int i) + { + assert(c == 'd'); + assert(i == 5); + ++count; + } +}; + +int A2::count = 0; + +int main() +{ + { + A0::count = 0; + A a; + std::aligned_storage::type a0; + assert(A0::count == 0); + std::allocator_traits >::construct(a, (A0*)&a0); + assert(A0::count == 1); + } + { + A1::count = 0; + A a; + std::aligned_storage::type a1; + assert(A1::count == 0); + std::allocator_traits >::construct(a, (A1*)&a1, 'c'); + assert(A1::count == 1); + } + { + A2::count = 0; + A a; + std::aligned_storage::type a2; + assert(A2::count == 0); + std::allocator_traits >::construct(a, (A2*)&a2, 'd', 5); + assert(A2::count == 1); + } +#ifndef _LIBCPP_HAS_NO_VARIADICS + { + A0::count = 0; + b_construct = 0; + B b; + std::aligned_storage::type a0; + assert(A0::count == 0); + assert(b_construct == 0); + std::allocator_traits >::construct(b, (A0*)&a0); + assert(A0::count == 1); + assert(b_construct == 1); + } + { + A1::count = 0; + b_construct = 0; + B b; + std::aligned_storage::type a1; + assert(A1::count == 0); + assert(b_construct == 0); + std::allocator_traits >::construct(b, (A1*)&a1, 'c'); + assert(A1::count == 1); + assert(b_construct == 1); + } + { + A2::count = 0; + b_construct = 0; + B b; + std::aligned_storage::type a2; + assert(A2::count == 0); + assert(b_construct == 0); + std::allocator_traits >::construct(b, (A2*)&a2, 'd', 5); + assert(A2::count == 1); + assert(b_construct == 1); + } +#endif // _LIBCPP_HAS_NO_VARIADICS +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/deallocate.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/deallocate.pass.cpp index b4bd79a96..33ea63cc1 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/deallocate.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/deallocate.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static void deallocate(allocator_type& a, pointer p, size_type n); // ... // }; #include #include int called = 0; template struct A { typedef T value_type; void deallocate(value_type* p, std::size_t n) { assert(p == (value_type*)0xDEADBEEF); assert(n == 10); ++called; } }; int main() { A a; std::allocator_traits >::deallocate(a, (int*)0xDEADBEEF, 10); assert(called == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// static void deallocate(allocator_type& a, pointer p, size_type n); +// ... +// }; + +#include +#include + +int called = 0; + +template +struct A +{ + typedef T value_type; + + void deallocate(value_type* p, std::size_t n) + { + assert(p == (value_type*)0xDEADBEEF); + assert(n == 10); + ++called; + } +}; + +int main() +{ + A a; + std::allocator_traits >::deallocate(a, (int*)0xDEADBEEF, 10); + assert(called == 1); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/destroy.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/destroy.pass.cpp index 7996ea420..d9e8de55e 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/destroy.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/destroy.pass.cpp @@ -1 +1,80 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // template // static void destroy(allocator_type& a, Ptr p); // ... // }; #include #include #include #include template struct A { typedef T value_type; }; int b_destroy = 0; template struct B { typedef T value_type; template void destroy(U* p) { ++b_destroy; p->~U(); } }; struct A0 { static int count; ~A0() {++count;} }; int A0::count = 0; int main() { { A0::count = 0; A a; std::aligned_storage::type a0; std::allocator_traits >::construct(a, (A0*)&a0); assert(A0::count == 0); std::allocator_traits >::destroy(a, (A0*)&a0); assert(A0::count == 1); } #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE { A0::count = 0; b_destroy = 0; B b; std::aligned_storage::type a0; std::allocator_traits >::construct(b, (A0*)&a0); assert(A0::count == 0); assert(b_destroy == 0); std::allocator_traits >::destroy(b, (A0*)&a0); assert(A0::count == 1); assert(b_destroy == 1); } #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// template +// static void destroy(allocator_type& a, Ptr p); +// ... +// }; + +#include +#include +#include +#include + +template +struct A +{ + typedef T value_type; + +}; + +int b_destroy = 0; + +template +struct B +{ + typedef T value_type; + + template + void destroy(U* p) + { + ++b_destroy; + p->~U(); + } +}; + +struct A0 +{ + static int count; + ~A0() {++count;} +}; + +int A0::count = 0; + +int main() +{ + { + A0::count = 0; + A a; + std::aligned_storage::type a0; + std::allocator_traits >::construct(a, (A0*)&a0); + assert(A0::count == 0); + std::allocator_traits >::destroy(a, (A0*)&a0); + assert(A0::count == 1); + } +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + { + A0::count = 0; + b_destroy = 0; + B b; + std::aligned_storage::type a0; + std::allocator_traits >::construct(b, (A0*)&a0); + assert(A0::count == 0); + assert(b_destroy == 0); + std::allocator_traits >::destroy(b, (A0*)&a0); + assert(A0::count == 1); + assert(b_destroy == 1); + } +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/max_size.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/max_size.pass.cpp index c021ea8c1..1a03f7357 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/max_size.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/max_size.pass.cpp @@ -1 +1,64 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static size_type max_size(const allocator_type& a); // ... // }; #include #include #include #include template struct A { typedef T value_type; }; template struct B { typedef T value_type; size_t max_size() const { return 100; } }; int main() { #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE { A a; assert(std::allocator_traits >::max_size(a) == std::numeric_limits::max()); } { const A a = {}; assert(std::allocator_traits >::max_size(a) == std::numeric_limits::max()); } #endif { B b; assert(std::allocator_traits >::max_size(b) == 100); } { const B b = {}; assert(std::allocator_traits >::max_size(b) == 100); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// static size_type max_size(const allocator_type& a); +// ... +// }; + +#include +#include +#include +#include + +template +struct A +{ + typedef T value_type; + +}; + +template +struct B +{ + typedef T value_type; + + size_t max_size() const + { + return 100; + } +}; + +int main() +{ +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + { + A a; + assert(std::allocator_traits >::max_size(a) == + std::numeric_limits::max()); + } + { + const A a = {}; + assert(std::allocator_traits >::max_size(a) == + std::numeric_limits::max()); + } +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE + { + B b; + assert(std::allocator_traits >::max_size(b) == 100); + } + { + const B b = {}; + assert(std::allocator_traits >::max_size(b) == 100); + } +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction.pass.cpp index 8fe2365bc..358017bc5 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.members/select_on_container_copy_construction.pass.cpp @@ -1 +1,68 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static allocator_type // select_on_container_copy_construction(const allocator_type& a); // ... // }; #include #include #include #include template struct A { typedef T value_type; int id; explicit A(int i = 0) : id(i) {} }; template struct B { typedef T value_type; int id; explicit B(int i = 0) : id(i) {} B select_on_container_copy_construction() const { return B(100); } }; int main() { { A a; assert(std::allocator_traits >::select_on_container_copy_construction(a).id == 0); } { const A a(0); assert(std::allocator_traits >::select_on_container_copy_construction(a).id == 0); } #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE { B b; assert(std::allocator_traits >::select_on_container_copy_construction(b).id == 100); } { const B b(0); assert(std::allocator_traits >::select_on_container_copy_construction(b).id == 100); } #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// static allocator_type +// select_on_container_copy_construction(const allocator_type& a); +// ... +// }; + +#include +#include +#include +#include + +template +struct A +{ + typedef T value_type; + int id; + explicit A(int i = 0) : id(i) {} + +}; + +template +struct B +{ + typedef T value_type; + + int id; + explicit B(int i = 0) : id(i) {} + + B select_on_container_copy_construction() const + { + return B(100); + } +}; + +int main() +{ + { + A a; + assert(std::allocator_traits >::select_on_container_copy_construction(a).id == 0); + } + { + const A a(0); + assert(std::allocator_traits >::select_on_container_copy_construction(a).id == 0); + } +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + { + B b; + assert(std::allocator_traits >::select_on_container_copy_construction(b).id == 100); + } + { + const B b(0); + assert(std::allocator_traits >::select_on_container_copy_construction(b).id == 100); + } +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/const_pointer.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/const_pointer.pass.cpp index 680583ac3..5573fcbfb 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/const_pointer.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/const_pointer.pass.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::const_pointer // | pointer_traits::rebind // ... // }; #include #include template struct Ptr {}; template struct A { typedef T value_type; typedef Ptr pointer; }; template struct B { typedef T value_type; }; template struct CPtr {}; template struct C { typedef T value_type; typedef CPtr pointer; typedef CPtr const_pointer; }; int main() { static_assert((std::is_same >::const_pointer, Ptr >::value), ""); static_assert((std::is_same >::const_pointer, const char*>::value), ""); static_assert((std::is_same >::const_pointer, CPtr >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::const_pointer +// | pointer_traits::rebind +// ... +// }; + +#include +#include + +template +struct Ptr {}; + +template +struct A +{ + typedef T value_type; + typedef Ptr pointer; +}; + +template +struct B +{ + typedef T value_type; +}; + +template +struct CPtr {}; + +template +struct C +{ + typedef T value_type; + typedef CPtr pointer; + typedef CPtr const_pointer; +}; + +int main() +{ + static_assert((std::is_same >::const_pointer, Ptr >::value), ""); + static_assert((std::is_same >::const_pointer, const char*>::value), ""); + static_assert((std::is_same >::const_pointer, CPtr >::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer.pass.cpp index afa0cf29d..2c881016a 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/const_void_pointer.pass.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::const_void_pointer // | pointer_traits::rebind // const_void_pointer; // ... // }; #include #include template struct Ptr {}; template struct A { typedef T value_type; typedef Ptr pointer; }; template struct B { typedef T value_type; }; template struct CPtr {}; template struct C { typedef T value_type; typedef CPtr const_void_pointer; }; int main() { static_assert((std::is_same >::const_void_pointer, Ptr >::value), ""); static_assert((std::is_same >::const_void_pointer, const void*>::value), ""); static_assert((std::is_same >::const_void_pointer, CPtr >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::const_void_pointer +// | pointer_traits::rebind +// const_void_pointer; +// ... +// }; + +#include +#include + +template +struct Ptr {}; + +template +struct A +{ + typedef T value_type; + typedef Ptr pointer; +}; + +template +struct B +{ + typedef T value_type; +}; + +template +struct CPtr {}; + +template +struct C +{ + typedef T value_type; + typedef CPtr const_void_pointer; +}; + +int main() +{ + static_assert((std::is_same >::const_void_pointer, Ptr >::value), ""); + static_assert((std::is_same >::const_void_pointer, const void*>::value), ""); + static_assert((std::is_same >::const_void_pointer, CPtr >::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp index 7eab2fc5a..460f47804 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/difference_type.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::difference_type // | ptrdiff_t difference_type; // ... // }; #include #include template struct A { typedef T value_type; typedef short difference_type; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::difference_type, short>::value), ""); static_assert((std::is_same >::difference_type, std::ptrdiff_t>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::difference_type +// | ptrdiff_t difference_type; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + typedef short difference_type; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::difference_type, short>::value), ""); + static_assert((std::is_same >::difference_type, std::ptrdiff_t>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/pointer.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/pointer.pass.cpp index 6b479cee2..a41eabf82 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/pointer.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/pointer.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::pointer | value_type* pointer; // ... // }; #include #include template struct Ptr {}; template struct A { typedef T value_type; typedef Ptr pointer; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::pointer, Ptr >::value), ""); static_assert((std::is_same >::pointer, char*>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::pointer | value_type* pointer; +// ... +// }; + +#include +#include + +template +struct Ptr {}; + +template +struct A +{ + typedef T value_type; + typedef Ptr pointer; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::pointer, Ptr >::value), ""); + static_assert((std::is_same >::pointer, char*>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment.pass.cpp index 8340b5823..0e9a64c14 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_copy_assignment.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::propagate_on_container_copy_assignment // | false_type propagate_on_container_copy_assignment; // ... // }; #include #include template struct A { typedef T value_type; typedef std::true_type propagate_on_container_copy_assignment; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::propagate_on_container_copy_assignment, std::true_type>::value), ""); static_assert((std::is_same >::propagate_on_container_copy_assignment, std::false_type>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::propagate_on_container_copy_assignment +// | false_type propagate_on_container_copy_assignment; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + typedef std::true_type propagate_on_container_copy_assignment; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::propagate_on_container_copy_assignment, std::true_type>::value), ""); + static_assert((std::is_same >::propagate_on_container_copy_assignment, std::false_type>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment.pass.cpp index 827201625..d389f17e7 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_move_assignment.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::propagate_on_container_move_assignment // | false_type propagate_on_container_move_assignment; // ... // }; #include #include template struct A { typedef T value_type; typedef std::true_type propagate_on_container_move_assignment; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::propagate_on_container_move_assignment, std::true_type>::value), ""); static_assert((std::is_same >::propagate_on_container_move_assignment, std::false_type>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::propagate_on_container_move_assignment +// | false_type propagate_on_container_move_assignment; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + typedef std::true_type propagate_on_container_move_assignment; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::propagate_on_container_move_assignment, std::true_type>::value), ""); + static_assert((std::is_same >::propagate_on_container_move_assignment, std::false_type>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap.pass.cpp index 7c4d36afe..193dedde8 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/propagate_on_container_swap.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::propagate_on_container_swap // | false_type propagate_on_container_swap; // ... // }; #include #include template struct A { typedef T value_type; typedef std::true_type propagate_on_container_swap; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::propagate_on_container_swap, std::true_type>::value), ""); static_assert((std::is_same >::propagate_on_container_swap, std::false_type>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::propagate_on_container_swap +// | false_type propagate_on_container_swap; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + typedef std::true_type propagate_on_container_swap; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::propagate_on_container_swap, std::true_type>::value), ""); + static_assert((std::is_same >::propagate_on_container_swap, std::false_type>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc.pass.cpp index 443ce2697..82fcb71f1 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/rebind_alloc.pass.cpp @@ -1 +1,79 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // template using rebind_alloc = Alloc::rebind::other | Alloc; // ... // }; #include #include template struct ReboundA {}; template struct A { typedef T value_type; template struct rebind {typedef ReboundA other;}; }; template struct ReboundB {}; template struct B { typedef T value_type; template struct rebind {typedef ReboundB other;}; }; template struct C { typedef T value_type; }; template struct D { typedef T value_type; }; template struct E { typedef T value_type; template struct rebind {typedef ReboundA otter;}; }; int main() { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES static_assert((std::is_same >::rebind_alloc, ReboundA >::value), ""); static_assert((std::is_same >::rebind_alloc, ReboundB >::value), ""); static_assert((std::is_same >::rebind_alloc, C >::value), ""); static_assert((std::is_same >::rebind_alloc, D >::value), ""); static_assert((std::is_same >::rebind_alloc, E >::value), ""); #else static_assert((std::is_same >::rebind_alloc::other, ReboundA >::value), ""); static_assert((std::is_same >::rebind_alloc::other, ReboundB >::value), ""); static_assert((std::is_same >::rebind_alloc::other, C >::value), ""); static_assert((std::is_same >::rebind_alloc::other, D >::value), ""); static_assert((std::is_same >::rebind_alloc::other, E >::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// template using rebind_alloc = Alloc::rebind::other | Alloc; +// ... +// }; + +#include +#include + +template +struct ReboundA {}; + +template +struct A +{ + typedef T value_type; + + template struct rebind {typedef ReboundA other;}; +}; + +template +struct ReboundB {}; + +template +struct B +{ + typedef T value_type; + + template struct rebind {typedef ReboundB other;}; +}; + +template +struct C +{ + typedef T value_type; +}; + +template +struct D +{ + typedef T value_type; +}; + +template +struct E +{ + typedef T value_type; + + template struct rebind {typedef ReboundA otter;}; +}; + +int main() +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind_alloc, ReboundA >::value), ""); + static_assert((std::is_same >::rebind_alloc, ReboundB >::value), ""); + static_assert((std::is_same >::rebind_alloc, C >::value), ""); + static_assert((std::is_same >::rebind_alloc, D >::value), ""); + static_assert((std::is_same >::rebind_alloc, E >::value), ""); +#else // _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind_alloc::other, ReboundA >::value), ""); + static_assert((std::is_same >::rebind_alloc::other, ReboundB >::value), ""); + static_assert((std::is_same >::rebind_alloc::other, C >::value), ""); + static_assert((std::is_same >::rebind_alloc::other, D >::value), ""); + static_assert((std::is_same >::rebind_alloc::other, E >::value), ""); +#endif // _LIBCPP_HAS_NO_TEMPLATE_ALIASES +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp index 2eef5d435..148daacb5 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/size_type.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::size_type | size_t size_type; // ... // }; #include #include template struct A { typedef T value_type; typedef unsigned short size_type; }; template struct B { typedef T value_type; }; int main() { static_assert((std::is_same >::size_type, unsigned short>::value), ""); static_assert((std::is_same >::size_type, std::size_t>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::size_type | size_t size_type; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; + typedef unsigned short size_type; +}; + +template +struct B +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::size_type, unsigned short>::value), ""); + static_assert((std::is_same >::size_type, std::size_t>::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator.traits.types/void_pointer.pass.cpp b/test/utilities/memory/allocator.traits/allocator.traits.types/void_pointer.pass.cpp index e08dd388b..f5ed6a398 100644 --- a/test/utilities/memory/allocator.traits/allocator.traits.types/void_pointer.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator.traits.types/void_pointer.pass.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc::void_pointer // | pointer_traits::rebind // void_pointer; // ... // }; #include #include template struct Ptr {}; template struct A { typedef T value_type; typedef Ptr pointer; }; template struct B { typedef T value_type; }; template struct CPtr {}; template struct C { typedef T value_type; typedef CPtr void_pointer; }; int main() { static_assert((std::is_same >::void_pointer, Ptr >::value), ""); static_assert((std::is_same >::void_pointer, void*>::value), ""); static_assert((std::is_same >::void_pointer, CPtr >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc::void_pointer +// | pointer_traits::rebind +// void_pointer; +// ... +// }; + +#include +#include + +template +struct Ptr {}; + +template +struct A +{ + typedef T value_type; + typedef Ptr pointer; +}; + +template +struct B +{ + typedef T value_type; +}; + +template +struct CPtr {}; + +template +struct C +{ + typedef T value_type; + typedef CPtr void_pointer; +}; + +int main() +{ + static_assert((std::is_same >::void_pointer, Ptr >::value), ""); + static_assert((std::is_same >::void_pointer, void*>::value), ""); + static_assert((std::is_same >::void_pointer, CPtr >::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/allocator_type.pass.cpp b/test/utilities/memory/allocator.traits/allocator_type.pass.cpp index df2539a3a..3df8b01ff 100644 --- a/test/utilities/memory/allocator.traits/allocator_type.pass.cpp +++ b/test/utilities/memory/allocator.traits/allocator_type.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef Alloc allocator_type; // ... // }; #include #include template struct A { typedef T value_type; }; int main() { static_assert((std::is_same >::allocator_type, A >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef Alloc allocator_type; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::allocator_type, A >::value), ""); +} diff --git a/test/utilities/memory/allocator.traits/rebind_traits.pass.cpp b/test/utilities/memory/allocator.traits/rebind_traits.pass.cpp index 6a4dd13df..8e99e7f92 100644 --- a/test/utilities/memory/allocator.traits/rebind_traits.pass.cpp +++ b/test/utilities/memory/allocator.traits/rebind_traits.pass.cpp @@ -1 +1,79 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // template using rebind_traits = allocator_traits>; // ... // }; #include #include template struct ReboundA {}; template struct A { typedef T value_type; template struct rebind {typedef ReboundA other;}; }; template struct ReboundB {}; template struct B { typedef T value_type; template struct rebind {typedef ReboundB other;}; }; template struct C { typedef T value_type; }; template struct D { typedef T value_type; }; template struct E { typedef T value_type; template struct rebind {typedef ReboundA otter;}; }; int main() { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); #else static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// template using rebind_traits = allocator_traits>; +// ... +// }; + +#include +#include + +template +struct ReboundA {}; + +template +struct A +{ + typedef T value_type; + + template struct rebind {typedef ReboundA other;}; +}; + +template +struct ReboundB {}; + +template +struct B +{ + typedef T value_type; + + template struct rebind {typedef ReboundB other;}; +}; + +template +struct C +{ + typedef T value_type; +}; + +template +struct D +{ + typedef T value_type; +}; + +template +struct E +{ + typedef T value_type; + + template struct rebind {typedef ReboundA otter;}; +}; + +int main() +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits, std::allocator_traits > >::value), ""); +#else // _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); + static_assert((std::is_same >::rebind_traits::other, std::allocator_traits > >::value), ""); +#endif // _LIBCPP_HAS_NO_TEMPLATE_ALIASES +} diff --git a/test/utilities/memory/allocator.traits/value_type.pass.cpp b/test/utilities/memory/allocator.traits/value_type.pass.cpp index 200150884..b91467faf 100644 --- a/test/utilities/memory/allocator.traits/value_type.pass.cpp +++ b/test/utilities/memory/allocator.traits/value_type.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // typedef typename Alloc::value_type value_type; // ... // }; #include #include template struct A { typedef T value_type; }; int main() { static_assert((std::is_same >::value_type, char>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct allocator_traits +// { +// typedef typename Alloc::value_type value_type; +// ... +// }; + +#include +#include + +template +struct A +{ + typedef T value_type; +}; + +int main() +{ + static_assert((std::is_same >::value_type, char>::value), ""); +} diff --git a/test/utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere.pass.cpp b/test/utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere.pass.cpp +++ b/test/utilities/memory/allocator.uses/allocator.uses.construction/tested_elsewhere.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator.pass.cpp b/test/utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator.pass.cpp index 23aa45e31..99167b71b 100644 --- a/test/utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator.pass.cpp +++ b/test/utilities/memory/allocator.uses/allocator.uses.trait/uses_allocator.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template struct uses_allocator; #include #include struct A { }; struct B { typedef int allocator_type; }; int main() { static_assert((!std::uses_allocator >::value), ""); static_assert(( std::uses_allocator, std::allocator >::value), ""); static_assert((!std::uses_allocator >::value), ""); static_assert((!std::uses_allocator >::value), ""); static_assert(( std::uses_allocator::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template struct uses_allocator; + +#include +#include + +struct A +{ +}; + +struct B +{ + typedef int allocator_type; +}; + +int main() +{ + static_assert((!std::uses_allocator >::value), ""); + static_assert(( std::uses_allocator, std::allocator >::value), ""); + static_assert((!std::uses_allocator >::value), ""); + static_assert((!std::uses_allocator >::value), ""); + static_assert(( std::uses_allocator::value), ""); +} diff --git a/test/utilities/memory/allocator.uses/nothing_to_do.pass.cpp b/test/utilities/memory/allocator.uses/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/allocator.uses/nothing_to_do.pass.cpp +++ b/test/utilities/memory/allocator.uses/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/c.malloc/nothing_to_do.pass.cpp b/test/utilities/memory/c.malloc/nothing_to_do.pass.cpp index 27846cf94..a98f3353e 100644 --- a/test/utilities/memory/c.malloc/nothing_to_do.pass.cpp +++ b/test/utilities/memory/c.malloc/nothing_to_do.pass.cpp @@ -1 +1,14 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // and are already tested elsewhere int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// and are already tested elsewhere + +int main() +{ +} diff --git a/test/utilities/memory/default.allocator/allocator.globals/eq.pass.cpp b/test/utilities/memory/default.allocator/allocator.globals/eq.pass.cpp index 49d39da40..6712a8d0d 100644 --- a/test/utilities/memory/default.allocator/allocator.globals/eq.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator.globals/eq.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // allocator: // template // bool // operator==(const allocator&, const allocator&) throw(); // // template // bool // operator!=(const allocator&, const allocator&) throw(); #include #include int main() { std::allocator a1; std::allocator a2; assert(a1 == a2); assert(!(a1 != a2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// allocator: + +// template +// bool +// operator==(const allocator&, const allocator&) throw(); +// +// template +// bool +// operator!=(const allocator&, const allocator&) throw(); + +#include +#include + +int main() +{ + std::allocator a1; + std::allocator a2; + assert(a1 == a2); + assert(!(a1 != a2)); +} diff --git a/test/utilities/memory/default.allocator/allocator.members/address.pass.cpp b/test/utilities/memory/default.allocator/allocator.members/address.pass.cpp index c14607f6c..5cb4f9501 100644 --- a/test/utilities/memory/default.allocator/allocator.members/address.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator.members/address.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // allocator: // pointer address(reference x) const; // const_pointer address(const_reference x) const; #include #include template void test_address() { T* tp = new T(); const T* ctp = tp; const std::allocator a; assert(a.address(*tp) == tp); assert(a.address(*ctp) == tp); delete tp; } struct A { void operator&() const {} }; int main() { test_address(); test_address(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// allocator: +// pointer address(reference x) const; +// const_pointer address(const_reference x) const; + +#include +#include + +template +void test_address() +{ + T* tp = new T(); + const T* ctp = tp; + const std::allocator a; + assert(a.address(*tp) == tp); + assert(a.address(*ctp) == tp); + delete tp; +} + +struct A +{ + void operator&() const {} +}; + +int main() +{ + test_address(); + test_address(); +} diff --git a/test/utilities/memory/default.allocator/allocator.members/allocate.pass.cpp b/test/utilities/memory/default.allocator/allocator.members/allocate.pass.cpp index 161d3835b..84786a813 100644 --- a/test/utilities/memory/default.allocator/allocator.members/allocate.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator.members/allocate.pass.cpp @@ -1 +1,63 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // allocator: // pointer allocate(size_type n, allocator::const_pointer hint=0); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; assert(s == 3 * sizeof(int)); return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } int A_constructed = 0; struct A { int data; A() {++A_constructed;} A(const A&) {++A_constructed;} ~A() {--A_constructed;} }; int main() { std::allocator a; assert(new_called == 0); assert(A_constructed == 0); A* ap = a.allocate(3); assert(new_called == 1); assert(A_constructed == 0); a.deallocate(ap, 3); assert(new_called == 0); assert(A_constructed == 0); A* ap2 = a.allocate(3, (const void*)5); assert(new_called == 1); assert(A_constructed == 0); a.deallocate(ap2, 3); assert(new_called == 0); assert(A_constructed == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// allocator: +// pointer allocate(size_type n, allocator::const_pointer hint=0); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + assert(s == 3 * sizeof(int)); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +int A_constructed = 0; + +struct A +{ + int data; + A() {++A_constructed;} + A(const A&) {++A_constructed;} + ~A() {--A_constructed;} +}; + +int main() +{ + std::allocator a; + assert(new_called == 0); + assert(A_constructed == 0); + A* ap = a.allocate(3); + assert(new_called == 1); + assert(A_constructed == 0); + a.deallocate(ap, 3); + assert(new_called == 0); + assert(A_constructed == 0); + + A* ap2 = a.allocate(3, (const void*)5); + assert(new_called == 1); + assert(A_constructed == 0); + a.deallocate(ap2, 3); + assert(new_called == 0); + assert(A_constructed == 0); +} diff --git a/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp b/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp index bf6e20ab1..c0bea0379 100644 --- a/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator.members/construct.pass.cpp @@ -1 +1,153 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // allocator: // template void construct(pointer p, Args&&... args); #include #include #include #include int new_called = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_called; assert(s == 3 * sizeof(int)); return std::malloc(s); } void operator delete(void* p) throw() { --new_called; std::free(p); } int A_constructed = 0; struct A { int data; A() {++A_constructed;} A(const A&) {++A_constructed;} explicit A(int) {++A_constructed;} A(int, int*) {++A_constructed;} ~A() {--A_constructed;} }; int move_only_constructed = 0; class move_only { int data; #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); #else move_only(move_only&); move_only& operator=(move_only&); #endif public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {++move_only_constructed;} move_only& operator=(move_only&&) {} #else operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {++move_only_constructed;} #endif move_only() {++move_only_constructed;} ~move_only() {--move_only_constructed;} }; int main() { { std::allocator a; assert(new_called == 0); assert(A_constructed == 0); A* ap = a.allocate(3); assert(new_called == 1); assert(A_constructed == 0); a.construct(ap); assert(new_called == 1); assert(A_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(A_constructed == 0); a.construct(ap, A()); assert(new_called == 1); assert(A_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(A_constructed == 0); a.construct(ap, 5); assert(new_called == 1); assert(A_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(A_constructed == 0); a.construct(ap, 5, (int*)0); assert(new_called == 1); assert(A_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(A_constructed == 0); a.deallocate(ap, 3); assert(new_called == 0); assert(A_constructed == 0); } { std::allocator a; assert(new_called == 0); assert(move_only_constructed == 0); move_only* ap = a.allocate(3); assert(new_called == 1); assert(move_only_constructed == 0); a.construct(ap); assert(new_called == 1); assert(move_only_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(move_only_constructed == 0); a.construct(ap, move_only()); assert(new_called == 1); assert(move_only_constructed == 1); a.destroy(ap); assert(new_called == 1); assert(move_only_constructed == 0); a.deallocate(ap, 3); assert(new_called == 0); assert(move_only_constructed == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// allocator: +// template void construct(pointer p, Args&&... args); + +#include +#include +#include +#include + +int new_called = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_called; + assert(s == 3 * sizeof(int)); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + --new_called; + std::free(p); +} + +int A_constructed = 0; + +struct A +{ + int data; + A() {++A_constructed;} + + A(const A&) {++A_constructed;} + + explicit A(int) {++A_constructed;} + A(int, int*) {++A_constructed;} + + ~A() {--A_constructed;} +}; + +int move_only_constructed = 0; + +class move_only +{ + int data; +#ifdef _LIBCPP_MOVE + move_only(const move_only&); + move_only& operator=(const move_only&); +#else // _LIBCPP_MOVE + move_only(move_only&); + move_only& operator=(move_only&); +#endif // _LIBCPP_MOVE + +public: + +#ifdef _LIBCPP_MOVE + move_only(move_only&&) {++move_only_constructed;} + move_only& operator=(move_only&&) {} +#else // _LIBCPP_MOVE + operator std::__rv () {return std::__rv(*this);} + move_only(std::__rv) {++move_only_constructed;} +#endif // _LIBCPP_MOVE + + move_only() {++move_only_constructed;} + ~move_only() {--move_only_constructed;} +}; + +int main() +{ + { + std::allocator a; + assert(new_called == 0); + assert(A_constructed == 0); + + A* ap = a.allocate(3); + assert(new_called == 1); + assert(A_constructed == 0); + + a.construct(ap); + assert(new_called == 1); + assert(A_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(A_constructed == 0); + + a.construct(ap, A()); + assert(new_called == 1); + assert(A_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(A_constructed == 0); + + a.construct(ap, 5); + assert(new_called == 1); + assert(A_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(A_constructed == 0); + + a.construct(ap, 5, (int*)0); + assert(new_called == 1); + assert(A_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(A_constructed == 0); + + a.deallocate(ap, 3); + assert(new_called == 0); + assert(A_constructed == 0); + } + { + std::allocator a; + assert(new_called == 0); + assert(move_only_constructed == 0); + + move_only* ap = a.allocate(3); + assert(new_called == 1); + assert(move_only_constructed == 0); + + a.construct(ap); + assert(new_called == 1); + assert(move_only_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(move_only_constructed == 0); + + a.construct(ap, move_only()); + assert(new_called == 1); + assert(move_only_constructed == 1); + + a.destroy(ap); + assert(new_called == 1); + assert(move_only_constructed == 0); + + a.deallocate(ap, 3); + assert(new_called == 0); + assert(move_only_constructed == 0); + } +} diff --git a/test/utilities/memory/default.allocator/allocator.members/max_size.pass.cpp b/test/utilities/memory/default.allocator/allocator.members/max_size.pass.cpp index eb596f42f..7e958ee0e 100644 --- a/test/utilities/memory/default.allocator/allocator.members/max_size.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator.members/max_size.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // allocator: // size_type max_size() const throw(); #include #include #include #include int new_called = 0; int main() { const std::allocator a; std::size_t M = a.max_size() * sizeof(int); assert(M > 0xFFFF && M <= std::numeric_limits::max()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// allocator: +// size_type max_size() const throw(); + +#include +#include +#include +#include + +int new_called = 0; + +int main() +{ + const std::allocator a; + std::size_t M = a.max_size() * sizeof(int); + assert(M > 0xFFFF && M <= std::numeric_limits::max()); +} diff --git a/test/utilities/memory/default.allocator/allocator_types.pass.cpp b/test/utilities/memory/default.allocator/allocator_types.pass.cpp index 7ee46ff06..b62a5ef2c 100644 --- a/test/utilities/memory/default.allocator/allocator_types.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator_types.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // check nested types: // template // class allocator // { // public: // typedef size_t size_type; // typedef ptrdiff_t difference_type; // typedef T* pointer; // typedef const T* const_pointer; // typedef typename add_lvalue_reference::type reference; // typedef typename add_lvalue_reference::type const_reference; // typedef T value_type; // // template struct rebind {typedef allocator other;}; // ... // }; #include #include #include int main() { static_assert((std::is_same::size_type, std::size_t>::value), ""); static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); static_assert((std::is_same::pointer, char*>::value), ""); static_assert((std::is_same::const_pointer, const char*>::value), ""); static_assert((std::is_same::value_type, char>::value), ""); static_assert((std::is_same::reference, char&>::value), ""); static_assert((std::is_same::const_reference, const char&>::value), ""); static_assert((std::is_same::rebind::other, std::allocator >::value), ""); std::allocator a; std::allocator a2 = a; a2 = a; std::allocator a3 = a2; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// check nested types: + +// template +// class allocator +// { +// public: +// typedef size_t size_type; +// typedef ptrdiff_t difference_type; +// typedef T* pointer; +// typedef const T* const_pointer; +// typedef typename add_lvalue_reference::type reference; +// typedef typename add_lvalue_reference::type const_reference; +// typedef T value_type; +// +// template struct rebind {typedef allocator other;}; +// ... +// }; + +#include +#include +#include + +int main() +{ + static_assert((std::is_same::size_type, std::size_t>::value), ""); + static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); + static_assert((std::is_same::pointer, char*>::value), ""); + static_assert((std::is_same::const_pointer, const char*>::value), ""); + static_assert((std::is_same::value_type, char>::value), ""); + static_assert((std::is_same::reference, char&>::value), ""); + static_assert((std::is_same::const_reference, const char&>::value), ""); + static_assert((std::is_same::rebind::other, + std::allocator >::value), ""); + std::allocator a; + std::allocator a2 = a; + a2 = a; + std::allocator a3 = a2; +} diff --git a/test/utilities/memory/default.allocator/allocator_void.pass.cpp b/test/utilities/memory/default.allocator/allocator_void.pass.cpp index 79b0690f3..f0af8879f 100644 --- a/test/utilities/memory/default.allocator/allocator_void.pass.cpp +++ b/test/utilities/memory/default.allocator/allocator_void.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template <> // class allocator // { // public: // typedef void* pointer; // typedef const void* const_pointer; // typedef void value_type; // // template struct rebind {typedef allocator<_Up> other;}; // }; #include #include int main() { static_assert((std::is_same::pointer, void*>::value), ""); static_assert((std::is_same::const_pointer, const void*>::value), ""); static_assert((std::is_same::value_type, void>::value), ""); static_assert((std::is_same::rebind::other, std::allocator >::value), ""); std::allocator a; std::allocator a2 = a; a2 = a; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template <> +// class allocator +// { +// public: +// typedef void* pointer; +// typedef const void* const_pointer; +// typedef void value_type; +// +// template struct rebind {typedef allocator<_Up> other;}; +// }; + +#include +#include + +int main() +{ + static_assert((std::is_same::pointer, void*>::value), ""); + static_assert((std::is_same::const_pointer, const void*>::value), ""); + static_assert((std::is_same::value_type, void>::value), ""); + static_assert((std::is_same::rebind::other, + std::allocator >::value), ""); + std::allocator a; + std::allocator a2 = a; + a2 = a; +} diff --git a/test/utilities/memory/pointer.traits/difference_type.pass.cpp b/test/utilities/memory/pointer.traits/difference_type.pass.cpp index f28e42f28..820b75f64 100644 --- a/test/utilities/memory/pointer.traits/difference_type.pass.cpp +++ b/test/utilities/memory/pointer.traits/difference_type.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // typedef ptrdiff_t difference_type; // ... // }; #include #include int main() { static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// typedef ptrdiff_t difference_type; +// ... +// }; + +#include +#include + +int main() +{ + static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); +} diff --git a/test/utilities/memory/pointer.traits/element_type.pass.cpp b/test/utilities/memory/pointer.traits/element_type.pass.cpp index e944dc8ff..cf1ddd865 100644 --- a/test/utilities/memory/pointer.traits/element_type.pass.cpp +++ b/test/utilities/memory/pointer.traits/element_type.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // typedef T element_type; // ... // }; #include #include int main() { static_assert((std::is_same::element_type, const short>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// typedef T element_type; +// ... +// }; + +#include +#include + +int main() +{ + static_assert((std::is_same::element_type, const short>::value), ""); +} diff --git a/test/utilities/memory/pointer.traits/pointer.pass.cpp b/test/utilities/memory/pointer.traits/pointer.pass.cpp index 34fa69454..13d15b53d 100644 --- a/test/utilities/memory/pointer.traits/pointer.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // typedef Ptr pointer; // ... // }; #include #include struct A { typedef short element_type; typedef char difference_type; }; int main() { static_assert((std::is_same::pointer, A>::value), ""); static_assert((std::is_same::pointer, int*>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// typedef Ptr pointer; +// ... +// }; + +#include +#include + +struct A +{ + typedef short element_type; + typedef char difference_type; +}; + +int main() +{ + static_assert((std::is_same::pointer, A>::value), ""); + static_assert((std::is_same::pointer, int*>::value), ""); +} diff --git a/test/utilities/memory/pointer.traits/pointer.traits.functions/pointer_to.pass.cpp b/test/utilities/memory/pointer.traits/pointer.traits.functions/pointer_to.pass.cpp index 8ed66297f..10cdb8970 100644 --- a/test/utilities/memory/pointer.traits/pointer.traits.functions/pointer_to.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer.traits.functions/pointer_to.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // static pointer pointer_to(
); // ... // }; #include #include template struct A { private: struct nat {}; public: typedef T element_type; element_type* t_; A(element_type* t) : t_(t) {} static A pointer_to(typename std::conditional::value, nat, element_type>::type& et) {return A(&et);} }; int main() { { int i = 0; A a = std::pointer_traits >::pointer_to(i); assert(a.t_ = &i); } { (std::pointer_traits >::element_type)0; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// static pointer pointer_to(
); +// ... +// }; + +#include +#include + +template +struct A +{ +private: + struct nat {}; +public: + typedef T element_type; + element_type* t_; + + A(element_type* t) : t_(t) {} + + static A pointer_to(typename std::conditional::value, + nat, element_type>::type& et) + {return A(&et);} +}; + +int main() +{ + { + int i = 0; + A a = std::pointer_traits >::pointer_to(i); + assert(a.t_ = &i); + } + { + (std::pointer_traits >::element_type)0; + } +} diff --git a/test/utilities/memory/pointer.traits/pointer.traits.types/difference_type.pass.cpp b/test/utilities/memory/pointer.traits/pointer.traits.types/difference_type.pass.cpp index e2a78d1dd..49439dd37 100644 --- a/test/utilities/memory/pointer.traits/pointer.traits.types/difference_type.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer.traits.types/difference_type.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // typedef
difference_type; // ... // }; #include #include struct A { typedef short element_type; typedef char difference_type; }; struct B { typedef short element_type; }; template struct C {}; template struct D { typedef char difference_type; }; int main() { static_assert((std::is_same::difference_type, char>::value), ""); static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); static_assert((std::is_same >::difference_type, std::ptrdiff_t>::value), ""); static_assert((std::is_same >::difference_type, char>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// typedef
difference_type; +// ... +// }; + +#include +#include + +struct A +{ + typedef short element_type; + typedef char difference_type; +}; + +struct B +{ + typedef short element_type; +}; + +template +struct C {}; + +template +struct D +{ + typedef char difference_type; +}; + +int main() +{ + static_assert((std::is_same::difference_type, char>::value), ""); + static_assert((std::is_same::difference_type, std::ptrdiff_t>::value), ""); + static_assert((std::is_same >::difference_type, std::ptrdiff_t>::value), ""); + static_assert((std::is_same >::difference_type, char>::value), ""); +} diff --git a/test/utilities/memory/pointer.traits/pointer.traits.types/element_type.pass.cpp b/test/utilities/memory/pointer.traits/pointer.traits.types/element_type.pass.cpp index ca464370c..eb48fa26d 100644 --- a/test/utilities/memory/pointer.traits/pointer.traits.types/element_type.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer.traits.types/element_type.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // typedef
element_type; // ... // }; #include #include struct A { typedef char element_type; }; template struct B { typedef char element_type; }; template struct C { }; template struct D { }; int main() { static_assert((std::is_same::element_type, char>::value), ""); static_assert((std::is_same >::element_type, char>::value), ""); static_assert((std::is_same >::element_type, int>::value), ""); static_assert((std::is_same >::element_type, double>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// typedef
element_type; +// ... +// }; + +#include +#include + +struct A +{ + typedef char element_type; +}; + +template +struct B +{ + typedef char element_type; +}; + +template +struct C +{ +}; + +template +struct D +{ +}; + +int main() +{ + static_assert((std::is_same::element_type, char>::value), ""); + static_assert((std::is_same >::element_type, char>::value), ""); + static_assert((std::is_same >::element_type, int>::value), ""); + static_assert((std::is_same >::element_type, double>::value), ""); +} diff --git a/test/utilities/memory/pointer.traits/pointer.traits.types/rebind.pass.cpp b/test/utilities/memory/pointer.traits/pointer.traits.types/rebind.pass.cpp index ca8a3a276..4095754c2 100644 --- a/test/utilities/memory/pointer.traits/pointer.traits.types/rebind.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer.traits.types/rebind.pass.cpp @@ -1 +1,69 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // template using rebind =
; // ... // }; #include #include template struct A { }; template struct B1 {}; template struct B { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES template using rebind = B1; #else template struct rebind {typedef B1 other;}; #endif }; template struct C { }; template struct D1 {}; template struct D { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES template using rebind = D1; #else template struct rebind {typedef D1 other;}; #endif }; int main() { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES static_assert((std::is_same >::rebind, A >::value), ""); static_assert((std::is_same >::rebind, B1 >::value), ""); static_assert((std::is_same >::rebind, C >::value), ""); static_assert((std::is_same >::rebind, D1 >::value), ""); #else static_assert((std::is_same >::rebind::other, A >::value), ""); static_assert((std::is_same >::rebind::other, B1 >::value), ""); static_assert((std::is_same >::rebind::other, C >::value), ""); static_assert((std::is_same >::rebind::other, D1 >::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// template using rebind =
; +// ... +// }; + +#include +#include + +template +struct A +{ +}; + +template struct B1 {}; + +template +struct B +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + template using rebind = B1; +#else + template struct rebind {typedef B1 other;}; +#endif +}; + +template +struct C +{ +}; + +template struct D1 {}; + +template +struct D +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + template using rebind = D1; +#else + template struct rebind {typedef D1 other;}; +#endif +}; + +int main() +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind, A >::value), ""); + static_assert((std::is_same >::rebind, B1 >::value), ""); + static_assert((std::is_same >::rebind, C >::value), ""); + static_assert((std::is_same >::rebind, D1 >::value), ""); +#else // _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same >::rebind::other, A >::value), ""); + static_assert((std::is_same >::rebind::other, B1 >::value), ""); + static_assert((std::is_same >::rebind::other, C >::value), ""); + static_assert((std::is_same >::rebind::other, D1 >::value), ""); +#endif // _LIBCPP_HAS_NO_TEMPLATE_ALIASES +} diff --git a/test/utilities/memory/pointer.traits/pointer_to.pass.cpp b/test/utilities/memory/pointer.traits/pointer_to.pass.cpp index 42fd9300b..557bf36b9 100644 --- a/test/utilities/memory/pointer.traits/pointer_to.pass.cpp +++ b/test/utilities/memory/pointer.traits/pointer_to.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // static pointer pointer_to(
); // ... // }; #include #include int main() { { int i = 0; int* a = std::pointer_traits::pointer_to(i); assert(a = &i); } { (std::pointer_traits::element_type)0; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// static pointer pointer_to(
); +// ... +// }; + +#include +#include + +int main() +{ + { + int i = 0; + int* a = std::pointer_traits::pointer_to(i); + assert(a = &i); + } + { + (std::pointer_traits::element_type)0; + } +} diff --git a/test/utilities/memory/pointer.traits/rebind.pass.cpp b/test/utilities/memory/pointer.traits/rebind.pass.cpp index f63c03521..d3a4d794f 100644 --- a/test/utilities/memory/pointer.traits/rebind.pass.cpp +++ b/test/utilities/memory/pointer.traits/rebind.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct pointer_traits // { // template using rebind = U*; // ... // }; #include #include int main() { #ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES static_assert((std::is_same::rebind, double*>::value), ""); #else static_assert((std::is_same::rebind::other, double*>::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct pointer_traits +// { +// template using rebind = U*; +// ... +// }; + +#include +#include + +int main() +{ +#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES + static_assert((std::is_same::rebind, double*>::value), ""); +#else + static_assert((std::is_same::rebind::other, double*>::value), ""); +#endif +} diff --git a/test/utilities/memory/specialized.algorithms/nothing_to_do.pass.cpp b/test/utilities/memory/specialized.algorithms/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/specialized.algorithms/nothing_to_do.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/specialized.algorithms/specialized.addressof/addressof.pass.cpp b/test/utilities/memory/specialized.algorithms/specialized.addressof/addressof.pass.cpp index c4b14d316..6f1b01163 100644 --- a/test/utilities/memory/specialized.algorithms/specialized.addressof/addressof.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/specialized.addressof/addressof.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template T* addressof(T& r); #include #include struct A { void operator&() const {} }; int main() { int i; double d; assert(std::addressof(i) == &i); assert(std::addressof(d) == &d); A* tp = new A; const A* ctp = tp; assert(std::addressof(*tp) == tp); assert(std::addressof(*ctp) == tp); delete tp; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template T* addressof(T& r); + +#include +#include + +struct A +{ + void operator&() const {} +}; + +int main() +{ + int i; + double d; + assert(std::addressof(i) == &i); + assert(std::addressof(d) == &d); + A* tp = new A; + const A* ctp = tp; + assert(std::addressof(*tp) == tp); + assert(std::addressof(*ctp) == tp); + delete tp; +} diff --git a/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy.pass.cpp b/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy.pass.cpp index d59238655..401a39485 100644 --- a/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy.pass.cpp @@ -1 +1,51 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // ForwardIterator // uninitialized_copy(InputIterator first, InputIterator last, // ForwardIterator result); #include #include struct B { static int count_; int data_; explicit B() : data_(1) {} B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} ~B() {data_ = 0;} }; int B::count_ = 0; int main() { const int N = 5; char pool[sizeof(B)*N] = {0}; B* bp = (B*)pool; B b[N]; try { std::uninitialized_copy(b, b+N, bp); assert(false); } catch (...) { for (int i = 0; i < N; ++i) assert(bp[i].data_ == 0); } B::count_ = 0; std::uninitialized_copy(b, b+2, bp); for (int i = 0; i < 2; ++i) assert(bp[i].data_ == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// ForwardIterator +// uninitialized_copy(InputIterator first, InputIterator last, +// ForwardIterator result); + +#include +#include + +struct B +{ + static int count_; + int data_; + explicit B() : data_(1) {} + B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} + ~B() {data_ = 0;} +}; + +int B::count_ = 0; + +int main() +{ + const int N = 5; + char pool[sizeof(B)*N] = {0}; + B* bp = (B*)pool; + B b[N]; + try + { + std::uninitialized_copy(b, b+N, bp); + assert(false); + } + catch (...) + { + for (int i = 0; i < N; ++i) + assert(bp[i].data_ == 0); + } + B::count_ = 0; + std::uninitialized_copy(b, b+2, bp); + for (int i = 0; i < 2; ++i) + assert(bp[i].data_ == 1); +} diff --git a/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n.pass.cpp b/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n.pass.cpp index 0971c61b4..8d51e7551 100644 --- a/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/uninitialized.copy/uninitialized_copy_n.pass.cpp @@ -1 +1,51 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // ForwardIterator // uninitialized_copy_n(InputIterator first, Size n, // ForwardIterator result); #include #include struct B { static int count_; int data_; explicit B() : data_(1) {} B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} ~B() {data_ = 0;} }; int B::count_ = 0; int main() { const int N = 5; char pool[sizeof(B)*N] = {0}; B* bp = (B*)pool; B b[N]; try { std::uninitialized_copy_n(b, 5, bp); assert(false); } catch (...) { for (int i = 0; i < N; ++i) assert(bp[i].data_ == 0); } B::count_ = 0; std::uninitialized_copy_n(b, 2, bp); for (int i = 0; i < 2; ++i) assert(bp[i].data_ == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// ForwardIterator +// uninitialized_copy_n(InputIterator first, Size n, +// ForwardIterator result); + +#include +#include + +struct B +{ + static int count_; + int data_; + explicit B() : data_(1) {} + B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} + ~B() {data_ = 0;} +}; + +int B::count_ = 0; + +int main() +{ + const int N = 5; + char pool[sizeof(B)*N] = {0}; + B* bp = (B*)pool; + B b[N]; + try + { + std::uninitialized_copy_n(b, 5, bp); + assert(false); + } + catch (...) + { + for (int i = 0; i < N; ++i) + assert(bp[i].data_ == 0); + } + B::count_ = 0; + std::uninitialized_copy_n(b, 2, bp); + for (int i = 0; i < 2; ++i) + assert(bp[i].data_ == 1); +} diff --git a/test/utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n.pass.cpp b/test/utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n.pass.cpp index 15518e00f..1f48d886e 100644 --- a/test/utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/uninitialized.fill.n/uninitialized_fill_n.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // void // uninitialized_fill_n(ForwardIterator first, Size n, const T& x); #include #include struct B { static int count_; int data_; explicit B() : data_(1) {} B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} ~B() {data_ = 0;} }; int B::count_ = 0; int main() { const int N = 5; char pool[sizeof(B)*N] = {0}; B* bp = (B*)pool; try { std::uninitialized_fill_n(bp, 5, B()); assert(false); } catch (...) { for (int i = 0; i < N; ++i) assert(bp[i].data_ == 0); } B::count_ = 0; std::uninitialized_fill_n(bp, 2, B()); for (int i = 0; i < 2; ++i) assert(bp[i].data_ == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// void +// uninitialized_fill_n(ForwardIterator first, Size n, const T& x); + +#include +#include + +struct B +{ + static int count_; + int data_; + explicit B() : data_(1) {} + B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} + ~B() {data_ = 0;} +}; + +int B::count_ = 0; + +int main() +{ + const int N = 5; + char pool[sizeof(B)*N] = {0}; + B* bp = (B*)pool; + try + { + std::uninitialized_fill_n(bp, 5, B()); + assert(false); + } + catch (...) + { + for (int i = 0; i < N; ++i) + assert(bp[i].data_ == 0); + } + B::count_ = 0; + std::uninitialized_fill_n(bp, 2, B()); + for (int i = 0; i < 2; ++i) + assert(bp[i].data_ == 1); +} diff --git a/test/utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill.pass.cpp b/test/utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill.pass.cpp index eaaa6ca81..83d2d2577 100644 --- a/test/utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill.pass.cpp +++ b/test/utilities/memory/specialized.algorithms/uninitialized.fill/uninitialized_fill.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // void // uninitialized_fill(ForwardIterator first, ForwardIterator last, // const T& x); #include #include struct B { static int count_; int data_; explicit B() : data_(1) {} B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} ~B() {data_ = 0;} }; int B::count_ = 0; int main() { const int N = 5; char pool[sizeof(B)*N] = {0}; B* bp = (B*)pool; try { std::uninitialized_fill(bp, bp+N, B()); assert(false); } catch (...) { for (int i = 0; i < N; ++i) assert(bp[i].data_ == 0); } B::count_ = 0; std::uninitialized_fill(bp, bp+2, B()); for (int i = 0; i < 2; ++i) assert(bp[i].data_ == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// void +// uninitialized_fill(ForwardIterator first, ForwardIterator last, +// const T& x); + +#include +#include + +struct B +{ + static int count_; + int data_; + explicit B() : data_(1) {} + B(const B& b) {if (++count_ == 3) throw 1; data_ = b.data_;} + ~B() {data_ = 0;} +}; + +int B::count_ = 0; + +int main() +{ + const int N = 5; + char pool[sizeof(B)*N] = {0}; + B* bp = (B*)pool; + try + { + std::uninitialized_fill(bp, bp+N, B()); + assert(false); + } + catch (...) + { + for (int i = 0; i < N; ++i) + assert(bp[i].data_ == 0); + } + B::count_ = 0; + std::uninitialized_fill(bp, bp+2, B()); + for (int i = 0; i < 2; ++i) + assert(bp[i].data_ == 1); +} diff --git a/test/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp b/test/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp index 3f3568909..40792d2c3 100644 --- a/test/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp +++ b/test/utilities/memory/storage.iterator/raw_storag_iterator.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // raw_storage_iterator #include #include #include int A_constructed = 0; struct A { int data_; public: explicit A(int i) : data_(i) {++A_constructed;} A(const A& a) : data_(a.data_) {++A_constructed;} ~A() {--A_constructed; data_ = 0;} bool operator==(int i) const {return data_ == i;} }; int main() { typedef std::aligned_storage<3*sizeof(A), std::alignment_of::value>::type Storage; Storage buffer; std::raw_storage_iterator it((A*)&buffer); assert(A_constructed == 0); for (int i = 0; i < 3; ++i) { *it++ = A(i+1); A* ap = (A*)&buffer + i; assert(*ap == i+1); assert(A_constructed == i+1); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// raw_storage_iterator + +#include +#include +#include + +int A_constructed = 0; + +struct A +{ + int data_; +public: + explicit A(int i) : data_(i) {++A_constructed;} + + A(const A& a) : data_(a.data_) {++A_constructed;} + ~A() {--A_constructed; data_ = 0;} + + bool operator==(int i) const {return data_ == i;} +}; + +int main() +{ + typedef std::aligned_storage<3*sizeof(A), std::alignment_of::value>::type + Storage; + Storage buffer; + std::raw_storage_iterator it((A*)&buffer); + assert(A_constructed == 0); + for (int i = 0; i < 3; ++i) + { + *it++ = A(i+1); + A* ap = (A*)&buffer + i; + assert(*ap == i+1); + assert(A_constructed == i+1); + } +} diff --git a/test/utilities/memory/temporary.buffer/temporary_buffer.pass.cpp b/test/utilities/memory/temporary.buffer/temporary_buffer.pass.cpp index 129bae834..8e923695c 100644 --- a/test/utilities/memory/temporary.buffer/temporary_buffer.pass.cpp +++ b/test/utilities/memory/temporary.buffer/temporary_buffer.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // pair // get_temporary_buffer(ptrdiff_t n); // // template // void // return_temporary_buffer(T* p); #include #include int main() { std::pair ip = std::get_temporary_buffer(5); assert(ip.first); assert(ip.second == 5); std::return_temporary_buffer(ip.first); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// pair +// get_temporary_buffer(ptrdiff_t n); +// +// template +// void +// return_temporary_buffer(T* p); + +#include +#include + +int main() +{ + std::pair ip = std::get_temporary_buffer(5); + assert(ip.first); + assert(ip.second == 5); + std::return_temporary_buffer(ip.first); +} diff --git a/test/utilities/memory/unique.ptr/deleter.h b/test/utilities/memory/unique.ptr/deleter.h index df8b894e1..f14c74f87 100644 --- a/test/utilities/memory/unique.ptr/deleter.h +++ b/test/utilities/memory/unique.ptr/deleter.h @@ -1 +1,181 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Example move-only deleter #ifndef DELETER_H #define DELETER_H #include #include template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(0) {} explicit Deleter(int s) : state_(s) {} ~Deleter() {assert(state_ >= 0); state_ = -1;} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(0) {} explicit Deleter(int s) : state_(s) {} ~Deleter() {assert(state_ >= 0); state_ = -1;} int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete [] p;} }; template void swap(Deleter& x, Deleter& y) { Deleter t(std::move(x)); x = std::move(y); y = std::move(t); } template class CDeleter { int state_; public: CDeleter() : state_(0) {} explicit CDeleter(int s) : state_(s) {} ~CDeleter() {assert(state_ >= 0); state_ = -1;} template CDeleter(const CDeleter& d) : state_(d.state()) {} int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; template class CDeleter { int state_; public: CDeleter() : state_(0) {} explicit CDeleter(int s) : state_(s) {} ~CDeleter() {assert(state_ >= 0); state_ = -1;} int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete [] p;} }; template void swap(CDeleter& x, CDeleter& y) { CDeleter t(std::move(x)); x = std::move(y); y = std::move(t); } #endif \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Example move-only deleter + +#ifndef DELETER_H +#define DELETER_H + +#include +#include + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(0) {} + explicit Deleter(int s) : state_(s) {} + ~Deleter() {assert(state_ >= 0); state_ = -1;} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(0) {} + explicit Deleter(int s) : state_(s) {} + ~Deleter() {assert(state_ >= 0); state_ = -1;} + + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete [] p;} +}; + +template +void +swap(Deleter& x, Deleter& y) +{ + Deleter t(std::move(x)); + x = std::move(y); + y = std::move(t); +} + +template +class CDeleter +{ + int state_; + +public: + + CDeleter() : state_(0) {} + explicit CDeleter(int s) : state_(s) {} + ~CDeleter() {assert(state_ >= 0); state_ = -1;} + + template + CDeleter(const CDeleter& d) + : state_(d.state()) {} + + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +template +class CDeleter +{ + int state_; + +public: + + CDeleter() : state_(0) {} + explicit CDeleter(int s) : state_(s) {} + ~CDeleter() {assert(state_ >= 0); state_ = -1;} + + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete [] p;} +}; + +template +void +swap(CDeleter& x, CDeleter& y) +{ + CDeleter t(std::move(x)); + x = std::move(y); + y = std::move(t); +} + +#endif // DELETER_H diff --git a/test/utilities/memory/unique.ptr/nothing_to_do.pass.cpp b/test/utilities/memory/unique.ptr/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/unique.ptr/nothing_to_do.pass.cpp +++ b/test/utilities/memory/unique.ptr/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor.pass.cpp index c96b5b980..ac9b3741f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/convert_ctor.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { std::default_delete d2; std::default_delete d1 = d2; A* p = new B; assert(A::count == 1); assert(B::count == 1); d1(p); assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + std::default_delete d2; + std::default_delete d1 = d2; + A* p = new B; + assert(A::count == 1); + assert(B::count == 1); + d1(p); + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default.pass.cpp index 5f033a368..e7b1013f0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/default.pass.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { std::default_delete d; A* p = new A; assert(A::count == 1); d(p); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + std::default_delete d; + A* p = new A; + assert(A::count == 1); + d(p); + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/incomplete.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/incomplete.fail.cpp index a16625268..a7a3beab0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/incomplete.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt/incomplete.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete // Test that default_delete's operator() requires a complete type #include #include struct A; int main() { std::default_delete d; A* p = 0; d(p); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +// Test that default_delete's operator() requires a complete type + +#include +#include + +struct A; + +int main() +{ + std::default_delete d; + A* p = 0; + d(p); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/convert_ctor.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/convert_ctor.fail.cpp index e1248de87..edb1dd84d 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/convert_ctor.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/convert_ctor.fail.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete // Test that default_delete does not have a working converting constructor #include #include struct A { }; struct B : public A { }; int main() { std::default_delete d2; std::default_delete d1 = d2; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +// Test that default_delete does not have a working converting constructor + +#include +#include + +struct A +{ +}; + +struct B + : public A +{ +}; + +int main() +{ + std::default_delete d2; + std::default_delete d1 = d2; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default.pass.cpp index 1b41e9619..1b11d6a25 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/default.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete // Test that default_delete has a working default constructor #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { std::default_delete d; A* p = new A[3]; assert(A::count == 3); d(p); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +// Test that default_delete has a working default constructor + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + std::default_delete d; + A* p = new A[3]; + assert(A::count == 3); + d(p); + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/incomplete.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/incomplete.fail.cpp index 6fcb94c56..b01a1dd6c 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/incomplete.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.dflt1/incomplete.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // default_delete // Test that default_delete's operator() requires a complete type #include #include struct A; int main() { std::default_delete d; A* p = 0; d(p); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// default_delete + +// Test that default_delete's operator() requires a complete type + +#include +#include + +struct A; + +int main() +{ + std::default_delete d; + A* p = 0; + d(p); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.dltr/unique.ptr.dltr.general/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.fail.cpp index 6360686f7..cb123994a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.fail.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s(new A); std::unique_ptr s2; s2 = s; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s(new A); + std::unique_ptr s2; + s2 = s; + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.pass.cpp index dfd6a7136..0a9a63be4 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move01.pass.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment // test move assignment. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s1(new A[3]); A* p = s1.get(); assert(A::count == 3); std::unique_ptr s2(new A[2]); assert(A::count == 5); s2 = std::move(s1); assert(A::count == 3); assert(s2.get() == p); assert(s1.get() == 0); } assert(A::count == 0); { std::unique_ptr > s1(new A[4], Deleter(5)); A* p = s1.get(); assert(A::count == 4); std::unique_ptr > s2(new A[5]); assert(A::count == 9); s2 = std::move(s1); assert(s2.get() == p); assert(s1.get() == 0); assert(A::count == 4); assert(s2.get_deleter().state() == 5); assert(s1.get_deleter().state() == 0); } assert(A::count == 0); { CDeleter d1(5); std::unique_ptr&> s1(new A[6], d1); A* p = s1.get(); assert(A::count == 6); CDeleter d2(6); std::unique_ptr&> s2(new A[3], d2); assert(A::count == 9); s2 = std::move(s1); assert(A::count == 6); assert(s2.get() == p); assert(s1.get() == 0); assert(d1.state() == 5); assert(d2.state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +// test move assignment. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s1(new A[3]); + A* p = s1.get(); + assert(A::count == 3); + std::unique_ptr s2(new A[2]); + assert(A::count == 5); + s2 = std::move(s1); + assert(A::count == 3); + assert(s2.get() == p); + assert(s1.get() == 0); + } + assert(A::count == 0); + { + std::unique_ptr > s1(new A[4], Deleter(5)); + A* p = s1.get(); + assert(A::count == 4); + std::unique_ptr > s2(new A[5]); + assert(A::count == 9); + s2 = std::move(s1); + assert(s2.get() == p); + assert(s1.get() == 0); + assert(A::count == 4); + assert(s2.get_deleter().state() == 5); + assert(s1.get_deleter().state() == 0); + } + assert(A::count == 0); + { + CDeleter d1(5); + std::unique_ptr&> s1(new A[6], d1); + A* p = s1.get(); + assert(A::count == 6); + CDeleter d2(6); + std::unique_ptr&> s2(new A[3], d2); + assert(A::count == 9); + s2 = std::move(s1); + assert(A::count == 6); + assert(s2.get() == p); + assert(s1.get() == 0); + assert(d1.state() == 5); + assert(d2.state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move02.fail.cpp index 5e1e5f814..d343716c7 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move02.fail.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::unique_ptr s(new A[3]); std::unique_ptr s2; s2 = s; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::unique_ptr s(new A[3]); + std::unique_ptr s2; + s2 = s; + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move03.fail.cpp index 594704f2a..53f93869b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move03.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move04.fail.cpp index 89267738d..0f0c17682 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move04.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { const std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + const std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert01.fail.cpp index 45196b630..f2792b988 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert01.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include // Can't assign from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +// Can't assign from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert02.fail.cpp index 9831ab228..e7f64f409 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert02.fail.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from lvalue #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { boost::unique_ptr > s(new B); A* p = s.get(); boost::unique_ptr > s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from lvalue + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + boost::unique_ptr > s(new B); + A* p = s.get(); + boost::unique_ptr > s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert03.fail.cpp index 67e5f3643..c408e4be0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert03.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from lvalue #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { Deleter db(5); boost::unique_ptr&> s(new B, db); A* p = s.get(); Deleter da(6); boost::unique_ptr&> s2(new A, da); s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from lvalue + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + Deleter db(5); + boost::unique_ptr&> s(new B, db); + A* p = s.get(); + Deleter da(6); + boost::unique_ptr&> s2(new A, da); + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert04.fail.cpp index 64aff20ef..b0e2a53d9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert04.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include // Can't assign from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const boost::unique_ptr s(new B); A* p = s.get(); boost::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +// Can't assign from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const boost::unique_ptr s(new B); + A* p = s.get(); + boost::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert05.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert05.fail.cpp index 96ef756e0..4bcd54212 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert05.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert05.fail.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from const lvalue #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const boost::unique_ptr > s(new B); A* p = s.get(); boost::unique_ptr > s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from const lvalue + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const boost::unique_ptr > s(new B); + A* p = s.get(); + boost::unique_ptr > s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert06.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert06.fail.cpp index 5ecec761a..bf2090a61 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert06.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert06.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from const lvalue #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { Deleter db(5); const boost::unique_ptr&> s(new B, db); A* p = s.get(); Deleter da(6); boost::unique_ptr&> s2(new A, da); s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from const lvalue + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + Deleter db(5); + const boost::unique_ptr&> s(new B, db); + A* p = s.get(); + Deleter da(6); + boost::unique_ptr&> s2(new A, da); + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert07.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert07.fail.cpp index 5e959134c..7d523ea84 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert07.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert07.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { boost::unique_ptr s(new B); A* p = s.get(); boost::unique_ptr s2(new A); assert(A::count == 2); s2 = boost::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + boost::unique_ptr s(new B); + A* p = s.get(); + boost::unique_ptr s2(new A); + assert(A::count == 2); + s2 = boost::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert08.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert08.fail.cpp index e408aae3f..8d90354d3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert08.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert08.fail.cpp @@ -1 +1,59 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { boost::unique_ptr > s(new B); A* p = s.get(); boost::unique_ptr > s2(new A); assert(A::count == 2); s2 = (boost::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + boost::unique_ptr > s(new B); + A* p = s.get(); + boost::unique_ptr > s2(new A); + assert(A::count == 2); + s2 = (boost::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert09.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert09.fail.cpp index a1328d62a..1f170d110 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert09.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/move_convert09.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // test converting move assignment with reference deleters #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { Deleter db(5); boost::unique_ptr&> s(new B, db); A* p = s.get(); Deleter da(6); boost::unique_ptr&> s2(new A, da); s2 = boost::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// test converting move assignment with reference deleters + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + Deleter db(5); + boost::unique_ptr&> s(new B, db); + A* p = s.get(); + Deleter da(6); + boost::unique_ptr&> s2(new A, da); + s2 = boost::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn.pass.cpp index da5d287e4..7f3281761 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_asgn.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // test assignment from null struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s2(new A); assert(A::count == 1); s2 = 0; assert(A::count == 0); assert(s2.get() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// test assignment from null + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s2(new A); + assert(A::count == 1); + s2 = 0; + assert(A::count == 0); + assert(s2.get() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor.pass.cpp index 31248d509..d86b812b3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/null_ctor.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // The deleter is not called if get() == 0 #include #include class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(0) {} int state() const {return state_;} void operator()(void*) {++state_;} }; int main() { Deleter d; assert(d.state() == 0); { std::unique_ptr p(0, d); assert(p.get() == 0); assert(&p.get_deleter() == &d); } assert(d.state() == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// The deleter is not called if get() == 0 + +#include +#include + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(0) {} + + int state() const {return state_;} + + void operator()(void*) {++state_;} +}; + +int main() +{ + Deleter d; + assert(d.state() == 0); + { + std::unique_ptr p(0, d); + assert(p.get() == 0); + assert(&p.get_deleter() == &d); + } + assert(d.state() == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn.pass.cpp index a168fdc01..1f6d40678 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/nullptr_asgn.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // test assignment from null struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s2(new A[3]); assert(A::count == 3); s2 = nullptr; assert(A::count == 0); assert(s2.get() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// test assignment from null + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s2(new A[3]); + assert(A::count == 3); + s2 = nullptr; + assert(A::count == 0); + assert(s2.get() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type.pass.cpp index 690237e58..d4bfb8fab 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/pointer_type.pass.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr::pointer type #include #include struct Deleter { struct pointer {}; }; int main() { { typedef std::unique_ptr P; static_assert((std::is_same::value), ""); } { typedef std::unique_ptr P; static_assert((std::is_same::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr::pointer type + +#include +#include + +struct Deleter +{ + struct pointer {}; +}; + +int main() +{ + { + typedef std::unique_ptr P; + static_assert((std::is_same::value), ""); + } + { + typedef std::unique_ptr P; + static_assert((std::is_same::value), ""); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.fail.cpp index 4a8c09154..a748150b6 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.fail.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor // default unique_ptr ctor should require default Deleter ctor #include class Deleter { Deleter() {} public: Deleter(Deleter&) {} Deleter& operator=(Deleter&) {} void operator()(void*) const {} }; int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +// default unique_ptr ctor should require default Deleter ctor + +#include + +class Deleter +{ + + Deleter() {} + +public: + + Deleter(Deleter&) {} + Deleter& operator=(Deleter&) {} + + void operator()(void*) const {} +}; + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.pass.cpp index 280cfd235..fa37e3da0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default01.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor // default unique_ptr ctor should only require default Deleter ctor #include #include class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(void*) {} }; int main() { { std::unique_ptr p; assert(p.get() == 0); } { std::unique_ptr p; assert(p.get() == 0); assert(p.get_deleter().state() == 5); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +// default unique_ptr ctor should only require default Deleter ctor + +#include +#include + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(void*) {} +}; + +int main() +{ + { + std::unique_ptr p; + assert(p.get() == 0); + } + { + std::unique_ptr p; + assert(p.get() == 0); + assert(p.get_deleter().state() == 5); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.fail.cpp index b94f9b9c2..623df931a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.fail.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor // default unique_ptr ctor should require non-reference Deleter ctor #include class Deleter { public: void operator()(void*) {} }; int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +// default unique_ptr ctor should require non-reference Deleter ctor + +#include + +class Deleter +{ +public: + + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.pass.cpp index 41d143996..98800cc40 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default02.pass.cpp @@ -1 +1,87 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test default unique_ptr ctor // default unique_ptr ctor shouldn't require complete type #include #include struct A; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p); }; void check(int i); template > struct B { std::unique_ptr a_; B(); ~B(); A* get() const {return a_.get();} D& get_deleter() {return a_.get_deleter();} }; int main() { { B<> s; assert(s.get() == 0); } check(0); { B s; assert(s.get() == 0); assert(s.get_deleter().state() == 5); } check(0); } struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; void Deleter::operator()(A* p) {delete p;} void check(int i) { assert(A::count == i); } template B::B() {} template B::~B() {} \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test default unique_ptr ctor + +// default unique_ptr ctor shouldn't require complete type + +#include +#include + +struct A; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p); +}; + +void check(int i); + +template > +struct B +{ + std::unique_ptr a_; + B(); + ~B(); + + A* get() const {return a_.get();} + D& get_deleter() {return a_.get_deleter();} +}; + +int main() +{ + { + B<> s; + assert(s.get() == 0); + } + check(0); + { + B s; + assert(s.get() == 0); + assert(s.get_deleter().state() == 5); + } + check(0); +} + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +void Deleter::operator()(A* p) {delete p;} + +void check(int i) +{ + assert(A::count == i); +} + +template +B::B() {} + +template +B::~B() {} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default03.fail.cpp index dfa0434ee..5ab1bbea6 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/default03.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor // default unique_ptr ctor should require non-pointer Deleter #include int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +// default unique_ptr ctor should require non-pointer Deleter + +#include + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.fail.cpp index b9c23628c..14f89e317 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.fail.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s(new A[3]); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s(new A[3]); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.pass.cpp index f58b18f90..661fdab31 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move01.pass.cpp @@ -1 +1,85 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor // test move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class NCDeleter { int state_; NCDeleter(NCDeleter&); NCDeleter& operator=(NCDeleter&); public: NCDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete [] p;} }; int main() { { std::unique_ptr s(new A[3]); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 3); } assert(A::count == 0); { std::unique_ptr > s(new A[3], Deleter(5)); A* p = s.get(); std::unique_ptr > s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 3); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); { NCDeleter d; std::unique_ptr s(new A[3], d); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 3); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +// test move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class NCDeleter +{ + int state_; + + NCDeleter(NCDeleter&); + NCDeleter& operator=(NCDeleter&); +public: + + NCDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + std::unique_ptr s(new A[3]); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 3); + } + assert(A::count == 0); + { + std::unique_ptr > s(new A[3], Deleter(5)); + A* p = s.get(); + std::unique_ptr > s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 3); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + { + NCDeleter d; + std::unique_ptr s(new A[3], d); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 3); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.fail.cpp index 9d387d97a..8299de7e9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.fail.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor // test move ctor. Can't copy from const lvalue #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::unique_ptr s(new A[3]); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +// test move ctor. Can't copy from const lvalue + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::unique_ptr s(new A[3]); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.pass.cpp index 0cf6da30b..6a89015d9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move02.pass.cpp @@ -1 +1,87 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor // test move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class NCDeleter { int state_; NCDeleter(NCDeleter&); NCDeleter& operator=(NCDeleter&); public: NCDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete [] p;} }; std::unique_ptr source1() { return std::unique_ptr(new A[3]); } void sink1(std::unique_ptr p) { } std::unique_ptr > source2() { return std::unique_ptr >(new A[3]); } void sink2(std::unique_ptr > p) { } std::unique_ptr source3() { static NCDeleter d; return std::unique_ptr(new A[3], d); } void sink3(std::unique_ptr p) { } int main() { sink1(source1()); sink2(source2()); sink3(source3()); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +// test move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class NCDeleter +{ + int state_; + + NCDeleter(NCDeleter&); + NCDeleter& operator=(NCDeleter&); +public: + + NCDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete [] p;} +}; + +std::unique_ptr +source1() +{ + return std::unique_ptr(new A[3]); +} + +void sink1(std::unique_ptr p) +{ +} + +std::unique_ptr > +source2() +{ + return std::unique_ptr >(new A[3]); +} + +void sink2(std::unique_ptr > p) +{ +} + +std::unique_ptr +source3() +{ + static NCDeleter d; + return std::unique_ptr(new A[3], d); +} + +void sink3(std::unique_ptr p) +{ +} + +int main() +{ + sink1(source1()); + sink2(source2()); + sink3(source3()); + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move03.fail.cpp index d3df61466..f63b7eb8b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move03.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor // test move ctor. Can't copy from lvalue #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete [] p;} }; int main() { { std::unique_ptr s(new A[3]); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +// test move ctor. Can't copy from lvalue + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + std::unique_ptr s(new A[3]); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move04.fail.cpp index 6d11937f5..5a601fd82 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move04.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor // test move ctor. Can't copy from const lvalue #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete [] p;} }; int main() { { const std::unique_ptr s(new A[3]); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +// test move ctor. Can't copy from const lvalue + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + const std::unique_ptr s(new A[3]); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert01.fail.cpp index 9a580449f..05f8ce024 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert01.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert02.fail.cpp index 86a2cf68e..0487804de 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert02.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert03.fail.cpp index 9822dc2b3..d5d330ad9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert03.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert04.fail.cpp index b0a9bc710..b423386d3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert04.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert05.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert05.fail.cpp index 983d6c8c5..d55aac8ba 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert05.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert05.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert06.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert06.fail.cpp index ae87cfe2f..004e5d0a8 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert06.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert06.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert07.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert07.fail.cpp index ce5883a9a..164fa4a3a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert07.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert07.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert08.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert08.fail.cpp index 3203f29e8..b3a9ce424 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert08.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert08.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert09.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert09.fail.cpp index d2c5eb922..b81dd40f7 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert09.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert09.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; const std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + const std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert10.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert10.fail.cpp index ec576470b..4d4541190 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert10.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert10.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert11.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert11.fail.cpp index f3c299c0b..c3641f86e 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert11.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert11.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert12.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert12.fail.cpp index 26b925da4..e429fa888 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert12.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert12.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; const std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + const std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert13.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert13.fail.cpp index a6040720e..25bdf3dbe 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert13.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert13.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert14.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert14.fail.cpp index 2b5b27c68..74172f377 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert14.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert14.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert15.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert15.fail.cpp index ddcdb453a..4cbb9950b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert15.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert15.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert16.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert16.fail.cpp index d9f4d99ad..7ce70fbc8 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert16.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert16.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert17.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert17.fail.cpp index 96ebb8380..002946311 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert17.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert17.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert18.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert18.fail.cpp index 2852c472e..ecb76a0b3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert18.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/move_convert18.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr.pass.cpp index d0fdb9a2d..62e777a4a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/nullptr.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // unique_ptr(nullptr_t); #include #include // default unique_ptr ctor should only require default Deleter ctor class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(void*) {} }; int main() { { std::unique_ptr p(nullptr); assert(p.get() == 0); } { std::unique_ptr p(nullptr); assert(p.get() == 0); assert(p.get_deleter().state() == 5); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// unique_ptr(nullptr_t); + +#include +#include + +// default unique_ptr ctor should only require default Deleter ctor +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(void*) {} +}; + +int main() +{ + { + std::unique_ptr p(nullptr); + assert(p.get() == 0); + } + { + std::unique_ptr p(nullptr); + assert(p.get() == 0); + assert(p.get_deleter().state() == 5); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.fail.cpp index bdcd371b5..14bdf5ba8 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.fail.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor // unique_ptr(pointer) ctor should require default Deleter ctor #include class Deleter { Deleter() {} public: Deleter(Deleter&) {} Deleter& operator=(Deleter&) {} void operator()(void*) const {} }; int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +// unique_ptr(pointer) ctor should require default Deleter ctor + +#include + +class Deleter +{ + + Deleter() {} + +public: + + Deleter(Deleter&) {} + Deleter& operator=(Deleter&) {} + + void operator()(void*) const {} +}; + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.pass.cpp index 25e41cace..9b00c50b0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer01.pass.cpp @@ -1 +1,63 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor // unique_ptr(pointer) ctor should only require default Deleter ctor #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete [] p;} }; int main() { { A* p = new A[3]; assert(A::count == 3); std::unique_ptr s(p); assert(s.get() == p); } assert(A::count == 0); { A* p = new A[3]; assert(A::count == 3); std::unique_ptr s(p); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +// unique_ptr(pointer) ctor should only require default Deleter ctor + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + std::unique_ptr s(p); + assert(s.get() == p); + } + assert(A::count == 0); + { + A* p = new A[3]; + assert(A::count == 3); + std::unique_ptr s(p); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.fail.cpp index 8f3767dc5..804ed5b5e 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.fail.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include // unique_ptr(pointer) ctor should require non-reference Deleter ctor class Deleter { public: void operator()(void*) {} }; int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include + +// unique_ptr(pointer) ctor should require non-reference Deleter ctor +class Deleter +{ +public: + + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.pass.cpp index f70f9851e..619b0b063 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer02.pass.cpp @@ -1 +1,95 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor // unique_ptr(pointer) ctor shouldn't require complete type #include #include struct A; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p); }; void check(int i); template > struct B { std::unique_ptr a_; explicit B(A*); ~B(); A* get() const {return a_.get();} D& get_deleter() {return a_.get_deleter();} }; A* get(); int main() { { A* p = get(); check(3); B<> s(p); assert(s.get() == p); } check(0); { A* p = get(); check(3); B s(p); assert(s.get() == p); assert(s.get_deleter().state() == 5); } check(0); } struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; A* get() {return new A[3];} void Deleter::operator()(A* p) {delete [] p;} void check(int i) { assert(A::count == i); } template B::B(A* a) : a_(a) {} template B::~B() {} \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +// unique_ptr(pointer) ctor shouldn't require complete type + +#include +#include + +struct A; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p); +}; + +void check(int i); + +template > +struct B +{ + std::unique_ptr a_; + explicit B(A*); + ~B(); + + A* get() const {return a_.get();} + D& get_deleter() {return a_.get_deleter();} +}; + +A* get(); + +int main() +{ + { + A* p = get(); + check(3); + B<> s(p); + assert(s.get() == p); + } + check(0); + { + A* p = get(); + check(3); + B s(p); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + check(0); +} + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +A* get() {return new A[3];} + +void Deleter::operator()(A* p) {delete [] p;} + +void check(int i) +{ + assert(A::count == i); +} + +template +B::B(A* a) : a_(a) {} + +template +B::~B() {} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer03.fail.cpp index 35c1c764e..650cab494 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer03.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor // unique_ptr(pointer) ctor should require non-pointer Deleter #include int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +// unique_ptr(pointer) ctor should require non-pointer Deleter + +#include + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer04.fail.cpp index 507610bb2..ddc32d8cf 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer04.fail.cpp @@ -1 +1,67 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor // unique_ptr(pointer) ctor should not work with derived pointers #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete [] p;} }; int main() { { B* p = new B[3]; std::unique_ptr s(p); } { B* p = new B[3]; std::unique_ptr s(p); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +// unique_ptr(pointer) ctor should not work with derived pointers + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + B* p = new B[3]; + std::unique_ptr s(p); + } + { + B* p = new B[3]; + std::unique_ptr s(p); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01.pass.cpp index 4d27319f3..73f2b1a7c 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter01.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, deleter()) only requires MoveConstructible deleter #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* p = new A[3]; assert(A::count == 3); std::unique_ptr > s(p, Deleter()); assert(s.get() == p); assert(s.get_deleter().state() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, deleter()) only requires MoveConstructible deleter + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + std::unique_ptr > s(p, Deleter()); + assert(s.get() == p); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02.pass.cpp index e25c5b1f8..ffa1c1df1 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter02.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, d) requires CopyConstructible deleter #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete [] p;} }; int main() { { A* p = new A[3]; assert(A::count == 3); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); d.set_state(6); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, d) requires CopyConstructible deleter + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + d.set_state(6); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03.pass.cpp index 8f4594c5f..f69073577 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter03.pass.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, d) does not requires CopyConstructible deleter #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(const Deleter&); Deleter& operator=(const Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete [] p;} }; int main() { { A* p = new A[3]; assert(A::count == 3); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); d.set_state(6); assert(s.get_deleter().state() == 6); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, d) does not requires CopyConstructible deleter + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + d.set_state(6); + assert(s.get_deleter().state() == 6); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.fail.cpp index 42b84c174..24d563059 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, D()) should not compile #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) const {delete [] p;} }; int main() { { A* p = new A[3]; assert(A::count == 3); std::unique_ptr s(p, Deleter()); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, D()) should not compile + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) const {delete [] p;} +}; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + std::unique_ptr s(p, Deleter()); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.pass.cpp index 34b426e16..67402064a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter04.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, d) does not requires CopyConstructible deleter #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(const Deleter&); Deleter& operator=(const Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) const {delete [] p;} }; int main() { { A* p = new A[3]; assert(A::count == 3); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, d) does not requires CopyConstructible deleter + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) const {delete [] p;} +}; + +int main() +{ + { + A* p = new A[3]; + assert(A::count == 3); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter05.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter05.fail.cpp index 66a314ae6..b5eeb5c75 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter05.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.ctor/pointer_deleter05.fail.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor // unique_ptr(pointer, deleter) should not work with derived pointers #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete [] p;} }; int main() { B* p = new B[3]; std::unique_ptr s(p, Deleter()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +// unique_ptr(pointer, deleter) should not work with derived pointers + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +class Deleter +{ + int state_; + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete [] p;} +}; + +int main() +{ + B* p = new B[3]; + std::unique_ptr s(p, Deleter()); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release.pass.cpp index 1f80c9e5a..560ba3cce 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/release.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test release #include #include int main() { std::unique_ptr p(new int[3]); int* i = p.get(); int* j = p.release(); assert(p.get() == 0); assert(i == j); delete [] j; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test release + +#include +#include + +int main() +{ + std::unique_ptr p(new int[3]); + int* i = p.get(); + int* j = p.release(); + assert(p.get() == 0); + assert(i == j); + delete [] j; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1.pass.cpp index 1cbea933a..3c69b19aa 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset1.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test reset #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr p(new A[3]); assert(A::count == 3); A* i = p.get(); p.reset(); assert(A::count == 0); assert(p.get() == 0); } assert(A::count == 0); { std::unique_ptr p(new A[4]); assert(A::count == 4); A* i = p.get(); p.reset(new A[5]); assert(A::count == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test reset + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr p(new A[3]); + assert(A::count == 3); + A* i = p.get(); + p.reset(); + assert(A::count == 0); + assert(p.get() == 0); + } + assert(A::count == 0); + { + std::unique_ptr p(new A[4]); + assert(A::count == 4); + A* i = p.get(); + p.reset(new A[5]); + assert(A::count == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset2.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset2.fail.cpp index 43bb562e7..feae9690f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset2.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/reset2.fail.cpp @@ -1 +1,64 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test reset #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr p(new A); assert(A::count == 1); assert(B::count == 0); A* i = p.get(); p.reset(new B); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); { std::unique_ptr p(new B); assert(A::count == 1); assert(B::count == 1); A* i = p.get(); p.reset(new B); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test reset + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr p(new A); + assert(A::count == 1); + assert(B::count == 0); + A* i = p.get(); + p.reset(new B); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); + { + std::unique_ptr p(new B); + assert(A::count == 1); + assert(B::count == 1); + A* i = p.get(); + p.reset(new B); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap.pass.cpp index 07eac0228..0c63780b3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.modifiers/swap.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test swap #include #include #include "../../deleter.h" struct A { int state_; static int count; A() : state_(0) {++count;} explicit A(int i) : state_(i) {++count;} A(const A& a) : state_(a.state_) {++count;} A& operator=(const A& a) {state_ = a.state_; return *this;} ~A() {--count;} friend bool operator==(const A& x, const A& y) {return x.state_ == y.state_;} }; int A::count = 0; int main() { { A* p1 = new A[3]; std::unique_ptr > s1(p1, Deleter(1)); A* p2 = new A[3]; std::unique_ptr > s2(p2, Deleter(2)); assert(s1.get() == p1); assert(s1.get_deleter().state() == 1); assert(s2.get() == p2); assert(s2.get_deleter().state() == 2); s1.swap(s2); assert(s1.get() == p2); assert(s1.get_deleter().state() == 2); assert(s2.get() == p1); assert(s2.get_deleter().state() == 1); assert(A::count == 6); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test swap + +#include +#include + +#include "../../deleter.h" + +struct A +{ + int state_; + static int count; + A() : state_(0) {++count;} + explicit A(int i) : state_(i) {++count;} + A(const A& a) : state_(a.state_) {++count;} + A& operator=(const A& a) {state_ = a.state_; return *this;} + ~A() {--count;} + + friend bool operator==(const A& x, const A& y) + {return x.state_ == y.state_;} +}; + +int A::count = 0; + +int main() +{ + { + A* p1 = new A[3]; + std::unique_ptr > s1(p1, Deleter(1)); + A* p2 = new A[3]; + std::unique_ptr > s2(p2, Deleter(2)); + assert(s1.get() == p1); + assert(s1.get_deleter().state() == 1); + assert(s2.get() == p2); + assert(s2.get_deleter().state() == 2); + s1.swap(s2); + assert(s1.get() == p2); + assert(s1.get_deleter().state() == 2); + assert(s2.get() == p1); + assert(s2.get_deleter().state() == 1); + assert(A::count == 6); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/dereference.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/dereference.fail.cpp index 5bfb4de49..89597fad4 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/dereference.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/dereference.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op*() #include #include int main() { std::unique_ptr p(new int(3)); assert(*p == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op*() + +#include +#include + +int main() +{ + std::unique_ptr p(new int(3)); + assert(*p == 3); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool.pass.cpp index f3b7f01d8..4a4f6c062 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/explicit_bool.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op*() #include #include int main() { { std::unique_ptr p(new int [3]); if (p) ; else assert(false); if (!p) assert(false); } { std::unique_ptr p; if (!p) ; else assert(false); if (p) assert(false); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op*() + +#include +#include + +int main() +{ + { + std::unique_ptr p(new int [3]); + if (p) + ; + else + assert(false); + if (!p) + assert(false); + } + { + std::unique_ptr p; + if (!p) + ; + else + assert(false); + if (p) + assert(false); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get.pass.cpp index 5ed1a201a..015ea2fbf 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test get #include #include int main() { int* p = new int[3]; std::unique_ptr s(p); assert(s.get() == p); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test get + +#include +#include + +int main() +{ + int* p = new int[3]; + std::unique_ptr s(p); + assert(s.get() == p); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp index 0d58c7ac2..3e74775d2 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/get_deleter.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test get_deleter() #include #include struct Deleter { void operator()(void*) {} int test() {return 5;} int test() const {return 6;} }; int main() { { std::unique_ptr p; assert(p.get_deleter().test() == 5); } { const std::unique_ptr p; assert(p.get_deleter().test() == 6); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test get_deleter() + +#include +#include + +struct Deleter +{ + void operator()(void*) {} + + int test() {return 5;} + int test() const {return 6;} +}; + +int main() +{ + { + std::unique_ptr p; + assert(p.get_deleter().test() == 5); + } + { + const std::unique_ptr p; + assert(p.get_deleter().test() == 6); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index.pass.cpp index 95ad2f26f..61e400ade 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/index.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op[](size_t) #include #include class A { int state_; static int next_; public: A() : state_(++next_) {} int get() const {return state_;} friend bool operator==(const A& x, int y) {return x.state_ == y;} A& operator=(int i) {state_ = i; return *this;} }; int A::next_ = 0; int main() { std::unique_ptr p(new A[3]); assert(p[0] == 1); assert(p[1] == 2); assert(p[2] == 3); p[0] = 3; p[1] = 2; p[2] = 1; assert(p[0] == 3); assert(p[1] == 2); assert(p[2] == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op[](size_t) + +#include +#include + +class A +{ + int state_; + static int next_; +public: + A() : state_(++next_) {} + int get() const {return state_;} + + friend bool operator==(const A& x, int y) + {return x.state_ == y;} + + A& operator=(int i) {state_ = i; return *this;} +}; + +int A::next_ = 0; + +int main() +{ + std::unique_ptr p(new A[3]); + assert(p[0] == 1); + assert(p[1] == 2); + assert(p[2] == 3); + p[0] = 3; + p[1] = 2; + p[2] = 1; + assert(p[0] == 3); + assert(p[1] == 2); + assert(p[2] == 1); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/op_arrow.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/op_arrow.fail.cpp index f8973e175..ad0cf3984 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/op_arrow.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.runtime/unique.ptr.runtime.observers/op_arrow.fail.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op->() #include #include struct A { int i_; A() : i_(7) {} }; int main() { std::unique_ptr p(new A); assert(p->i_ == 7); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op->() + +#include +#include + +struct A +{ + int i_; + + A() : i_(7) {} +}; + +int main() +{ + std::unique_ptr p(new A); + assert(p->i_ == 7); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/pointer_type.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/pointer_type.pass.cpp index daa83841c..05d6d1f37 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/pointer_type.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/pointer_type.pass.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr::pointer type #include #include struct Deleter { struct pointer {}; }; int main() { { typedef std::unique_ptr P; static_assert((std::is_same::value), ""); } { typedef std::unique_ptr P; static_assert((std::is_same::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr::pointer type + +#include +#include + +struct Deleter +{ + struct pointer {}; +}; + +int main() +{ + { + typedef std::unique_ptr P; + static_assert((std::is_same::value), ""); + } + { + typedef std::unique_ptr P; + static_assert((std::is_same::value), ""); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp index 6360686f7..cb123994a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.fail.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s(new A); std::unique_ptr s2; s2 = s; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s(new A); + std::unique_ptr s2; + s2 = s; + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.pass.cpp index 94c8b5b15..7d3bff0dd 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move01.pass.cpp @@ -1 +1,74 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment // test move assignment. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s1(new A); A* p = s1.get(); std::unique_ptr s2(new A); assert(A::count == 2); s2 = std::move(s1); assert(A::count == 1); assert(s2.get() == p); assert(s1.get() == 0); } assert(A::count == 0); { std::unique_ptr > s1(new A, Deleter(5)); A* p = s1.get(); std::unique_ptr > s2(new A); assert(A::count == 2); s2 = std::move(s1); assert(s2.get() == p); assert(s1.get() == 0); assert(A::count == 1); assert(s2.get_deleter().state() == 5); assert(s1.get_deleter().state() == 0); } assert(A::count == 0); { CDeleter d1(5); std::unique_ptr&> s1(new A, d1); A* p = s1.get(); CDeleter d2(6); std::unique_ptr&> s2(new A, d2); s2 = std::move(s1); assert(s2.get() == p); assert(s1.get() == 0); assert(A::count == 1); assert(d1.state() == 5); assert(d2.state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +// test move assignment. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s1(new A); + A* p = s1.get(); + std::unique_ptr s2(new A); + assert(A::count == 2); + s2 = std::move(s1); + assert(A::count == 1); + assert(s2.get() == p); + assert(s1.get() == 0); + } + assert(A::count == 0); + { + std::unique_ptr > s1(new A, Deleter(5)); + A* p = s1.get(); + std::unique_ptr > s2(new A); + assert(A::count == 2); + s2 = std::move(s1); + assert(s2.get() == p); + assert(s1.get() == 0); + assert(A::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s1.get_deleter().state() == 0); + } + assert(A::count == 0); + { + CDeleter d1(5); + std::unique_ptr&> s1(new A, d1); + A* p = s1.get(); + CDeleter d2(6); + std::unique_ptr&> s2(new A, d2); + s2 = std::move(s1); + assert(s2.get() == p); + assert(s1.get() == 0); + assert(A::count == 1); + assert(d1.state() == 5); + assert(d2.state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp index e245105ae..73e608d63 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move02.fail.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::unique_ptr s(new A); std::unique_ptr s2; s2 = s; } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::unique_ptr s(new A); + std::unique_ptr s2; + s2 = s; + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp index 594704f2a..53f93869b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move03.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp index 89267738d..0f0c17682 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move04.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { const std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + const std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp index dc9e6cc73..4dff75cf6 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include // Can't assign from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +// Can't assign from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.pass.cpp index 68aa7be4f..7fd7acb0c 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert01.pass.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(new A); assert(A::count == 2); s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(new A); + assert(A::count == 2); + s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp index 01cdc5754..fb1a4491e 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.fail.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include #include "../../deleter.h" // Can't assign from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +#include "../../deleter.h" + +// Can't assign from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.pass.cpp index 97217d0ac..337d3f079 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert02.pass.cpp @@ -1 +1,59 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B, Deleter(5)); A* p = s.get(); std::unique_ptr > s2(new A); assert(A::count == 2); s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B, Deleter(5)); + A* p = s.get(); + std::unique_ptr > s2(new A); + assert(A::count == 2); + s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp index e5b5cb254..94a0275fa 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from lvalue #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { Deleter db(5); std::unique_ptr&> s(new B, db); A* p = s.get(); Deleter da(6); std::unique_ptr&> s2(new A, da); s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from lvalue + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + Deleter db(5); + std::unique_ptr&> s(new B, db); + A* p = s.get(); + Deleter da(6); + std::unique_ptr&> s2(new A, da); + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.pass.cpp index 2c421dfe3..880ba2ac0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert03.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // test converting move assignment with reference deleters #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { CDeleter db(5); std::unique_ptr&> s(new B, db); A* p = s.get(); CDeleter da(6); std::unique_ptr&> s2(new A, da); s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s.get_deleter().state() == 5); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// test converting move assignment with reference deleters + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + CDeleter db(5); + std::unique_ptr&> s(new B, db); + A* p = s.get(); + CDeleter da(6); + std::unique_ptr&> s2(new A, da); + s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s.get_deleter().state() == 5); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp index eef44ceb7..7708ab3fb 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert04.fail.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment #include #include // Can't assign from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +#include +#include + +// Can't assign from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert05.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert05.fail.cpp index d796ba36c..bb821583f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert05.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert05.fail.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from const lvalue #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2; s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from const lvalue + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2; + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert06.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert06.fail.cpp index 0400cbdb7..91c2c04a4 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert06.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert06.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Can't assign from const lvalue #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { Deleter db(5); const std::unique_ptr&> s(new B, db); A* p = s.get(); Deleter da(6); std::unique_ptr&> s2(new A, da); s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Can't assign from const lvalue + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + Deleter db(5); + const std::unique_ptr&> s(new B, db); + A* p = s.get(); + Deleter da(6); + std::unique_ptr&> s2(new A, da); + s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert13.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert13.fail.cpp index 7ec9e00ef..af293c22d 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert13.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/move_convert13.fail.cpp @@ -1 +1,35 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move assignment // Do not convert from an array unique_ptr #include #include struct A { }; struct Deleter { void operator()(void*) {} }; int main() { std::unique_ptr s; std::unique_ptr s2; s2 = std::move(s); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move assignment + +// Do not convert from an array unique_ptr + +#include +#include + +struct A +{ +}; + +struct Deleter +{ + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr s; + std::unique_ptr s2; + s2 = std::move(s); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null.pass.cpp index da5d287e4..7f3281761 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/null.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // test assignment from null struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s2(new A); assert(A::count == 1); s2 = 0; assert(A::count == 0); assert(s2.get() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// test assignment from null + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s2(new A); + assert(A::count == 1); + s2 = 0; + assert(A::count == 0); + assert(s2.get() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr.pass.cpp index 3000f7448..5627e1a23 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.asgn/nullptr.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move assignment #include #include // test assignment from null struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s2(new A); assert(A::count == 1); s2 = nullptr; assert(A::count == 0); assert(s2.get() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move assignment + +#include +#include + +// test assignment from null + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s2(new A); + assert(A::count == 1); + s2 = nullptr; + assert(A::count == 0); + assert(s2.get() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer.pass.cpp index e12717599..62f1c60c3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer.pass.cpp @@ -1 +1,67 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // template explicit unique_ptr(auto_ptr&); struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { B* p = new B; std::auto_ptr ap(p); std::unique_ptr up(std::move(ap)); assert(up.get() == p); assert(ap.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); { B* p = new B; std::auto_ptr ap(p); std::unique_ptr up; up = std::move(ap); assert(up.get() == p); assert(ap.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// template explicit unique_ptr(auto_ptr&); + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + B* p = new B; + std::auto_ptr ap(p); + std::unique_ptr up(std::move(ap)); + assert(up.get() == p); + assert(ap.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); + { + B* p = new B; + std::auto_ptr ap(p); + std::unique_ptr up; + up = std::move(ap); + assert(up.get() == p); + assert(ap.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer01.fail.cpp index a13af5b9d..d11eecb92 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer01.fail.cpp @@ -1 +1,67 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // template explicit unique_ptr(auto_ptr&); struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B // : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { B* p = new B; std::auto_ptr ap(p); std::unique_ptr up(ap); assert(up.get() == p); assert(ap.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); { B* p = new B; std::auto_ptr ap(p); std::unique_ptr up; up = ap; assert(up.get() == p); assert(ap.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// template explicit unique_ptr(auto_ptr&); + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B +// : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + B* p = new B; + std::auto_ptr ap(p); + std::unique_ptr up(ap); + assert(up.get() == p); + assert(ap.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); + { + B* p = new B; + std::auto_ptr ap(p); + std::unique_ptr up; + up = ap; + assert(up.get() == p); + assert(ap.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer02.fail.cpp index 958072306..cda17b201 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/auto_pointer02.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // template explicit unique_ptr(auto_ptr&); struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct Deleter { template void operator()(T*) {} }; int main() { { B* p = new B; std::auto_ptr ap(p); std::unique_ptr up(ap); assert(up.get() == p); assert(ap.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// template explicit unique_ptr(auto_ptr&); + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct Deleter +{ + template + void operator()(T*) {} +}; + +int main() +{ + { + B* p = new B; + std::auto_ptr ap(p); + std::unique_ptr up(ap); + assert(up.get() == p); + assert(ap.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.fail.cpp index d9e9d479f..fb380ec07 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.fail.cpp @@ -1 +1,35 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor #include // default unique_ptr ctor should require default Deleter ctor class Deleter { Deleter() {} public: Deleter(Deleter&) {} Deleter& operator=(Deleter&) {} void operator()(void*) const {} }; int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +#include + +// default unique_ptr ctor should require default Deleter ctor +class Deleter +{ + + Deleter() {} + +public: + + Deleter(Deleter&) {} + Deleter& operator=(Deleter&) {} + + void operator()(void*) const {} +}; + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.pass.cpp index e0178ba2f..48c7fadf3 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default01.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor #include #include // default unique_ptr ctor should only require default Deleter ctor class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(void*) {} }; int main() { { std::unique_ptr p; assert(p.get() == 0); } { std::unique_ptr p; assert(p.get() == 0); assert(p.get_deleter().state() == 5); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +#include +#include + +// default unique_ptr ctor should only require default Deleter ctor +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(void*) {} +}; + +int main() +{ + { + std::unique_ptr p; + assert(p.get() == 0); + } + { + std::unique_ptr p; + assert(p.get() == 0); + assert(p.get_deleter().state() == 5); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.fail.cpp index 1255c5c0c..66df19698 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.fail.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor #include // default unique_ptr ctor should require non-reference Deleter ctor class Deleter { public: void operator()(void*) {} }; int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +#include + +// default unique_ptr ctor should require non-reference Deleter ctor +class Deleter +{ +public: + + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.pass.cpp index 90cf37529..67332e4bb 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default02.pass.cpp @@ -1 +1,84 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test default unique_ptr ctor #include #include // default unique_ptr ctor shouldn't require complete type struct A; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p); }; void check(int i); template > struct B { std::unique_ptr a_; B() {} ~B(); A* get() const {return a_.get();} D& get_deleter() {return a_.get_deleter();} }; int main() { { B<> s; assert(s.get() == 0); } check(0); { B s; assert(s.get() == 0); assert(s.get_deleter().state() == 5); } check(0); } struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; void Deleter::operator()(A* p) {delete p;} void check(int i) { assert(A::count == i); } template B::~B() {} \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test default unique_ptr ctor + +#include +#include + +// default unique_ptr ctor shouldn't require complete type + +struct A; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p); +}; + +void check(int i); + +template > +struct B +{ + std::unique_ptr a_; + B() {} + ~B(); + + A* get() const {return a_.get();} + D& get_deleter() {return a_.get_deleter();} +}; + +int main() +{ + { + B<> s; + assert(s.get() == 0); + } + check(0); + { + B s; + assert(s.get() == 0); + assert(s.get_deleter().state() == 5); + } + check(0); +} + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +void Deleter::operator()(A* p) {delete p;} + +void check(int i) +{ + assert(A::count == i); +} + +template +B::~B() {} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default03.fail.cpp index f8de7af2f..af86c25a1 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/default03.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr default ctor #include // default unique_ptr ctor should require non-pointer Deleter int main() { std::unique_ptr p; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr default ctor + +#include + +// default unique_ptr ctor should require non-pointer Deleter + +int main() +{ + std::unique_ptr p; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.fail.cpp index 5d7b62322..41e4254a9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.fail.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.pass.cpp index 7d3484d54..f3bcbcf23 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move01.pass.cpp @@ -1 +1,141 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(5) {} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete p;} }; int main() { { std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); { std::unique_ptr > s(new A); A* p = s.get(); std::unique_ptr > s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); { CDeleter d; std::unique_ptr s(new A, d); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(5) {} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); + { + std::unique_ptr > s(new A); + A* p = s.get(); + std::unique_ptr > s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + { + CDeleter d; + std::unique_ptr s(new A, d); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.fail.cpp index 84470c9e4..bf2dd8070 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.fail.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.pass.cpp index 5abbb7776..e0d8c5acf 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move02.pass.cpp @@ -1 +1,143 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(5) {} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete p;} }; std::unique_ptr source1() { return std::unique_ptr(new A); } void sink1(std::unique_ptr p) { } std::unique_ptr > source2() { return std::unique_ptr >(new A); } void sink2(std::unique_ptr > p) { } std::unique_ptr source3() { static CDeleter d; return std::unique_ptr(new A, d); } void sink3(std::unique_ptr p) { } int main() { sink1(source1()); sink2(source2()); sink3(source3()); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(5) {} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete p;} +}; + +std::unique_ptr +source1() +{ + return std::unique_ptr(new A); +} + +void sink1(std::unique_ptr p) +{ +} + +std::unique_ptr > +source2() +{ + return std::unique_ptr >(new A); +} + +void sink2(std::unique_ptr > p) +{ +} + +std::unique_ptr +source3() +{ + static CDeleter d; + return std::unique_ptr(new A, d); +} + +void sink3(std::unique_ptr p) +{ +} + +int main() +{ + sink1(source1()); + sink2(source2()); + sink3(source3()); + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move03.fail.cpp index d6bffbec6..5926b9ae5 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move03.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move04.fail.cpp index 876b58993..dfec0c3b6 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move04.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr move ctor #include #include // test move ctor. Can't copy from const lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { const std::unique_ptr s(new A); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr move ctor + +#include +#include + +// test move ctor. Can't copy from const lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + const std::unique_ptr s(new A); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.fail.cpp index 7454a2cc5..6dd63a584 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // Can't construct from lvalue struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// Can't construct from lvalue + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.pass.cpp index a82e3f8f1..7254261d6 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert01.pass.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.fail.cpp index 85388db4d..4a631eed7 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.fail.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version #include #include #include "../../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +#include +#include + +#include "../../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.pass.cpp index 091e3fbee..d084f63b0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert02.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include #include "../../deleter.h" // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B, Deleter(5)); A* p = s.get(); std::unique_ptr > s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +#include "../../deleter.h" + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B, Deleter(5)); + A* p = s.get(); + std::unique_ptr > s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.fail.cpp index 0fb4a4cd0..0435e7363 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.pass.cpp index ecda031db..0accb534f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert03.pass.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(std::move(s)); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(std::move(s)); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.fail.cpp index 58a911a6d..c691d72cf 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.pass.cpp index 79b616139..94f932eeb 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert04.pass.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.fail.cpp index 591bc79bc..540ece084 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.fail.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include #include "../../deleter.h" // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { std::unique_ptr > s(new B); std::unique_ptr > s2 = s; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +#include "../../deleter.h" + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + std::unique_ptr > s(new B); + std::unique_ptr > s2 = s; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.pass.cpp index e4faba25b..ee1d80fc2 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert05.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include #include "../../deleter.h" // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr > s(new B, Deleter(5)); A* p = s.get(); std::unique_ptr > s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +#include "../../deleter.h" + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr > s(new B, Deleter(5)); + A* p = s.get(); + std::unique_ptr > s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.fail.cpp index 9fd6649db..d204c0e4d 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.pass.cpp index 4961a53a6..55aa13d73 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert06.pass.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.fail.cpp index d05e81e45..54bc4e9f9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.pass.cpp index 3ef4da00c..1d4ec6d97 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert07.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include #include "../../deleter.h" // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { CDeleter b(5); std::unique_ptr&> s(new B, b); A* p = s.get(); std::unique_ptr > s2 = std::move(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +#include "../../deleter.h" + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + CDeleter b(5); + std::unique_ptr&> s(new B, b); + A* p = s.get(); + std::unique_ptr > s2 = std::move(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert08.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert08.fail.cpp index cdd0fd7f0..1da66eaef 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert08.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert08.fail.cpp @@ -1 +1,117 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(5) {} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; int main() { { const std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(5) {} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + const std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert09.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert09.fail.cpp index 18a7b07e0..f79b52ff0 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert09.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert09.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; const std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2(s); assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + const std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2(s); + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert10.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert10.fail.cpp index 0bed30c2c..9fd1e9108 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert10.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert10.fail.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr s(new B); A* p = s.get(); std::unique_ptr s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr s(new B); + A* p = s.get(); + std::unique_ptr s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert11.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert11.fail.cpp index 3b7d5f816..fe981de13 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert11.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert11.fail.cpp @@ -1 +1,117 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Implicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(5) {} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; int main() { { const std::unique_ptr > s(new B); A* p = s.get(); std::unique_ptr > s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); assert(s2.get_deleter().state() == 5); assert(s.get_deleter().state() == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Implicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(5) {} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + const std::unique_ptr > s(new B); + A* p = s.get(); + std::unique_ptr > s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + assert(s2.get_deleter().state() == 5); + assert(s.get_deleter().state() == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert12.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert12.fail.cpp index 42d7a189a..8534110b9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert12.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert12.fail.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor #include #include // test converting move ctor. Should only require a MoveConstructible deleter, or if // deleter is a reference, not even that. // Explicit version struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; template class CDeleter { int state_; CDeleter(CDeleter&); CDeleter& operator=(CDeleter&); public: CDeleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(T* p) {delete p;} }; int main() { { CDeleter d; const std::unique_ptr&> s(new B, d); A* p = s.get(); std::unique_ptr&> s2 = s; assert(s2.get() == p); assert(s.get() == 0); assert(A::count == 1); assert(B::count == 1); d.set_state(6); assert(s2.get_deleter().state() == d.state()); assert(s.get_deleter().state() == d.state()); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +#include +#include + +// test converting move ctor. Should only require a MoveConstructible deleter, or if +// deleter is a reference, not even that. +// Explicit version + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +template +class CDeleter +{ + int state_; + + CDeleter(CDeleter&); + CDeleter& operator=(CDeleter&); +public: + + CDeleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + CDeleter d; + const std::unique_ptr&> s(new B, d); + A* p = s.get(); + std::unique_ptr&> s2 = s; + assert(s2.get() == p); + assert(s.get() == 0); + assert(A::count == 1); + assert(B::count == 1); + d.set_state(6); + assert(s2.get_deleter().state() == d.state()); + assert(s.get_deleter().state() == d.state()); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert13.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert13.fail.cpp index e5b666e58..ee02f0d02 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert13.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/move_convert13.fail.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr converting move ctor // Do not convert from an array unique_ptr #include #include struct A { }; struct Deleter { void operator()(void*) {} }; int main() { std::unique_ptr s; std::unique_ptr s2(std::move(s)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr converting move ctor + +// Do not convert from an array unique_ptr + +#include +#include + +struct A +{ +}; + +struct Deleter +{ + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr s; + std::unique_ptr s2(std::move(s)); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr.pass.cpp index c49c9c8de..f4f6662cf 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/nullptr.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // unique_ptr(nullptr_t); #include #include // default unique_ptr ctor should only require default Deleter ctor class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(void*) {} }; int main() { { std::unique_ptr p(nullptr); assert(p.get() == 0); } { std::unique_ptr p(nullptr); assert(p.get() == 0); assert(p.get_deleter().state() == 5); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// unique_ptr(nullptr_t); + +#include +#include + +// default unique_ptr ctor should only require default Deleter ctor +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(void*) {} +}; + +int main() +{ + { + std::unique_ptr p(nullptr); + assert(p.get() == 0); + } + { + std::unique_ptr p(nullptr); + assert(p.get() == 0); + assert(p.get_deleter().state() == 5); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.fail.cpp index eaffc6dc2..08b7ef29b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.fail.cpp @@ -1 +1,35 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include // unique_ptr(pointer) ctor should require default Deleter ctor class Deleter { Deleter() {} public: Deleter(Deleter&) {} Deleter& operator=(Deleter&) {} void operator()(void*) const {} }; int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include + +// unique_ptr(pointer) ctor should require default Deleter ctor +class Deleter +{ + + Deleter() {} + +public: + + Deleter(Deleter&) {} + Deleter& operator=(Deleter&) {} + + void operator()(void*) const {} +}; + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.pass.cpp index 74f4f7fbf..b1c2b1208 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer01.pass.cpp @@ -1 +1,63 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer) ctor should only require default Deleter ctor struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); std::unique_ptr s(p); assert(s.get() == p); } assert(A::count == 0); { A* p = new A; assert(A::count == 1); std::unique_ptr s(p); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer) ctor should only require default Deleter ctor + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + std::unique_ptr s(p); + assert(s.get() == p); + } + assert(A::count == 0); + { + A* p = new A; + assert(A::count == 1); + std::unique_ptr s(p); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.fail.cpp index 7780932a4..d25470b4f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.fail.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include // unique_ptr(pointer) ctor should require non-reference Deleter ctor class Deleter { public: void operator()(void*) {} }; int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include + +// unique_ptr(pointer) ctor should require non-reference Deleter ctor +class Deleter +{ +public: + + void operator()(void*) {} +}; + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.pass.cpp index f8ff88d2e..7a5b75cba 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer02.pass.cpp @@ -1 +1,95 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer) ctor shouldn't require complete type struct A; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p); }; void check(int i); template > struct B { std::unique_ptr a_; explicit B(A*); ~B(); A* get() const {return a_.get();} D& get_deleter() {return a_.get_deleter();} }; A* get(); int main() { { A* p = get(); check(1); B<> s(p); assert(s.get() == p); } check(0); { A* p = get(); check(1); B s(p); assert(s.get() == p); assert(s.get_deleter().state() == 5); } check(0); } struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; A* get() {return new A;} void Deleter::operator()(A* p) {delete p;} void check(int i) { assert(A::count == i); } template B::B(A* a) : a_(a) {} template B::~B() {} \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer) ctor shouldn't require complete type + +struct A; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p); +}; + +void check(int i); + +template > +struct B +{ + std::unique_ptr a_; + explicit B(A*); + ~B(); + + A* get() const {return a_.get();} + D& get_deleter() {return a_.get_deleter();} +}; + +A* get(); + +int main() +{ + { + A* p = get(); + check(1); + B<> s(p); + assert(s.get() == p); + } + check(0); + { + A* p = get(); + check(1); + B s(p); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + check(0); +} + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +A* get() {return new A;} + +void Deleter::operator()(A* p) {delete p;} + +void check(int i) +{ + assert(A::count == i); +} + +template +B::B(A* a) : a_(a) {} + +template +B::~B() {} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.fail.cpp index f3f09535b..32e66471c 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include // unique_ptr(pointer) ctor should require non-pointer Deleter int main() { std::unique_ptr p(new int); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include + +// unique_ptr(pointer) ctor should require non-pointer Deleter + +int main() +{ + std::unique_ptr p(new int); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.pass.cpp index ef4542564..1608adee9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer03.pass.cpp @@ -1 +1,78 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer) ctor should work with derived pointers struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { B* p = new B; assert(A::count == 1); assert(B::count == 1); std::unique_ptr s(p); assert(s.get() == p); } assert(A::count == 0); assert(B::count == 0); { B* p = new B; assert(A::count == 1); assert(B::count == 1); std::unique_ptr s(p); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer) ctor should work with derived pointers + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + B* p = new B; + assert(A::count == 1); + assert(B::count == 1); + std::unique_ptr s(p); + assert(s.get() == p); + } + assert(A::count == 0); + assert(B::count == 0); + { + B* p = new B; + assert(A::count == 1); + assert(B::count == 1); + std::unique_ptr s(p); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01.pass.cpp index 8305a399a..1faff8726 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter01.pass.cpp @@ -1 +1,99 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer, deleter()) only requires MoveConstructible deleter struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; template class Deleter { int state_; #ifdef _LIBCPP_MOVE Deleter(const Deleter&); Deleter& operator=(const Deleter&); #else Deleter(Deleter&); Deleter& operator=(Deleter&); #endif public: #ifdef _LIBCPP_MOVE Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} Deleter& operator=(Deleter&& r) { state_ = r.state_; r.state_ = 0; return *this; } #else operator std::__rv() {return std::__rv(*this);} Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} Deleter& operator=(std::__rv r) { state_ = r->state_; r->state_ = 0; return *this; } #endif Deleter() : state_(5) {} #ifdef _LIBCPP_MOVE template Deleter(Deleter&& d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {d.set_state(0);} private: template Deleter(const Deleter& d, typename std::enable_if::value>::type* = 0); #else template Deleter(Deleter d, typename std::enable_if::value>::type* = 0) : state_(d.state()) {} #endif public: int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); std::unique_ptr > s(p, Deleter()); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer, deleter()) only requires MoveConstructible deleter + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +template +class Deleter +{ + int state_; + +#ifdef _LIBCPP_MOVE + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +#else // _LIBCPP_MOVE + Deleter(Deleter&); + Deleter& operator=(Deleter&); +#endif // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE + Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} + Deleter& operator=(Deleter&& r) + { + state_ = r.state_; + r.state_ = 0; + return *this; + } +#else // _LIBCPP_MOVE + operator std::__rv() {return std::__rv(*this);} + Deleter(std::__rv r) : state_(r->state_) {r->state_ = 0;} + Deleter& operator=(std::__rv r) + { + state_ = r->state_; + r->state_ = 0; + return *this; + } +#endif // _LIBCPP_MOVE + + Deleter() : state_(5) {} + +#ifdef _LIBCPP_MOVE + template + Deleter(Deleter&& d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {d.set_state(0);} + +private: + template + Deleter(const Deleter& d, + typename std::enable_if::value>::type* = 0); +#else // _LIBCPP_MOVE + template + Deleter(Deleter d, + typename std::enable_if::value>::type* = 0) + : state_(d.state()) {} +#endif // _LIBCPP_MOVE +public: + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + std::unique_ptr > s(p, Deleter()); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02.pass.cpp index e5c9e24a7..2372d9edb 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter02.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer, d) requires CopyConstructible deleter struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); d.set_state(6); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer, d) requires CopyConstructible deleter + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + d.set_state(6); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03.pass.cpp index d94eaaf2f..4ad22d495 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter03.pass.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer, d) does not requires CopyConstructible deleter struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(const Deleter&); Deleter& operator=(const Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); d.set_state(6); assert(s.get_deleter().state() == 6); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer, d) does not requires CopyConstructible deleter + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + d.set_state(6); + assert(s.get_deleter().state() == 6); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.fail.cpp index 0912ba9aa..6a617875f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.fail.cpp @@ -1 +1,55 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer, D()) should not compile struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) const {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); std::unique_ptr s(p, Deleter()); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer, D()) should not compile + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) const {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + std::unique_ptr s(p, Deleter()); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.pass.cpp index b5ff27025..3c03340ec 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter04.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer) ctor #include #include // unique_ptr(pointer, d) does not requires CopyConstructible deleter struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; class Deleter { int state_; Deleter(const Deleter&); Deleter& operator=(const Deleter&); public: Deleter() : state_(5) {} int state() const {return state_;} void set_state(int s) {state_ = s;} void operator()(A* p) const {delete p;} }; int main() { { A* p = new A; assert(A::count == 1); Deleter d; std::unique_ptr s(p, d); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer) ctor + +#include +#include + +// unique_ptr(pointer, d) does not requires CopyConstructible deleter + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +class Deleter +{ + int state_; + + Deleter(const Deleter&); + Deleter& operator=(const Deleter&); +public: + + Deleter() : state_(5) {} + + int state() const {return state_;} + void set_state(int s) {state_ = s;} + + void operator()(A* p) const {delete p;} +}; + +int main() +{ + { + A* p = new A; + assert(A::count == 1); + Deleter d; + std::unique_ptr s(p, d); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05.pass.cpp index 93d324285..37d4f125a 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter05.pass.cpp @@ -1 +1,66 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor #include #include // unique_ptr(pointer, deleter) should work with derived pointers struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; class Deleter { int state_; public: Deleter() : state_(5) {} int state() const {return state_;} void operator()(A* p) {delete p;} }; int main() { { B* p = new B; assert(A::count == 1); assert(B::count == 1); std::unique_ptr s(p, Deleter()); assert(s.get() == p); assert(s.get_deleter().state() == 5); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +#include +#include + +// unique_ptr(pointer, deleter) should work with derived pointers + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +class Deleter +{ + int state_; + +public: + Deleter() : state_(5) {} + + int state() const {return state_;} + + void operator()(A* p) {delete p;} +}; + +int main() +{ + { + B* p = new B; + assert(A::count == 1); + assert(B::count == 1); + std::unique_ptr s(p, Deleter()); + assert(s.get() == p); + assert(s.get_deleter().state() == 5); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06.pass.cpp index 527666fa4..e802e9e5d 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.ctor/pointer_deleter06.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test unique_ptr(pointer, deleter) ctor #include #include // unique_ptr(pointer, deleter) should work with function pointers // unique_ptr should work bool my_free_called = false; void my_free(void*) { my_free_called = true; } int main() { { int i = 0; std::unique_ptr s(&i, my_free); assert(s.get() == &i); assert(s.get_deleter() == my_free); assert(!my_free_called); } assert(my_free_called); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test unique_ptr(pointer, deleter) ctor + +#include +#include + +// unique_ptr(pointer, deleter) should work with function pointers +// unique_ptr should work + +bool my_free_called = false; + +void my_free(void*) +{ + my_free_called = true; +} + +int main() +{ + { + int i = 0; + std::unique_ptr s(&i, my_free); + assert(s.get() == &i); + assert(s.get_deleter() == my_free); + assert(!my_free_called); + } + assert(my_free_called); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null.pass.cpp index 20f3d00f4..a530351df 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.dtor/null.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // The deleter is not called if get() == 0 #include #include class Deleter { int state_; Deleter(Deleter&); Deleter& operator=(Deleter&); public: Deleter() : state_(0) {} int state() const {return state_;} void operator()(void*) {++state_;} }; int main() { Deleter d; assert(d.state() == 0); { std::unique_ptr p(0, d); assert(p.get() == 0); assert(&p.get_deleter() == &d); } assert(d.state() == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// The deleter is not called if get() == 0 + +#include +#include + +class Deleter +{ + int state_; + + Deleter(Deleter&); + Deleter& operator=(Deleter&); + +public: + Deleter() : state_(0) {} + + int state() const {return state_;} + + void operator()(void*) {++state_;} +}; + +int main() +{ + Deleter d; + assert(d.state() == 0); + { + std::unique_ptr p(0, d); + assert(p.get() == 0); + assert(&p.get_deleter() == &d); + } + assert(d.state() == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release.pass.cpp index da593d124..d0df6073d 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/release.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test release #include #include int main() { std::unique_ptr p(new int(3)); int* i = p.get(); int* j = p.release(); assert(p.get() == 0); assert(i == j); delete j; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test release + +#include +#include + +int main() +{ + std::unique_ptr p(new int(3)); + int* i = p.get(); + int* j = p.release(); + assert(p.get() == 0); + assert(i == j); + delete j; +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1.pass.cpp index 806b5d787..29419317b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset1.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test reset #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr p(new A); assert(A::count == 1); A* i = p.get(); p.reset(); assert(A::count == 0); assert(p.get() == 0); } assert(A::count == 0); { std::unique_ptr p(new A); assert(A::count == 1); A* i = p.get(); p.reset(new A); assert(A::count == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test reset + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr p(new A); + assert(A::count == 1); + A* i = p.get(); + p.reset(); + assert(A::count == 0); + assert(p.get() == 0); + } + assert(A::count == 0); + { + std::unique_ptr p(new A); + assert(A::count == 1); + A* i = p.get(); + p.reset(new A); + assert(A::count == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2.pass.cpp index 78da880bc..e43fa1a2b 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset2.pass.cpp @@ -1 +1,64 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test reset #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { std::unique_ptr p(new A); assert(A::count == 1); assert(B::count == 0); A* i = p.get(); p.reset(new B); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); { std::unique_ptr p(new B); assert(A::count == 1); assert(B::count == 1); A* i = p.get(); p.reset(new B); assert(A::count == 1); assert(B::count == 1); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test reset + +#include +#include + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + std::unique_ptr p(new A); + assert(A::count == 1); + assert(B::count == 0); + A* i = p.get(); + p.reset(new B); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); + { + std::unique_ptr p(new B); + assert(A::count == 1); + assert(B::count == 1); + A* i = p.get(); + p.reset(new B); + assert(A::count == 1); + assert(B::count == 1); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self.pass.cpp index c31c56fa1..23e419e5e 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/reset_self.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test reset against resetting self #include struct A { std::unique_ptr ptr_; A() : ptr_(this) {} void reset() {ptr_.reset();} }; int main() { (new A)->reset(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test reset against resetting self + +#include + +struct A +{ + std::unique_ptr ptr_; + + A() : ptr_(this) {} + void reset() {ptr_.reset();} +}; + +int main() +{ + (new A)->reset(); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap.pass.cpp index 853273aef..03ea92411 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.modifiers/swap.pass.cpp @@ -1 +1,59 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test swap #include #include #include "../../deleter.h" struct A { int state_; static int count; explicit A(int i) : state_(i) {++count;} A(const A& a) : state_(a.state_) {++count;} A& operator=(const A& a) {state_ = a.state_; return *this;} ~A() {--count;} friend bool operator==(const A& x, const A& y) {return x.state_ == y.state_;} }; int A::count = 0; int main() { { A* p1 = new A(1); std::unique_ptr > s1(p1, Deleter(1)); A* p2 = new A(2); std::unique_ptr > s2(p2, Deleter(2)); assert(s1.get() == p1); assert(*s1 == A(1)); assert(s1.get_deleter().state() == 1); assert(s2.get() == p2); assert(*s2 == A(2)); assert(s2.get_deleter().state() == 2); s1.swap(s2); assert(s1.get() == p2); assert(*s1 == A(2)); assert(s1.get_deleter().state() == 2); assert(s2.get() == p1); assert(*s2 == A(1)); assert(s2.get_deleter().state() == 1); assert(A::count == 2); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test swap + +#include +#include + +#include "../../deleter.h" + +struct A +{ + int state_; + static int count; + explicit A(int i) : state_(i) {++count;} + A(const A& a) : state_(a.state_) {++count;} + A& operator=(const A& a) {state_ = a.state_; return *this;} + ~A() {--count;} + + friend bool operator==(const A& x, const A& y) + {return x.state_ == y.state_;} +}; + +int A::count = 0; + +int main() +{ + { + A* p1 = new A(1); + std::unique_ptr > s1(p1, Deleter(1)); + A* p2 = new A(2); + std::unique_ptr > s2(p2, Deleter(2)); + assert(s1.get() == p1); + assert(*s1 == A(1)); + assert(s1.get_deleter().state() == 1); + assert(s2.get() == p2); + assert(*s2 == A(2)); + assert(s2.get_deleter().state() == 2); + s1.swap(s2); + assert(s1.get() == p2); + assert(*s1 == A(2)); + assert(s1.get_deleter().state() == 2); + assert(s2.get() == p1); + assert(*s2 == A(1)); + assert(s2.get_deleter().state() == 1); + assert(A::count == 2); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference.pass.cpp index 08092ec2a..b70f865d5 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/dereference.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op*() #include #include int main() { std::unique_ptr p(new int(3)); assert(*p == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op*() + +#include +#include + +int main() +{ + std::unique_ptr p(new int(3)); + assert(*p == 3); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool.pass.cpp index 3fbfb3826..7982f9e59 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/explicit_bool.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op*() #include #include int main() { { std::unique_ptr p(new int(3)); if (p) ; else assert(false); if (!p) assert(false); } { std::unique_ptr p; if (!p) ; else assert(false); if (p) assert(false); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op*() + +#include +#include + +int main() +{ + { + std::unique_ptr p(new int(3)); + if (p) + ; + else + assert(false); + if (!p) + assert(false); + } + { + std::unique_ptr p; + if (!p) + ; + else + assert(false); + if (p) + assert(false); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get.pass.cpp index d453724c0..62bc3269e 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test get #include #include int main() { int* p = new int; std::unique_ptr s(p); assert(s.get() == p); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test get + +#include +#include + +int main() +{ + int* p = new int; + std::unique_ptr s(p); + assert(s.get() == p); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp index 8cefe172f..34504b6b8 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/get_deleter.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test get_deleter() #include #include struct Deleter { void operator()(void*) {} int test() {return 5;} int test() const {return 6;} }; int main() { { std::unique_ptr p; assert(p.get_deleter().test() == 5); } { const std::unique_ptr p; assert(p.get_deleter().test() == 6); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test get_deleter() + +#include +#include + +struct Deleter +{ + void operator()(void*) {} + + int test() {return 5;} + int test() const {return 6;} +}; + +int main() +{ + { + std::unique_ptr p; + assert(p.get_deleter().test() == 5); + } + { + const std::unique_ptr p; + assert(p.get_deleter().test() == 6); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/index.fail.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/index.fail.cpp index 4e9657067..93807cc18 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/index.fail.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/index.fail.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op[](size_t) #include #include class A { int state_; static int next_; public: A() : state_(++next_) {} int get() const {return state_;} friend bool operator==(const A& x, int y) {return x.state_ == y;} A& operator=(int i) {state_ = i; return *this;} }; int A::next_ = 0; int main() { std::unique_ptr p(new A[3]); assert(p[0] == 1); assert(p[1] == 2); assert(p[2] == 3); p[0] = 3; p[1] = 2; p[2] = 1; assert(p[0] == 3); assert(p[1] == 2); assert(p[2] == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op[](size_t) + +#include +#include + +class A +{ + int state_; + static int next_; +public: + A() : state_(++next_) {} + int get() const {return state_;} + + friend bool operator==(const A& x, int y) + {return x.state_ == y;} + + A& operator=(int i) {state_ = i; return *this;} +}; + +int A::next_ = 0; + +int main() +{ + std::unique_ptr p(new A[3]); + assert(p[0] == 1); + assert(p[1] == 2); + assert(p[2] == 3); + p[0] = 3; + p[1] = 2; + p[2] = 1; + assert(p[0] == 3); + assert(p[1] == 2); + assert(p[2] == 1); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow.pass.cpp index 4a00ea233..eb63dc244 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.single/unique.ptr.single.observers/op_arrow.pass.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // test op->() #include #include struct A { int i_; A() : i_(7) {} }; int main() { std::unique_ptr p(new A); assert(p->i_ == 7); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// test op->() + +#include +#include + +struct A +{ + int i_; + + A() : i_(7) {} +}; + +int main() +{ + std::unique_ptr p(new A); + assert(p->i_ == 7); +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.special/eq.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.special/eq.pass.cpp index 683378ec1..595e5777f 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.special/eq.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.special/eq.pass.cpp @@ -1 +1,86 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // template // bool // operator==(const unique_ptr& x, const unique_ptr& y); // template // bool // operator!=(const unique_ptr& x, const unique_ptr& y); #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr > p1(new A); const std::unique_ptr > p2(new A); assert(!(p1 == p2)); assert(p1 != p2); } { const std::unique_ptr > p1(new A); const std::unique_ptr > p2(new B); assert(!(p1 == p2)); assert(p1 != p2); } { const std::unique_ptr > p1(new A[3]); const std::unique_ptr > p2(new A[3]); assert(!(p1 == p2)); assert(p1 != p2); } { const std::unique_ptr > p1(new A[3]); const std::unique_ptr > p2(new B[3]); assert(!(p1 == p2)); assert(p1 != p2); } { const std::unique_ptr > p1; const std::unique_ptr > p2; assert(p1 == p2); assert(!(p1 != p2)); } { const std::unique_ptr > p1; const std::unique_ptr > p2; assert(p1 == p2); assert(!(p1 != p2)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// template +// bool +// operator==(const unique_ptr& x, const unique_ptr& y); + +// template +// bool +// operator!=(const unique_ptr& x, const unique_ptr& y); + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr > p1(new A); + const std::unique_ptr > p2(new A); + assert(!(p1 == p2)); + assert(p1 != p2); + } + { + const std::unique_ptr > p1(new A); + const std::unique_ptr > p2(new B); + assert(!(p1 == p2)); + assert(p1 != p2); + } + { + const std::unique_ptr > p1(new A[3]); + const std::unique_ptr > p2(new A[3]); + assert(!(p1 == p2)); + assert(p1 != p2); + } + { + const std::unique_ptr > p1(new A[3]); + const std::unique_ptr > p2(new B[3]); + assert(!(p1 == p2)); + assert(p1 != p2); + } + { + const std::unique_ptr > p1; + const std::unique_ptr > p2; + assert(p1 == p2); + assert(!(p1 != p2)); + } + { + const std::unique_ptr > p1; + const std::unique_ptr > p2; + assert(p1 == p2); + assert(!(p1 != p2)); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.special/rel.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.special/rel.pass.cpp index 93052283a..a9a197be9 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.special/rel.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.special/rel.pass.cpp @@ -1 +1,100 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // template // bool // operator< (const unique_ptr& x, const unique_ptr& y); // template // bool // operator> (const unique_ptr& x, const unique_ptr& y); // template // bool // operator<=(const unique_ptr& x, const unique_ptr& y); // template // bool // operator>=(const unique_ptr& x, const unique_ptr& y); #include #include #include "../deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} virtual ~A() {--count;} }; int A::count = 0; struct B : public A { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; int main() { { const std::unique_ptr > p1(new A); const std::unique_ptr > p2(new A); assert((p1 < p2) == !(p1 > p2)); assert((p1 < p2) == (p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } { const std::unique_ptr > p1(new A); const std::unique_ptr > p2(new B); assert((p1 < p2) == !(p1 > p2)); assert((p1 < p2) == (p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } { const std::unique_ptr > p1(new A[3]); const std::unique_ptr > p2(new A[3]); assert((p1 < p2) == !(p1 > p2)); assert((p1 < p2) == (p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } { const std::unique_ptr > p1(new A[3]); const std::unique_ptr > p2(new B[3]); assert((p1 < p2) == !(p1 > p2)); assert((p1 < p2) == (p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } { const std::unique_ptr > p1; const std::unique_ptr > p2; assert((p1 < p2) == (p1 > p2)); assert((p1 < p2) == !(p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } { const std::unique_ptr > p1; const std::unique_ptr > p2; assert((p1 < p2) == (p1 > p2)); assert((p1 < p2) == !(p1 <= p2)); assert((p1 < p2) == !(p1 >= p2)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// template +// bool +// operator< (const unique_ptr& x, const unique_ptr& y); + +// template +// bool +// operator> (const unique_ptr& x, const unique_ptr& y); + +// template +// bool +// operator<=(const unique_ptr& x, const unique_ptr& y); + +// template +// bool +// operator>=(const unique_ptr& x, const unique_ptr& y); + +#include +#include + +#include "../deleter.h" + +struct A +{ + static int count; + A() {++count;} + A(const A&) {++count;} + virtual ~A() {--count;} +}; + +int A::count = 0; + +struct B + : public A +{ + static int count; + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +int main() +{ + { + const std::unique_ptr > p1(new A); + const std::unique_ptr > p2(new A); + assert((p1 < p2) == !(p1 > p2)); + assert((p1 < p2) == (p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } + { + const std::unique_ptr > p1(new A); + const std::unique_ptr > p2(new B); + assert((p1 < p2) == !(p1 > p2)); + assert((p1 < p2) == (p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } + { + const std::unique_ptr > p1(new A[3]); + const std::unique_ptr > p2(new A[3]); + assert((p1 < p2) == !(p1 > p2)); + assert((p1 < p2) == (p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } + { + const std::unique_ptr > p1(new A[3]); + const std::unique_ptr > p2(new B[3]); + assert((p1 < p2) == !(p1 > p2)); + assert((p1 < p2) == (p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } + { + const std::unique_ptr > p1; + const std::unique_ptr > p2; + assert((p1 < p2) == (p1 > p2)); + assert((p1 < p2) == !(p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } + { + const std::unique_ptr > p1; + const std::unique_ptr > p2; + assert((p1 < p2) == (p1 > p2)); + assert((p1 < p2) == !(p1 <= p2)); + assert((p1 < p2) == !(p1 >= p2)); + } +} diff --git a/test/utilities/memory/unique.ptr/unique.ptr.special/swap.pass.cpp b/test/utilities/memory/unique.ptr/unique.ptr.special/swap.pass.cpp index c0bdfea88..a38910e56 100644 --- a/test/utilities/memory/unique.ptr/unique.ptr.special/swap.pass.cpp +++ b/test/utilities/memory/unique.ptr/unique.ptr.special/swap.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // unique_ptr // Test swap #include #include #include "../deleter.h" struct A { int state_; static int count; A() : state_(0) {++count;} explicit A(int i) : state_(i) {++count;} A(const A& a) : state_(a.state_) {++count;} A& operator=(const A& a) {state_ = a.state_; return *this;} ~A() {--count;} friend bool operator==(const A& x, const A& y) {return x.state_ == y.state_;} }; int A::count = 0; int main() { { A* p1 = new A(1); std::unique_ptr > s1(p1, Deleter(1)); A* p2 = new A(2); std::unique_ptr > s2(p2, Deleter(2)); assert(s1.get() == p1); assert(*s1 == A(1)); assert(s1.get_deleter().state() == 1); assert(s2.get() == p2); assert(*s2 == A(2)); assert(s2.get_deleter().state() == 2); swap(s1, s2); assert(s1.get() == p2); assert(*s1 == A(2)); assert(s1.get_deleter().state() == 2); assert(s2.get() == p1); assert(*s2 == A(1)); assert(s2.get_deleter().state() == 1); assert(A::count == 2); } assert(A::count == 0); { A* p1 = new A[3]; std::unique_ptr > s1(p1, Deleter(1)); A* p2 = new A[3]; std::unique_ptr > s2(p2, Deleter(2)); assert(s1.get() == p1); assert(s1.get_deleter().state() == 1); assert(s2.get() == p2); assert(s2.get_deleter().state() == 2); swap(s1, s2); assert(s1.get() == p2); assert(s1.get_deleter().state() == 2); assert(s2.get() == p1); assert(s2.get_deleter().state() == 1); assert(A::count == 6); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// unique_ptr + +// Test swap + +#include +#include + +#include "../deleter.h" + +struct A +{ + int state_; + static int count; + A() : state_(0) {++count;} + explicit A(int i) : state_(i) {++count;} + A(const A& a) : state_(a.state_) {++count;} + A& operator=(const A& a) {state_ = a.state_; return *this;} + ~A() {--count;} + + friend bool operator==(const A& x, const A& y) + {return x.state_ == y.state_;} +}; + +int A::count = 0; + +int main() +{ + { + A* p1 = new A(1); + std::unique_ptr > s1(p1, Deleter(1)); + A* p2 = new A(2); + std::unique_ptr > s2(p2, Deleter(2)); + assert(s1.get() == p1); + assert(*s1 == A(1)); + assert(s1.get_deleter().state() == 1); + assert(s2.get() == p2); + assert(*s2 == A(2)); + assert(s2.get_deleter().state() == 2); + swap(s1, s2); + assert(s1.get() == p2); + assert(*s1 == A(2)); + assert(s1.get_deleter().state() == 2); + assert(s2.get() == p1); + assert(*s2 == A(1)); + assert(s2.get_deleter().state() == 1); + assert(A::count == 2); + } + assert(A::count == 0); + { + A* p1 = new A[3]; + std::unique_ptr > s1(p1, Deleter(1)); + A* p2 = new A[3]; + std::unique_ptr > s2(p2, Deleter(2)); + assert(s1.get() == p1); + assert(s1.get_deleter().state() == 1); + assert(s2.get() == p2); + assert(s2.get_deleter().state() == 2); + swap(s1, s2); + assert(s1.get() == p2); + assert(s1.get_deleter().state() == 2); + assert(s2.get() == p1); + assert(s2.get_deleter().state() == 1); + assert(A::count == 6); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/nothing_to_do.pass.cpp b/test/utilities/memory/util.smartptr/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/util.smartptr/nothing_to_do.pass.cpp +++ b/test/utilities/memory/util.smartptr/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp index d4618719c..c3aa6b065 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // template // class enable_shared_from_this // { // protected: // enable_shared_from_this(); // enable_shared_from_this(enable_shared_from_this const&); // enable_shared_from_this& operator=(enable_shared_from_this const&); // ~enable_shared_from_this(); // public: // shared_ptr shared_from_this(); // shared_ptr shared_from_this() const; // }; #include #include struct T : public std::enable_shared_from_this { }; struct Y : T {}; struct Z : Y {}; int main() { { std::shared_ptr p(new Z); std::shared_ptr q = p->shared_from_this(); assert(p == q); assert(!p.owner_before(q) && !q.owner_before(p)); // p and q share ownership } { std::shared_ptr p = std::make_shared(); std::shared_ptr q = p->shared_from_this(); assert(p == q); assert(!p.owner_before(q) && !q.owner_before(p)); // p and q share ownership } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// template +// class enable_shared_from_this +// { +// protected: +// enable_shared_from_this(); +// enable_shared_from_this(enable_shared_from_this const&); +// enable_shared_from_this& operator=(enable_shared_from_this const&); +// ~enable_shared_from_this(); +// public: +// shared_ptr shared_from_this(); +// shared_ptr shared_from_this() const; +// }; + +#include +#include + +struct T + : public std::enable_shared_from_this +{ +}; + +struct Y : T {}; + +struct Z : Y {}; + +int main() +{ + { + std::shared_ptr p(new Z); + std::shared_ptr q = p->shared_from_this(); + assert(p == q); + assert(!p.owner_before(q) && !q.owner_before(p)); // p and q share ownership + } + { + std::shared_ptr p = std::make_shared(); + std::shared_ptr q = p->shared_from_this(); + assert(p == q); + assert(!p.owner_before(q) && !q.owner_before(p)); // p and q share ownership + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr.pass.cpp index 9912d1b8f..ec12d286f 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_shared_ptr.pass.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct hash> // { // typedef shared_ptr argument_type; // typedef size_t result_type; // size_t operator()(const shared_ptr& p) const; // }; #include #include int main() { int* ptr = new int; std::shared_ptr p(ptr); std::hash > f; std::size_t h = f(p); assert(h == std::hash()(ptr)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct hash> +// { +// typedef shared_ptr argument_type; +// typedef size_t result_type; +// size_t operator()(const shared_ptr& p) const; +// }; + +#include +#include + +int main() +{ + int* ptr = new int; + std::shared_ptr p(ptr); + std::hash > f; + std::size_t h = f(p); + assert(h == std::hash()(ptr)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp index 0541e57a8..c8e13b2bc 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template // struct hash> // { // typedef unique_ptr argument_type; // typedef size_t result_type; // size_t operator()(const unique_ptr& p) const; // }; #include #include int main() { int* ptr = new int; std::unique_ptr p(ptr); std::hash > f; std::size_t h = f(p); assert(h == std::hash()(ptr)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template +// struct hash> +// { +// typedef unique_ptr argument_type; +// typedef size_t result_type; +// size_t operator()(const unique_ptr& p) const; +// }; + +#include +#include + +int main() +{ + int* ptr = new int; + std::unique_ptr p(ptr); + std::hash > f; + std::size_t h = f(p); + assert(h == std::hash()(ptr)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/test_allocator.h b/test/utilities/memory/util.smartptr/util.smartptr.shared/test_allocator.h index 0c1eaf3dc..795f6e1f7 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/test_allocator.h +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/test_allocator.h @@ -74,4 +74,4 @@ public: {return !(x == y);} }; -#endif +#endif // TEST_ALLOCATOR_H diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/test_deleter.h b/test/utilities/memory/util.smartptr/util.smartptr.shared/test_deleter.h index b9aeeebcd..0a8b08eeb 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/test_deleter.h +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/test_deleter.h @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // Example move-only deleter #ifndef DELETER_H #define DELETER_H #include #include struct test_deleter_base { static int count; static int dealloc_count; }; int test_deleter_base::count = 0; int test_deleter_base::dealloc_count = 0; template class test_deleter : public test_deleter_base { int state_; public: test_deleter() : state_(0) {++count;} explicit test_deleter(int s) : state_(s) {++count;} test_deleter(const test_deleter& d) : state_(d.state_) {++count;} ~test_deleter() {assert(state_ >= 0); --count; state_ = -1;} int state() const {return state_;} void set_state(int i) {state_ = i;} void operator()(T* p) {assert(state_ >= 0); ++dealloc_count; delete p;} }; template void swap(test_deleter& x, test_deleter& y) { test_deleter t(std::move(x)); x = std::move(y); y = std::move(t); } #endif \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// Example move-only deleter + +#ifndef DELETER_H +#define DELETER_H + +#include +#include + +struct test_deleter_base +{ + static int count; + static int dealloc_count; +}; + +int test_deleter_base::count = 0; +int test_deleter_base::dealloc_count = 0; + +template +class test_deleter + : public test_deleter_base +{ + int state_; + +public: + + test_deleter() : state_(0) {++count;} + explicit test_deleter(int s) : state_(s) {++count;} + test_deleter(const test_deleter& d) + : state_(d.state_) {++count;} + ~test_deleter() {assert(state_ >= 0); --count; state_ = -1;} + + int state() const {return state_;} + void set_state(int i) {state_ = i;} + + void operator()(T* p) {assert(state_ >= 0); ++dealloc_count; delete p;} +}; + +template +void +swap(test_deleter& x, test_deleter& y) +{ + test_deleter t(std::move(x)); + x = std::move(y); + y = std::move(t); +} + +#endif // DELETER_H diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp index 09aa877d2..ff1424c5c 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/types.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template class shared_ptr // { // public: // typedef T element_type; // ... // }; #include struct A; // purposefully incomplete int main() { static_assert((std::is_same::element_type, A>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template class shared_ptr +// { +// public: +// typedef T element_type; +// ... +// }; + +#include + +struct A; // purposefully incomplete + +int main() +{ + static_assert((std::is_same::element_type, A>::value), ""); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter.pass.cpp index e12dc2fa6..84356569c 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.getdeleter/get_deleter.pass.cpp @@ -1 +1,67 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template D* get_deleter(const shared_ptr& p); #include #include #include "../test_deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { { A* ptr = new A; std::shared_ptr p(ptr, test_deleter(3)); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } test_deleter::dealloc_count = 0; { { std::shared_ptr p(nullptr, test_deleter(3)); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } test_deleter::dealloc_count = 0; { std::shared_ptr p(nullptr, test_deleter(3)); std::default_delete* d = std::get_deleter >(p); assert(d == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template D* get_deleter(const shared_ptr& p); + +#include +#include +#include "../test_deleter.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + { + A* ptr = new A; + std::shared_ptr p(ptr, test_deleter(3)); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + } + test_deleter::dealloc_count = 0; + { + { + std::shared_ptr p(nullptr, test_deleter(3)); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + } + test_deleter::dealloc_count = 0; + { + std::shared_ptr p(nullptr, test_deleter(3)); + std::default_delete* d = std::get_deleter >(p); + assert(d == 0); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp index 09a95ec24..277328233 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/auto_ptr_Y.pass.cpp @@ -1 +1,113 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr& operator=(auto_ptr&& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::auto_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::auto_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::auto_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::auto_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr& operator=(auto_ptr&& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::auto_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::auto_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::auto_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::auto_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr.pass.cpp index 8e1bb81af..45dbc060e 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr.pass.cpp @@ -1 +1,121 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // shared_ptr& operator=(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new A); pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 2); assert(pA.use_count() == 2); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new A); pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 2); assert(pA.use_count() == 2); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// shared_ptr& operator=(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new A); + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new A); + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y.pass.cpp index a13b1fd2f..be6b16595 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y.pass.cpp @@ -1 +1,121 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr& operator=(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 2); assert(pA.use_count() == 2); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 2); assert(pA.use_count() == 2); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { const std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = pA; assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr& operator=(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + const std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = pA; + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv.pass.cpp index e4142cda7..8a72f6c01 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_Y_rv.pass.cpp @@ -1 +1,121 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr& operator=(shared_ptr&& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr& operator=(shared_ptr&& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv.pass.cpp index d2691b067..3e8a51fcc 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/shared_ptr_rv.pass.cpp @@ -1 +1,121 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // shared_ptr& operator=(shared_ptr&& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new A); pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new A); pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// shared_ptr& operator=(shared_ptr&& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new A); + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new A); + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y.pass.cpp index 75b20bfd1..11ad60211 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.assign/unique_ptr_Y.pass.cpp @@ -1 +1,113 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr& operator=(unique_ptr&& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::unique_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB(new B); pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::unique_ptr pA(new A); A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::unique_ptr pA; A* ptrA = pA.get(); { std::shared_ptr pB; pB = std::move(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 1); assert(pA.get() == 0); assert(pB.get() == ptrA); } assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr& operator=(unique_ptr&& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::unique_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB(new B); + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::unique_ptr pA(new A); + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::unique_ptr pA; + A* ptrA = pA.get(); + { + std::shared_ptr pB; + pB = std::move(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 1); + assert(pA.get() == 0); + assert(pB.get() == ptrA); + } + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp index 0196cf9b2..9b98af0ed 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/const_pointer_cast.pass.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr const_pointer_cast(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pA(new A); std::shared_ptr pB = std::const_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } { const std::shared_ptr pA; std::shared_ptr pB = std::const_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr const_pointer_cast(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pA(new A); + std::shared_ptr pB = std::const_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } + { + const std::shared_ptr pA; + std::shared_ptr pB = std::const_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp index ad2b6a4b7..1f99c8c99 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/dynamic_pointer_cast.pass.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr dynamic_pointer_cast(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pB(new A); std::shared_ptr pA = std::dynamic_pointer_cast(pB); assert(pA.get() == pB.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } { const std::shared_ptr pB(new B); std::shared_ptr pA = std::dynamic_pointer_cast(pB); assert(pA.get() == 0); assert(pA.use_count() == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr dynamic_pointer_cast(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pB(new A); + std::shared_ptr pA = std::dynamic_pointer_cast(pB); + assert(pA.get() == pB.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } + { + const std::shared_ptr pB(new B); + std::shared_ptr pA = std::dynamic_pointer_cast(pB); + assert(pA.get() == 0); + assert(pA.use_count() == 0); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp index 03146c1c4..f67c54b43 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cast/static_pointer_cast.pass.cpp @@ -1 +1,69 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr static_pointer_cast(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pA(new A); std::shared_ptr pB = std::static_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } { const std::shared_ptr pA(new A); std::shared_ptr pB = std::static_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } { const std::shared_ptr pA; std::shared_ptr pB = std::static_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } { const std::shared_ptr pA; std::shared_ptr pB = std::static_pointer_cast(pA); assert(pB.get() == pA.get()); assert(!pB.owner_before(pA) && !pA.owner_before(pB)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr static_pointer_cast(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pA(new A); + std::shared_ptr pB = std::static_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } + { + const std::shared_ptr pA(new A); + std::shared_ptr pB = std::static_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } + { + const std::shared_ptr pA; + std::shared_ptr pB = std::static_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } + { + const std::shared_ptr pA; + std::shared_ptr pB = std::static_pointer_cast(pA); + assert(pB.get() == pA.get()); + assert(!pB.owner_before(pA) && !pA.owner_before(pB)); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq.pass.cpp index a8ae78813..692dec7dc 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/eq.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template bool operator==(const shared_ptr& a, const shared_ptr& b); // template bool operator!=(const shared_ptr& a, const shared_ptr& b); #include #include void do_nothing(int*) {} int main() { int* ptr1(new int); int* ptr2(new int); const std::shared_ptr p1(ptr1); const std::shared_ptr p2(ptr2); const std::shared_ptr p3(ptr2, do_nothing); assert(p1 != p2); assert(p2 == p3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template bool operator==(const shared_ptr& a, const shared_ptr& b); +// template bool operator!=(const shared_ptr& a, const shared_ptr& b); + +#include +#include + +void do_nothing(int*) {} + +int main() +{ + int* ptr1(new int); + int* ptr2(new int); + const std::shared_ptr p1(ptr1); + const std::shared_ptr p2(ptr2); + const std::shared_ptr p3(ptr2, do_nothing); + assert(p1 != p2); + assert(p2 == p3); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt.pass.cpp index e5a94e932..8c328fdc9 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.cmp/lt.pass.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template bool operator<(const shared_ptr& a, const shared_ptr& b); #include #include void do_nothing(int*) {} int main() { int* ptr1(new int); int* ptr2(new int); const std::shared_ptr p1(ptr1); const std::shared_ptr p2(ptr2); const std::shared_ptr p3(ptr2, do_nothing); assert((p1 < p2) == (ptr1 < ptr2)); assert(!(p2 < p3) && !(p3 < p2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template bool operator<(const shared_ptr& a, const shared_ptr& b); + +#include +#include + +void do_nothing(int*) {} + +int main() +{ + int* ptr1(new int); + int* ptr2(new int); + const std::shared_ptr p1(ptr1); + const std::shared_ptr p2(ptr2); + const std::shared_ptr p3(ptr2, do_nothing); + assert((p1 < p2) == (ptr1 < ptr2)); + assert(!(p2 < p3) && !(p3 < p2)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp index eca837221..dcc594e13 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/auto_ptr.pass.cpp @@ -1 +1,94 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template explicit shared_ptr(auto_ptr&& r); #include #include #include #include bool throw_next = false; void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_next) throw std::bad_alloc(); return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::auto_ptr ptr(new A); A* raw_ptr = ptr.get(); #ifdef _LIBCPP_MOVE std::shared_ptr p(std::move(ptr)); #else std::shared_ptr p(ptr); #endif assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == raw_ptr); assert(ptr.get() == 0); } assert(A::count == 0); { std::auto_ptr ptr(new A); A* raw_ptr = ptr.get(); throw_next = true; try { #ifdef _LIBCPP_MOVE std::shared_ptr p(std::move(ptr)); #else std::shared_ptr p(ptr); #endif assert(false); } catch (...) { assert(A::count == 1); assert(B::count == 1); assert(ptr.get() == raw_ptr); } } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template explicit shared_ptr(auto_ptr&& r); + +#include +#include +#include +#include + +bool throw_next = false; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + if (throw_next) + throw std::bad_alloc(); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::auto_ptr ptr(new A); + A* raw_ptr = ptr.get(); +#ifdef _LIBCPP_MOVE + std::shared_ptr p(std::move(ptr)); +#else + std::shared_ptr p(ptr); +#endif + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == raw_ptr); + assert(ptr.get() == 0); + } + assert(A::count == 0); + { + std::auto_ptr ptr(new A); + A* raw_ptr = ptr.get(); + throw_next = true; + try + { +#ifdef _LIBCPP_MOVE + std::shared_ptr p(std::move(ptr)); +#else + std::shared_ptr p(ptr); +#endif + assert(false); + } + catch (...) + { + assert(A::count == 1); + assert(B::count == 1); + assert(ptr.get() == raw_ptr); + } + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp index fa55289d9..50f3195de 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/default.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr(); #include #include int main() { std::shared_ptr p; assert(p.use_count() == 0); assert(p.get() == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr(); + +#include +#include + +int main() +{ + std::shared_ptr p; + assert(p.use_count() == 0); + assert(p.get() == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t.pass.cpp index 6853ca698..4a442157d 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr(nullptr_t) #include #include int main() { std::shared_ptr p(nullptr); assert(p.use_count() == 0); assert(p.get() == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr(nullptr_t) + +#include +#include + +int main() +{ + std::shared_ptr p(nullptr); + assert(p.use_count() == 0); + assert(p.get() == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp index 6e75c3f2e..025d09f55 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(nullptr_t, D d); #include #include #include "../test_deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(nullptr, test_deleter(3)); assert(A::count == 0); assert(p.use_count() == 1); assert(p.get() == 0); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(nullptr_t, D d); + +#include +#include +#include "../test_deleter.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(nullptr, test_deleter(3)); + assert(A::count == 0); + assert(p.use_count() == 1); + assert(p.get() == 0); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp index c27df0e9a..1eeb3cefc 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template shared_ptr(nullptr_t, D d, A a); #include #include #include "../test_deleter.h" #include "../test_allocator.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(nullptr, test_deleter(3), test_allocator(5)); assert(A::count == 0); assert(p.use_count() == 1); assert(p.get() == 0); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); assert(test_allocator::count == 1); assert(test_allocator::alloc_count == 1); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template shared_ptr(nullptr_t, D d, A a); + +#include +#include +#include "../test_deleter.h" +#include "../test_allocator.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(nullptr, test_deleter(3), test_allocator(5)); + assert(A::count == 0); + assert(p.use_count() == 1); + assert(p.get() == 0); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + assert(test_allocator::count == 1); + assert(test_allocator::alloc_count == 1); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw.pass.cpp index 017fa7aaa..e3f1a5a8e 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_allocator_throw.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template shared_ptr(nullptr_t, D d, A a); #include #include #include "../test_deleter.h" #include "../test_allocator.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { try { test_allocator::throw_after = 0; std::shared_ptr p(nullptr, test_deleter(3), test_allocator(5)); assert(false); } catch (std::bad_alloc&) { assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template shared_ptr(nullptr_t, D d, A a); + +#include +#include +#include "../test_deleter.h" +#include "../test_allocator.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + try + { + test_allocator::throw_after = 0; + std::shared_ptr p(nullptr, test_deleter(3), test_allocator(5)); + assert(false); + } + catch (std::bad_alloc&) + { + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp index 86e9e7a14..878c41787 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/nullptr_t_deleter_throw.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(nullptr_t, D d); #include #include #include #include #include "../test_deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; bool throw_next = false; void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_next) throw std::bad_alloc(); return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } int main() { throw_next = true; try { std::shared_ptr p(nullptr, test_deleter(3)); assert(false); } catch (std::bad_alloc&) { assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(nullptr_t, D d); + +#include +#include +#include +#include +#include "../test_deleter.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +bool throw_next = false; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + if (throw_next) + throw std::bad_alloc(); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +int main() +{ + throw_next = true; + try + { + std::shared_ptr p(nullptr, test_deleter(3)); + assert(false); + } + catch (std::bad_alloc&) + { + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp index 28a5a57ed..ed6396ef7 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template explicit shared_ptr(Y* p); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr = new A; std::shared_ptr p(ptr); assert(A::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); } assert(A::count == 0); { A* ptr = new A; std::shared_ptr p(ptr); assert(A::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template explicit shared_ptr(Y* p); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr = new A; + std::shared_ptr p(ptr); + assert(A::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + } + assert(A::count == 0); + { + A* ptr = new A; + std::shared_ptr p(ptr); + assert(A::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp index 9db6b0c8d..d75d46ad6 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(Y* p, D d); #include #include #include "../test_deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr = new A; std::shared_ptr p(ptr, test_deleter(3)); assert(A::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(Y* p, D d); + +#include +#include +#include "../test_deleter.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr = new A; + std::shared_ptr p(ptr, test_deleter(3)); + assert(A::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp index e340c76e2..08d1d6f84 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator.pass.cpp @@ -1 +1,51 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template shared_ptr(Y* p, D d, A a); #include #include #include "../test_deleter.h" #include "../test_allocator.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr = new A; std::shared_ptr p(ptr, test_deleter(3), test_allocator(5)); assert(A::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); assert(test_allocator::count == 1); assert(test_allocator::alloc_count == 1); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template shared_ptr(Y* p, D d, A a); + +#include +#include +#include "../test_deleter.h" +#include "../test_allocator.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr = new A; + std::shared_ptr p(ptr, test_deleter(3), test_allocator(5)); + assert(A::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + assert(test_allocator::count == 1); + assert(test_allocator::alloc_count == 1); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw.pass.cpp index 4fd7f6c13..5b738c896 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_allocator_throw.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template shared_ptr(Y* p, D d, A a); #include #include #include "../test_deleter.h" #include "../test_allocator.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { A* ptr = new A; try { test_allocator::throw_after = 0; std::shared_ptr p(ptr, test_deleter(3), test_allocator(5)); assert(false); } catch (std::bad_alloc&) { assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template shared_ptr(Y* p, D d, A a); + +#include +#include +#include "../test_deleter.h" +#include "../test_allocator.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + A* ptr = new A; + try + { + test_allocator::throw_after = 0; + std::shared_ptr p(ptr, test_deleter(3), test_allocator(5)); + assert(false); + } + catch (std::bad_alloc&) + { + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp index 5596cdaec..ba723e3f6 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_deleter_throw.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(Y* p, D d); #include #include #include #include #include "../test_deleter.h" struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; bool throw_next = false; void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_next) throw std::bad_alloc(); return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } int main() { A* ptr = new A; throw_next = true; try { std::shared_ptr p(ptr, test_deleter(3)); assert(false); } catch (std::bad_alloc&) { assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(Y* p, D d); + +#include +#include +#include +#include +#include "../test_deleter.h" + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +bool throw_next = false; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + if (throw_next) + throw std::bad_alloc(); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +int main() +{ + A* ptr = new A; + throw_next = true; + try + { + std::shared_ptr p(ptr, test_deleter(3)); + assert(false); + } + catch (std::bad_alloc&) + { + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp index 4b47a5c0a..298b9b404 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/pointer_throw.pass.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template explicit shared_ptr(Y* p); #include #include #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; bool throw_next = false; void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_next) throw std::bad_alloc(); return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } int main() { { A* ptr = new A; throw_next = true; assert(A::count == 1); try { std::shared_ptr p(ptr); assert(false); } catch (std::bad_alloc&) { assert(A::count == 0); } } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template explicit shared_ptr(Y* p); + +#include +#include +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +bool throw_next = false; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + if (throw_next) + throw std::bad_alloc(); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +int main() +{ + { + A* ptr = new A; + throw_next = true; + assert(A::count == 1); + try + { + std::shared_ptr p(ptr); + assert(false); + } + catch (std::bad_alloc&) + { + assert(A::count == 0); + } + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr.pass.cpp index 0ee5cca1d..9a1d8e5e6 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // shared_ptr(const shared_ptr& r); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr pA(new A); assert(pA.use_count() == 1); assert(A::count == 1); { std::shared_ptr pA2(pA); assert(A::count == 1); assert(pA.use_count() == 2); assert(pA2.use_count() == 2); assert(pA2.get() == pA.get()); } assert(pA.use_count() == 1); assert(A::count == 1); } assert(A::count == 0); { std::shared_ptr pA; assert(pA.use_count() == 0); assert(A::count == 0); { std::shared_ptr pA2(pA); assert(A::count == 0); assert(pA.use_count() == 0); assert(pA2.use_count() == 0); assert(pA2.get() == pA.get()); } assert(pA.use_count() == 0); assert(A::count == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// shared_ptr(const shared_ptr& r); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + assert(A::count == 1); + { + std::shared_ptr pA2(pA); + assert(A::count == 1); + assert(pA.use_count() == 2); + assert(pA2.use_count() == 2); + assert(pA2.get() == pA.get()); + } + assert(pA.use_count() == 1); + assert(A::count == 1); + } + assert(A::count == 0); + { + std::shared_ptr pA; + assert(pA.use_count() == 0); + assert(A::count == 0); + { + std::shared_ptr pA2(pA); + assert(A::count == 0); + assert(pA.use_count() == 0); + assert(pA2.use_count() == 0); + assert(pA2.get() == pA.get()); + } + assert(pA.use_count() == 0); + assert(A::count == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y.pass.cpp index a2bc56202..ca44ea621 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y.pass.cpp @@ -1 +1,97 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; struct C { static int count; C() {++count;} C(const C&) {++count;} virtual ~C() {--count;} }; int C::count = 0; int main() { static_assert(( std::is_convertible, std::shared_ptr >::value), ""); static_assert((!std::is_convertible, std::shared_ptr >::value), ""); static_assert((!std::is_convertible, std::shared_ptr >::value), ""); { const std::shared_ptr pA(new A); assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); { std::shared_ptr pB(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 2); assert(pA.use_count() == 2); assert(pA.get() == pB.get()); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +struct C +{ + static int count; + + C() {++count;} + C(const C&) {++count;} + virtual ~C() {--count;} +}; + +int C::count = 0; + +int main() +{ + static_assert(( std::is_convertible, std::shared_ptr >::value), ""); + static_assert((!std::is_convertible, std::shared_ptr >::value), ""); + static_assert((!std::is_convertible, std::shared_ptr >::value), ""); + { + const std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + { + std::shared_ptr pB(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); + assert(pA.get() == pB.get()); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv.pass.cpp index a7b1b1cff..7f9c142af 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_Y_rv.pass.cpp @@ -1 +1,109 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(shared_ptr&& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; struct C { static int count; C() {++count;} C(const C&) {++count;} virtual ~C() {--count;} }; int C::count = 0; int main() { static_assert(( std::is_convertible, std::shared_ptr >::value), ""); static_assert((!std::is_convertible, std::shared_ptr >::value), ""); static_assert((!std::is_convertible, std::shared_ptr >::value), ""); { std::shared_ptr pA(new A); assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); { B* p = pA.get(); std::shared_ptr pB(std::move(pA)); assert(B::count == 1); assert(A::count == 1); #ifdef _LIBCPP_MOVE assert(pB.use_count() == 1); assert(pA.use_count() == 0); #else assert(pB.use_count() == 2); assert(pA.use_count() == 2); #endif assert(p == pB.get()); } #ifdef _LIBCPP_MOVE assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); #else assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); #endif } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); assert(pA.get() == pB.get()); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(shared_ptr&& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +struct C +{ + static int count; + + C() {++count;} + C(const C&) {++count;} + virtual ~C() {--count;} +}; + +int C::count = 0; + +int main() +{ + static_assert(( std::is_convertible, std::shared_ptr >::value), ""); + static_assert((!std::is_convertible, std::shared_ptr >::value), ""); + static_assert((!std::is_convertible, std::shared_ptr >::value), ""); + { + std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + { + B* p = pA.get(); + std::shared_ptr pB(std::move(pA)); + assert(B::count == 1); + assert(A::count == 1); +#ifdef _LIBCPP_MOVE + assert(pB.use_count() == 1); + assert(pA.use_count() == 0); +#else // _LIBCPP_MOVE + assert(pB.use_count() == 2); + assert(pA.use_count() == 2); +#endif // _LIBCPP_MOVE + assert(p == pB.get()); + } +#ifdef _LIBCPP_MOVE + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); +#else // _LIBCPP_MOVE + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); +#endif // _LIBCPP_MOVE + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + assert(pA.get() == pB.get()); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp index 565d77ff7..6c2ee0a82 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_pointer.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr(const shared_ptr& r, T *p); #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} ~B() {--count;} }; int B::count = 0; struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr pA(new A); assert(pA.use_count() == 1); { B b; std::shared_ptr pB(pA, &b); assert(A::count == 1); assert(B::count == 1); assert(pA.use_count() == 2); assert(pB.use_count() == 2); assert(pB.get() == &b); } assert(pA.use_count() == 1); assert(A::count == 1); assert(B::count == 0); } assert(A::count == 0); assert(B::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr(const shared_ptr& r, T *p); + +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + ~B() {--count;} +}; + +int B::count = 0; + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + { + B b; + std::shared_ptr pB(pA, &b); + assert(A::count == 1); + assert(B::count == 1); + assert(pA.use_count() == 2); + assert(pB.use_count() == 2); + assert(pB.get() == &b); + } + assert(pA.use_count() == 1); + assert(A::count == 1); + assert(B::count == 0); + } + assert(A::count == 0); + assert(B::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv.pass.cpp index f6528b2cb..ae3faede9 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/shared_ptr_rv.pass.cpp @@ -1 +1,73 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // shared_ptr(shared_ptr&& r); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr pA(new A); assert(pA.use_count() == 1); assert(A::count == 1); { A* p = pA.get(); std::shared_ptr pA2(std::move(pA)); assert(A::count == 1); #ifdef _LIBCPP_MOVE assert(pA.use_count() == 0); assert(pA2.use_count() == 1); #else assert(pA.use_count() == 2); assert(pA2.use_count() == 2); #endif assert(pA2.get() == p); } #ifdef _LIBCPP_MOVE assert(pA.use_count() == 0); assert(A::count == 0); #else assert(pA.use_count() == 1); assert(A::count == 1); #endif } assert(A::count == 0); { std::shared_ptr pA; assert(pA.use_count() == 0); assert(A::count == 0); { std::shared_ptr pA2(std::move(pA)); assert(A::count == 0); assert(pA.use_count() == 0); assert(pA2.use_count() == 0); assert(pA2.get() == pA.get()); } assert(pA.use_count() == 0); assert(A::count == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// shared_ptr(shared_ptr&& r); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + assert(A::count == 1); + { + A* p = pA.get(); + std::shared_ptr pA2(std::move(pA)); + assert(A::count == 1); +#ifdef _LIBCPP_MOVE + assert(pA.use_count() == 0); + assert(pA2.use_count() == 1); +#else // _LIBCPP_MOVE + assert(pA.use_count() == 2); + assert(pA2.use_count() == 2); +#endif // _LIBCPP_MOVE + assert(pA2.get() == p); + } +#ifdef _LIBCPP_MOVE + assert(pA.use_count() == 0); + assert(A::count == 0); +#else // _LIBCPP_MOVE + assert(pA.use_count() == 1); + assert(A::count == 1); +#endif // _LIBCPP_MOVE + } + assert(A::count == 0); + { + std::shared_ptr pA; + assert(pA.use_count() == 0); + assert(A::count == 0); + { + std::shared_ptr pA2(std::move(pA)); + assert(A::count == 0); + assert(pA.use_count() == 0); + assert(pA2.use_count() == 0); + assert(pA2.get() == pA.get()); + } + assert(pA.use_count() == 0); + assert(A::count == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp index 9f5705286..d5833fe94 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/unique_ptr.pass.cpp @@ -1 +1,86 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template explicit shared_ptr(unique_ptr&&r); #include #include #include #include bool throw_next = false; void* operator new(std::size_t s) throw(std::bad_alloc) { if (throw_next) throw std::bad_alloc(); return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::unique_ptr ptr(new A); A* raw_ptr = ptr.get(); std::shared_ptr p(std::move(ptr)); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == raw_ptr); assert(ptr.get() == 0); } assert(A::count == 0); { std::unique_ptr ptr(new A); A* raw_ptr = ptr.get(); throw_next = true; try { std::shared_ptr p(std::move(ptr)); assert(false); } catch (...) { assert(A::count == 1); assert(B::count == 1); assert(ptr.get() == raw_ptr); } } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template explicit shared_ptr(unique_ptr&&r); + +#include +#include +#include +#include + +bool throw_next = false; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + if (throw_next) + throw std::bad_alloc(); + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::unique_ptr ptr(new A); + A* raw_ptr = ptr.get(); + std::shared_ptr p(std::move(ptr)); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == raw_ptr); + assert(ptr.get() == 0); + } + assert(A::count == 0); + { + std::unique_ptr ptr(new A); + A* raw_ptr = ptr.get(); + throw_next = true; + try + { + std::shared_ptr p(std::move(ptr)); + assert(false); + } + catch (...) + { + assert(A::count == 1); + assert(B::count == 1); + assert(ptr.get() == raw_ptr); + } + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr.pass.cpp index aa9fbf503..5ff710411 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.const/weak_ptr.pass.cpp @@ -1 +1,79 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template explicit shared_ptr(const weak_ptr& r); #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::weak_ptr wp; try { std::shared_ptr sp(wp); assert(false); } catch (std::bad_weak_ptr&) { } assert(A::count == 0); } { std::shared_ptr sp0(new A); std::weak_ptr wp(sp0); std::shared_ptr sp(wp); assert(sp.use_count() == 2); assert(sp.get() == sp0.get()); assert(A::count == 1); } assert(A::count == 0); { std::shared_ptr sp0(new A); std::weak_ptr wp(sp0); sp0.reset(); try { std::shared_ptr sp(wp); assert(false); } catch (std::bad_weak_ptr&) { } } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template explicit shared_ptr(const weak_ptr& r); + +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::weak_ptr wp; + try + { + std::shared_ptr sp(wp); + assert(false); + } + catch (std::bad_weak_ptr&) + { + } + assert(A::count == 0); + } + { + std::shared_ptr sp0(new A); + std::weak_ptr wp(sp0); + std::shared_ptr sp(wp); + assert(sp.use_count() == 2); + assert(sp.get() == sp0.get()); + assert(A::count == 1); + } + assert(A::count == 0); + { + std::shared_ptr sp0(new A); + std::weak_ptr wp(sp0); + sp0.reset(); + try + { + std::shared_ptr sp(wp); + assert(false); + } + catch (std::bad_weak_ptr&) + { + } + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp index 49ad98cd2..3286400ac 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/allocate_shared.pass.cpp @@ -1 +1,57 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template // shared_ptr allocate_shared(const A& a, Args&&... args); #include #include #include #include #include "../test_allocator.h" int new_count = 0; struct A { static int count; A(int i, char c) : int_(i), char_(c) {++count;} A(const A& a) : int_(a.int_), char_(a.char_) {++count;} ~A() {--count;} int get_int() const {return int_;} char get_char() const {return char_;} private: int int_; char char_; }; int A::count = 0; int main() { { int i = 67; char c = 'e'; std::shared_ptr p = std::allocate_shared(test_allocator(54), i, c); assert(test_allocator::alloc_count == 1); assert(A::count == 1); assert(p->get_int() == 67); assert(p->get_char() == 'e'); } assert(A::count == 0); assert(test_allocator::alloc_count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template +// shared_ptr allocate_shared(const A& a, Args&&... args); + +#include +#include +#include +#include +#include "../test_allocator.h" + +int new_count = 0; + +struct A +{ + static int count; + + A(int i, char c) : int_(i), char_(c) {++count;} + A(const A& a) + : int_(a.int_), char_(a.char_) + {++count;} + ~A() {--count;} + + int get_int() const {return int_;} + char get_char() const {return char_;} +private: + int int_; + char char_; +}; + +int A::count = 0; + +int main() +{ + { + int i = 67; + char c = 'e'; + std::shared_ptr p = std::allocate_shared(test_allocator(54), i, c); + assert(test_allocator::alloc_count == 1); + assert(A::count == 1); + assert(p->get_int() == 67); + assert(p->get_char() == 'e'); + } + assert(A::count == 0); + assert(test_allocator::alloc_count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp index 2db9c6656..51ae74f37 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.create/make_shared.pass.cpp @@ -1 +1,66 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template shared_ptr make_shared(Args&&... args); #include #include #include #include int new_count = 0; void* operator new(std::size_t s) throw(std::bad_alloc) { ++new_count; return std::malloc(s); } void operator delete(void* p) throw() { std::free(p); } struct A { static int count; A(int i, char c) : int_(i), char_(c) {++count;} A(const A& a) : int_(a.int_), char_(a.char_) {++count;} ~A() {--count;} int get_int() const {return int_;} char get_char() const {return char_;} private: int int_; char char_; }; int A::count = 0; int main() { int nc = new_count; { int i = 67; char c = 'e'; std::shared_ptr p = std::make_shared(i, c); assert(new_count == nc+1); assert(A::count == 1); assert(p->get_int() == 67); assert(p->get_char() == 'e'); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template shared_ptr make_shared(Args&&... args); + +#include +#include +#include +#include + +int new_count = 0; + +void* operator new(std::size_t s) throw(std::bad_alloc) +{ + ++new_count; + return std::malloc(s); +} + +void operator delete(void* p) throw() +{ + std::free(p); +} + +struct A +{ + static int count; + + A(int i, char c) : int_(i), char_(c) {++count;} + A(const A& a) + : int_(a.int_), char_(a.char_) + {++count;} + ~A() {--count;} + + int get_int() const {return int_;} + char get_char() const {return char_;} +private: + int int_; + char char_; +}; + +int A::count = 0; + +int main() +{ + int nc = new_count; + { + int i = 67; + char c = 'e'; + std::shared_ptr p = std::make_shared(i, c); + assert(new_count == nc+1); + assert(A::count == 1); + assert(p->get_int() == 67); + assert(p->get_char() == 'e'); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.dest/tested_elsewhere.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset.pass.cpp index 27d9eb934..745a8bf7d 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // void reset(); #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(new B); p.reset(); assert(A::count == 0); assert(B::count == 0); assert(p.use_count() == 0); assert(p.get() == 0); } assert(A::count == 0); { std::shared_ptr p; p.reset(); assert(A::count == 0); assert(B::count == 0); assert(p.use_count() == 0); assert(p.get() == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// void reset(); + +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(new B); + p.reset(); + assert(A::count == 0); + assert(B::count == 0); + assert(p.use_count() == 0); + assert(p.get() == 0); + } + assert(A::count == 0); + { + std::shared_ptr p; + p.reset(); + assert(A::count == 0); + assert(B::count == 0); + assert(p.use_count() == 0); + assert(p.get() == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp index 13656f518..8841a0965 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer.pass.cpp @@ -1 +1,64 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template void reset(Y* p); #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(new B); A* ptr = new A; p.reset(ptr); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); } assert(A::count == 0); { std::shared_ptr p; A* ptr = new A; p.reset(ptr); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template void reset(Y* p); + +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(new B); + A* ptr = new A; + p.reset(ptr); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + } + assert(A::count == 0); + { + std::shared_ptr p; + A* ptr = new A; + p.reset(ptr); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter.pass.cpp index b4bdd8654..b8db36fef 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter.pass.cpp @@ -1 +1,79 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template void reset(Y* p, D d); #include #include #include "../test_deleter.h" struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(new B); A* ptr = new A; p.reset(ptr, test_deleter(3)); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); { std::shared_ptr p; A* ptr = new A; p.reset(ptr, test_deleter(3)); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 1); assert(d); assert(d->state() == 3); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 2); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template void reset(Y* p, D d); + +#include +#include +#include "../test_deleter.h" + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(new B); + A* ptr = new A; + p.reset(ptr, test_deleter(3)); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + { + std::shared_ptr p; + A* ptr = new A; + p.reset(ptr, test_deleter(3)); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 1); + assert(d); + assert(d->state() == 3); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 2); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator.pass.cpp index a318f68ca..bf6279a24 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/reset_pointer_deleter_allocator.pass.cpp @@ -1 +1,88 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template void reset(Y* p, D d, A a); #include #include #include "../test_deleter.h" #include "../test_allocator.h" struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p(new B); A* ptr = new A; p.reset(ptr, test_deleter(3), test_allocator(4)); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 0); assert(d); assert(d->state() == 3); assert(test_allocator::count == 1); assert(test_allocator::alloc_count == 1); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 1); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); { std::shared_ptr p; A* ptr = new A; p.reset(ptr, test_deleter(3), test_allocator(4)); assert(A::count == 1); assert(B::count == 1); assert(p.use_count() == 1); assert(p.get() == ptr); test_deleter* d = std::get_deleter >(p); assert(test_deleter::count == 1); assert(test_deleter::dealloc_count == 1); assert(d); assert(d->state() == 3); assert(test_allocator::count == 1); assert(test_allocator::alloc_count == 1); } assert(A::count == 0); assert(test_deleter::count == 0); assert(test_deleter::dealloc_count == 2); assert(test_allocator::count == 0); assert(test_allocator::alloc_count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template void reset(Y* p, D d, A a); + +#include +#include +#include "../test_deleter.h" +#include "../test_allocator.h" + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p(new B); + A* ptr = new A; + p.reset(ptr, test_deleter(3), test_allocator(4)); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 0); + assert(d); + assert(d->state() == 3); + assert(test_allocator::count == 1); + assert(test_allocator::alloc_count == 1); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 1); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); + { + std::shared_ptr p; + A* ptr = new A; + p.reset(ptr, test_deleter(3), test_allocator(4)); + assert(A::count == 1); + assert(B::count == 1); + assert(p.use_count() == 1); + assert(p.get() == ptr); + test_deleter* d = std::get_deleter >(p); + assert(test_deleter::count == 1); + assert(test_deleter::dealloc_count == 1); + assert(d); + assert(d->state() == 3); + assert(test_allocator::count == 1); + assert(test_allocator::alloc_count == 1); + } + assert(A::count == 0); + assert(test_deleter::count == 0); + assert(test_deleter::dealloc_count == 2); + assert(test_allocator::count == 0); + assert(test_allocator::alloc_count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap.pass.cpp index 6f75444e6..8b0ebf747 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.mod/swap.pass.cpp @@ -1 +1,104 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // void swap(shared_ptr& r); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr1 = new A; A* ptr2 = new A; std::shared_ptr p1(ptr1); { std::shared_ptr p2(ptr2); p1.swap(p2); assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(p2.use_count() == 1); assert(p2.get() == ptr1); assert(A::count == 2); } assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(A::count == 1); } assert(A::count == 0); { A* ptr1 = new A; A* ptr2 = 0; std::shared_ptr p1(ptr1); { std::shared_ptr p2; p1.swap(p2); assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(p2.use_count() == 1); assert(p2.get() == ptr1); assert(A::count == 1); } assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(A::count == 0); } assert(A::count == 0); { A* ptr1 = 0; A* ptr2 = new A; std::shared_ptr p1; { std::shared_ptr p2(ptr2); p1.swap(p2); assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(p2.use_count() == 0); assert(p2.get() == ptr1); assert(A::count == 1); } assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(A::count == 1); } assert(A::count == 0); { A* ptr1 = 0; A* ptr2 = 0; std::shared_ptr p1; { std::shared_ptr p2; p1.swap(p2); assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(p2.use_count() == 0); assert(p2.get() == ptr1); assert(A::count == 0); } assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(A::count == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// void swap(shared_ptr& r); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr1 = new A; + A* ptr2 = new A; + std::shared_ptr p1(ptr1); + { + std::shared_ptr p2(ptr2); + p1.swap(p2); + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(p2.use_count() == 1); + assert(p2.get() == ptr1); + assert(A::count == 2); + } + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(A::count == 1); + } + assert(A::count == 0); + { + A* ptr1 = new A; + A* ptr2 = 0; + std::shared_ptr p1(ptr1); + { + std::shared_ptr p2; + p1.swap(p2); + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(p2.use_count() == 1); + assert(p2.get() == ptr1); + assert(A::count == 1); + } + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(A::count == 0); + } + assert(A::count == 0); + { + A* ptr1 = 0; + A* ptr2 = new A; + std::shared_ptr p1; + { + std::shared_ptr p2(ptr2); + p1.swap(p2); + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(p2.use_count() == 0); + assert(p2.get() == ptr1); + assert(A::count == 1); + } + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(A::count == 1); + } + assert(A::count == 0); + { + A* ptr1 = 0; + A* ptr2 = 0; + std::shared_ptr p1; + { + std::shared_ptr p2; + p1.swap(p2); + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(p2.use_count() == 0); + assert(p2.get() == ptr1); + assert(A::count == 0); + } + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(A::count == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow.pass.cpp index 14646f039..30ce67f90 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/arrow.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // T* operator->() const; #include #include #include int main() { const std::shared_ptr > p(new std::pair(3, 4)); assert(p->first == 3); assert(p->second == 4); p->first = 5; p->second = 6; assert(p->first == 5); assert(p->second == 6); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// T* operator->() const; + +#include +#include +#include + +int main() +{ + const std::shared_ptr > p(new std::pair(3, 4)); + assert(p->first == 3); + assert(p->second == 4); + p->first = 5; + p->second = 6; + assert(p->first == 5); + assert(p->second == 6); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference.pass.cpp index b02af0f1c..786f02ddf 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/dereference.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // T& operator*() const; #include #include int main() { const std::shared_ptr p(new int(32)); assert(*p == 32); *p = 3; assert(*p == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// T& operator*() const; + +#include +#include + +int main() +{ + const std::shared_ptr p(new int(32)); + assert(*p == 32); + *p = 3; + assert(*p == 3); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp index f0661fb31..10b4d1425 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/op_bool.pass.cpp @@ -1 +1,29 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // explicit operator bool() const; #include #include int main() { { const std::shared_ptr p(new int(32)); assert(p); } { const std::shared_ptr p; assert(!p); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// explicit operator bool() const; + +#include +#include + +int main() +{ + { + const std::shared_ptr p(new int(32)); + assert(p); + } + { + const std::shared_ptr p; + assert(!p); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr.pass.cpp index b5aeff5e8..0854cda6b 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_shared_ptr.pass.cpp @@ -1 +1,28 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template bool owner_before(shared_ptr const& b) const; #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2 = p1; const std::shared_ptr p3(new int); assert(!p1.owner_before(p2)); assert(!p2.owner_before(p1)); assert(p1.owner_before(p3) || p3.owner_before(p1)); assert(p3.owner_before(p1) == p3.owner_before(p2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template bool owner_before(shared_ptr const& b) const; + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2 = p1; + const std::shared_ptr p3(new int); + assert(!p1.owner_before(p2)); + assert(!p2.owner_before(p1)); + assert(p1.owner_before(p3) || p3.owner_before(p1)); + assert(p3.owner_before(p1) == p3.owner_before(p2)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr.pass.cpp index 8e8059b20..d112e64d2 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/owner_before_weak_ptr.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template bool owner_before(weak_ptr const& b) const; #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2 = p1; const std::shared_ptr p3(new int); const std::weak_ptr w1(p1); const std::weak_ptr w2(p2); const std::weak_ptr w3(p3); assert(!p1.owner_before(w2)); assert(!p2.owner_before(w1)); assert(p1.owner_before(w3) || p3.owner_before(w1)); assert(p3.owner_before(w1) == p3.owner_before(w2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template bool owner_before(weak_ptr const& b) const; + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2 = p1; + const std::shared_ptr p3(new int); + const std::weak_ptr w1(p1); + const std::weak_ptr w2(p2); + const std::weak_ptr w3(p3); + assert(!p1.owner_before(w2)); + assert(!p2.owner_before(w1)); + assert(p1.owner_before(w3) || p3.owner_before(w1)); + assert(p3.owner_before(w1) == p3.owner_before(w2)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique.pass.cpp index 429e7e9d5..3d779ec2b 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.obs/unique.pass.cpp @@ -1 +1,28 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // bool unique() const; #include #include int main() { const std::shared_ptr p(new int(32)); assert(p.unique()); { std::shared_ptr p2 = p; assert(!p.unique()); } assert(p.unique()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// bool unique() const; + +#include +#include + +int main() +{ + const std::shared_ptr p(new int(32)); + assert(p.unique()); + { + std::shared_ptr p2 = p; + assert(!p.unique()); + } + assert(p.unique()); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp index 850125f8c..d21a50bb8 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.shared/util.smartptr.shared.spec/swap.pass.cpp @@ -1 +1,104 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // shared_ptr // template void swap(shared_ptr& a, shared_ptr& b); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr1 = new A; A* ptr2 = new A; std::shared_ptr p1(ptr1); { std::shared_ptr p2(ptr2); swap(p1, p2); assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(p2.use_count() == 1); assert(p2.get() == ptr1); assert(A::count == 2); } assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(A::count == 1); } assert(A::count == 0); { A* ptr1 = new A; A* ptr2 = 0; std::shared_ptr p1(ptr1); { std::shared_ptr p2; swap(p1, p2); assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(p2.use_count() == 1); assert(p2.get() == ptr1); assert(A::count == 1); } assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(A::count == 0); } assert(A::count == 0); { A* ptr1 = 0; A* ptr2 = new A; std::shared_ptr p1; { std::shared_ptr p2(ptr2); swap(p1, p2); assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(p2.use_count() == 0); assert(p2.get() == ptr1); assert(A::count == 1); } assert(p1.use_count() == 1); assert(p1.get() == ptr2); assert(A::count == 1); } assert(A::count == 0); { A* ptr1 = 0; A* ptr2 = 0; std::shared_ptr p1; { std::shared_ptr p2; swap(p1, p2); assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(p2.use_count() == 0); assert(p2.get() == ptr1); assert(A::count == 0); } assert(p1.use_count() == 0); assert(p1.get() == ptr2); assert(A::count == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// shared_ptr + +// template void swap(shared_ptr& a, shared_ptr& b); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr1 = new A; + A* ptr2 = new A; + std::shared_ptr p1(ptr1); + { + std::shared_ptr p2(ptr2); + swap(p1, p2); + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(p2.use_count() == 1); + assert(p2.get() == ptr1); + assert(A::count == 2); + } + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(A::count == 1); + } + assert(A::count == 0); + { + A* ptr1 = new A; + A* ptr2 = 0; + std::shared_ptr p1(ptr1); + { + std::shared_ptr p2; + swap(p1, p2); + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(p2.use_count() == 1); + assert(p2.get() == ptr1); + assert(A::count == 1); + } + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(A::count == 0); + } + assert(A::count == 0); + { + A* ptr1 = 0; + A* ptr2 = new A; + std::shared_ptr p1; + { + std::shared_ptr p2(ptr2); + swap(p1, p2); + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(p2.use_count() == 0); + assert(p2.get() == ptr1); + assert(A::count == 1); + } + assert(p1.use_count() == 1); + assert(p1.get() == ptr2); + assert(A::count == 1); + } + assert(A::count == 0); + { + A* ptr1 = 0; + A* ptr2 = 0; + std::shared_ptr p1; + { + std::shared_ptr p2; + swap(p1, p2); + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(p2.use_count() == 0); + assert(p2.get() == ptr1); + assert(A::count == 0); + } + assert(p1.use_count() == 0); + assert(p1.get() == ptr2); + assert(A::count == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/types.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/types.pass.cpp index 359bfa7c4..cfb2708fa 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/types.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/types.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template class weak_ptr // { // public: // typedef T element_type; // ... // }; #include struct A; // purposefully incomplete int main() { static_assert((std::is_same::element_type, A>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template class weak_ptr +// { +// public: +// typedef T element_type; +// ... +// }; + +#include + +struct A; // purposefully incomplete + +int main() +{ + static_assert((std::is_same::element_type, A>::value), ""); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp index eb16e033d..fbaf44fca 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.ownerless/owner_less.pass.cpp @@ -1 +1,74 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template struct owner_less; // // template // struct owner_less > // : binary_function, shared_ptr, bool> // { // typedef bool result_type; // bool operator()(shared_ptr const&, shared_ptr const&) const; // bool operator()(shared_ptr const&, weak_ptr const&) const; // bool operator()(weak_ptr const&, shared_ptr const&) const; // }; // // template // struct owner_less > // : binary_function, weak_ptr, bool> // { // typedef bool result_type; // bool operator()(weak_ptr const&, weak_ptr const&) const; // bool operator()(shared_ptr const&, weak_ptr const&) const; // bool operator()(weak_ptr const&, shared_ptr const&) const; // }; #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2 = p1; const std::shared_ptr p3(new int); const std::weak_ptr w1(p1); const std::weak_ptr w2(p2); const std::weak_ptr w3(p3); { typedef std::owner_less > CS; CS cs; assert(!cs(p1, p2)); assert(!cs(p2, p1)); assert(cs(p1 ,p3) || cs(p3, p1)); assert(cs(p3, p1) == cs(p3, p2)); assert(!cs(p1, w2)); assert(!cs(p2, w1)); assert(cs(p1, w3) || cs(p3, w1)); assert(cs(p3, w1) == cs(p3, w2)); } { typedef std::owner_less > CS; CS cs; assert(!cs(w1, w2)); assert(!cs(w2, w1)); assert(cs(w1, w3) || cs(w3, w1)); assert(cs(w3, w1) == cs(w3, w2)); assert(!cs(w1, p2)); assert(!cs(w2, p1)); assert(cs(w1, p3) || cs(w3, p1)); assert(cs(w3, p1) == cs(w3, p2)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template struct owner_less; +// +// template +// struct owner_less > +// : binary_function, shared_ptr, bool> +// { +// typedef bool result_type; +// bool operator()(shared_ptr const&, shared_ptr const&) const; +// bool operator()(shared_ptr const&, weak_ptr const&) const; +// bool operator()(weak_ptr const&, shared_ptr const&) const; +// }; +// +// template +// struct owner_less > +// : binary_function, weak_ptr, bool> +// { +// typedef bool result_type; +// bool operator()(weak_ptr const&, weak_ptr const&) const; +// bool operator()(shared_ptr const&, weak_ptr const&) const; +// bool operator()(weak_ptr const&, shared_ptr const&) const; +// }; + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2 = p1; + const std::shared_ptr p3(new int); + const std::weak_ptr w1(p1); + const std::weak_ptr w2(p2); + const std::weak_ptr w3(p3); + + { + typedef std::owner_less > CS; + CS cs; + + assert(!cs(p1, p2)); + assert(!cs(p2, p1)); + assert(cs(p1 ,p3) || cs(p3, p1)); + assert(cs(p3, p1) == cs(p3, p2)); + + assert(!cs(p1, w2)); + assert(!cs(p2, w1)); + assert(cs(p1, w3) || cs(p3, w1)); + assert(cs(p3, w1) == cs(p3, w2)); + } + { + typedef std::owner_less > CS; + CS cs; + + assert(!cs(w1, w2)); + assert(!cs(w2, w1)); + assert(cs(w1, w3) || cs(w3, w1)); + assert(cs(w3, w1) == cs(w3, w2)); + + assert(!cs(w1, p2)); + assert(!cs(w2, p1)); + assert(cs(w1, p3) || cs(w3, p1)); + assert(cs(w3, p1) == cs(w3, p2)); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp index 87569aadb..12091630d 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/shared_ptr_Y.pass.cpp @@ -1 +1,61 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template weak_ptr& operator=(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr pA(new A); { std::weak_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 1); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template weak_ptr& operator=(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr pA(new A); + { + std::weak_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 1); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr.pass.cpp index 853d43265..a472c1c87 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // weak_ptr& operator=(const weak_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr ps(new A); const std::weak_ptr pA(ps); { std::weak_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 1); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// weak_ptr& operator=(const weak_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr ps(new A); + const std::weak_ptr pA(ps); + { + std::weak_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 1); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y.pass.cpp index 85461b90f..422de83d5 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.assign/weak_ptr_Y.pass.cpp @@ -1 +1,62 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template weak_ptr& operator=(const weak_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { const std::shared_ptr ps(new A); const std::weak_ptr pA(ps); { std::weak_ptr pB; pB = pA; assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 1); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template weak_ptr& operator=(const weak_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + const std::shared_ptr ps(new A); + const std::weak_ptr pA(ps); + { + std::weak_ptr pB; + pB = pA; + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 1); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default.pass.cpp index ef62c139a..01047a229 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/default.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template class weak_ptr // weak_ptr(); #include #include struct A; int main() { std::weak_ptr p; assert(p.use_count() == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template class weak_ptr + +// weak_ptr(); + +#include +#include + +struct A; + +int main() +{ + std::weak_ptr p; + assert(p.use_count() == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y.pass.cpp index 1efdb0377..3f7e890b8 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/shared_ptr_Y.pass.cpp @@ -1 +1,95 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template weak_ptr(const shared_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; struct C { static int count; C() {++count;} C(const C&) {++count;} virtual ~C() {--count;} }; int C::count = 0; int main() { static_assert(( std::is_convertible, std::weak_ptr >::value), ""); static_assert((!std::is_convertible, std::shared_ptr >::value), ""); static_assert((!std::is_convertible, std::weak_ptr >::value), ""); { const std::shared_ptr pA(new A); assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); { std::weak_ptr pB(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 1); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { std::shared_ptr pA; assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template weak_ptr(const shared_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +struct C +{ + static int count; + + C() {++count;} + C(const C&) {++count;} + virtual ~C() {--count;} +}; + +int C::count = 0; + +int main() +{ + static_assert(( std::is_convertible, std::weak_ptr >::value), ""); + static_assert((!std::is_convertible, std::shared_ptr >::value), ""); + static_assert((!std::is_convertible, std::weak_ptr >::value), ""); + { + const std::shared_ptr pA(new A); + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + { + std::weak_ptr pB(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 1); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::shared_ptr pA; + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr.pass.cpp index fabf43245..80e50ea9e 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr.pass.cpp @@ -1 +1,93 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // weak_ptr(const weak_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; struct C { static int count; C() {++count;} C(const C&) {++count;} virtual ~C() {--count;} }; int C::count = 0; int main() { { const std::shared_ptr ps(new A); const std::weak_ptr pA(ps); assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); { std::weak_ptr pB(pA); assert(B::count == 1); assert(A::count == 1); assert(pB.use_count() == 1); assert(pA.use_count() == 1); } assert(pA.use_count() == 1); assert(B::count == 1); assert(A::count == 1); } assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pA; assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// weak_ptr(const weak_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +struct C +{ + static int count; + + C() {++count;} + C(const C&) {++count;} + virtual ~C() {--count;} +}; + +int C::count = 0; + +int main() +{ + { + const std::shared_ptr ps(new A); + const std::weak_ptr pA(ps); + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + { + std::weak_ptr pB(pA); + assert(B::count == 1); + assert(A::count == 1); + assert(pB.use_count() == 1); + assert(pA.use_count() == 1); + } + assert(pA.use_count() == 1); + assert(B::count == 1); + assert(A::count == 1); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pA; + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y.pass.cpp index 8b2db201d..c82d4027c 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.const/weak_ptr_Y.pass.cpp @@ -1 +1,95 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template weak_ptr(const weak_ptr& r); #include #include #include struct B { static int count; B() {++count;} B(const B&) {++count;} virtual ~B() {--count;} }; int B::count = 0; struct A : public B { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; struct C { static int count; C() {++count;} C(const C&) {++count;} virtual ~C() {--count;} }; int C::count = 0; int main() { static_assert(( std::is_convertible, std::weak_ptr >::value), ""); static_assert((!std::is_convertible, std::weak_ptr >::value), ""); static_assert((!std::is_convertible, std::weak_ptr >::value), ""); { const std::weak_ptr pA(std::shared_ptr(new A)); assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pA; assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); { std::weak_ptr pB(pA); assert(B::count == 0); assert(A::count == 0); assert(pB.use_count() == 0); assert(pA.use_count() == 0); } assert(pA.use_count() == 0); assert(B::count == 0); assert(A::count == 0); } assert(B::count == 0); assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template weak_ptr(const weak_ptr& r); + +#include +#include +#include + +struct B +{ + static int count; + + B() {++count;} + B(const B&) {++count;} + virtual ~B() {--count;} +}; + +int B::count = 0; + +struct A + : public B +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +struct C +{ + static int count; + + C() {++count;} + C(const C&) {++count;} + virtual ~C() {--count;} +}; + +int C::count = 0; + +int main() +{ + static_assert(( std::is_convertible, std::weak_ptr >::value), ""); + static_assert((!std::is_convertible, std::weak_ptr >::value), ""); + static_assert((!std::is_convertible, std::weak_ptr >::value), ""); + { + const std::weak_ptr pA(std::shared_ptr(new A)); + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pA; + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + { + std::weak_ptr pB(pA); + assert(B::count == 0); + assert(A::count == 0); + assert(pB.use_count() == 0); + assert(pA.use_count() == 0); + } + assert(pA.use_count() == 0); + assert(B::count == 0); + assert(A::count == 0); + } + assert(B::count == 0); + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.dest/tested_elsewhere.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset.pass.cpp index 50aa52723..7efe4ae5c 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/reset.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // void swap(weak_ptr& r); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::shared_ptr p1(new A); std::weak_ptr w1(p1); assert(w1.use_count() == 1); w1.reset(); assert(w1.use_count() == 0); assert(p1.use_count() == 1); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// void swap(weak_ptr& r); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::shared_ptr p1(new A); + std::weak_ptr w1(p1); + assert(w1.use_count() == 1); + w1.reset(); + assert(w1.use_count() == 0); + assert(p1.use_count() == 1); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap.pass.cpp index 1bd3a3f6c..c80598ff2 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.mod/swap.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // void swap(weak_ptr& r); #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr1 = new A; A* ptr2 = new A; std::shared_ptr p1(ptr1); std::weak_ptr w1(p1); { std::shared_ptr p2(ptr2); std::weak_ptr w2(p2); w1.swap(w2); assert(w1.use_count() == 1); assert(w1.lock().get() == ptr2); assert(w2.use_count() == 1); assert(w2.lock().get() == ptr1); assert(A::count == 2); } } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// void swap(weak_ptr& r); + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr1 = new A; + A* ptr2 = new A; + std::shared_ptr p1(ptr1); + std::weak_ptr w1(p1); + { + std::shared_ptr p2(ptr2); + std::weak_ptr w2(p2); + w1.swap(w2); + assert(w1.use_count() == 1); + assert(w1.lock().get() == ptr2); + assert(w2.use_count() == 1); + assert(w2.lock().get() == ptr1); + assert(A::count == 2); + } + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired.pass.cpp index 3d93fb93e..7212923cd 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/expired.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // bool expired() const; #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::weak_ptr wp; assert(wp.use_count() == 0); assert(wp.expired() == (wp.use_count() == 0)); } { std::shared_ptr sp0(new A); std::weak_ptr wp(sp0); assert(wp.use_count() == 1); assert(wp.expired() == (wp.use_count() == 0)); sp0.reset(); assert(wp.use_count() == 0); assert(wp.expired() == (wp.use_count() == 0)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// bool expired() const; + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::weak_ptr wp; + assert(wp.use_count() == 0); + assert(wp.expired() == (wp.use_count() == 0)); + } + { + std::shared_ptr sp0(new A); + std::weak_ptr wp(sp0); + assert(wp.use_count() == 1); + assert(wp.expired() == (wp.use_count() == 0)); + sp0.reset(); + assert(wp.use_count() == 0); + assert(wp.expired() == (wp.use_count() == 0)); + } +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock.pass.cpp index c68792058..93895ba6f 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/lock.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // shared_ptr lock() const; #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { std::weak_ptr wp; std::shared_ptr sp = wp.lock(); assert(sp.use_count() == 0); assert(sp.get() == 0); assert(A::count == 0); } { std::shared_ptr sp0(new A); std::weak_ptr wp(sp0); std::shared_ptr sp = wp.lock(); assert(sp.use_count() == 2); assert(sp.get() == sp0.get()); assert(A::count == 1); } assert(A::count == 0); { std::shared_ptr sp0(new A); std::weak_ptr wp(sp0); sp0.reset(); std::shared_ptr sp = wp.lock(); assert(sp.use_count() == 0); assert(sp.get() == 0); assert(A::count == 0); } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// shared_ptr lock() const; + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + std::weak_ptr wp; + std::shared_ptr sp = wp.lock(); + assert(sp.use_count() == 0); + assert(sp.get() == 0); + assert(A::count == 0); + } + { + std::shared_ptr sp0(new A); + std::weak_ptr wp(sp0); + std::shared_ptr sp = wp.lock(); + assert(sp.use_count() == 2); + assert(sp.get() == sp0.get()); + assert(A::count == 1); + } + assert(A::count == 0); + { + std::shared_ptr sp0(new A); + std::weak_ptr wp(sp0); + sp0.reset(); + std::shared_ptr sp = wp.lock(); + assert(sp.use_count() == 0); + assert(sp.get() == 0); + assert(A::count == 0); + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/not_less_than.fail.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/not_less_than.fail.cpp index 18bacf4a4..acd9558ee 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/not_less_than.fail.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/not_less_than.fail.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // template class weak_ptr; // // not less than comparable #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2(new int); const std::weak_ptr w1(p1); const std::weak_ptr w2(p2); bool b = w1 < w2; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// template class weak_ptr; +// +// not less than comparable + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2(new int); + const std::weak_ptr w1(p1); + const std::weak_ptr w2(p2); + + bool b = w1 < w2; +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr.pass.cpp index e3ad3807e..a8e88b0dc 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_shared_ptr.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template bool owner_before(const shared_ptr& b); #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2 = p1; const std::shared_ptr p3(new int); const std::weak_ptr w1(p1); const std::weak_ptr w2(p2); const std::weak_ptr w3(p3); assert(!w1.owner_before(p2)); assert(!w2.owner_before(p1)); assert(w1.owner_before(p3) || w3.owner_before(p1)); assert(w3.owner_before(p1) == w3.owner_before(p2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template bool owner_before(const shared_ptr& b); + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2 = p1; + const std::shared_ptr p3(new int); + const std::weak_ptr w1(p1); + const std::weak_ptr w2(p2); + const std::weak_ptr w3(p3); + assert(!w1.owner_before(p2)); + assert(!w2.owner_before(p1)); + assert(w1.owner_before(p3) || w3.owner_before(p1)); + assert(w3.owner_before(p1) == w3.owner_before(p2)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr.pass.cpp index 6f1238212..f6e3f0e74 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.obs/owner_before_weak_ptr.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template bool owner_before(const weak_ptr& b); #include #include int main() { const std::shared_ptr p1(new int); const std::shared_ptr p2 = p1; const std::shared_ptr p3(new int); const std::weak_ptr w1(p1); const std::weak_ptr w2(p2); const std::weak_ptr w3(p3); assert(!w1.owner_before(w2)); assert(!w2.owner_before(w1)); assert(w1.owner_before(w3) || w3.owner_before(w1)); assert(w3.owner_before(w1) == w3.owner_before(w2)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template bool owner_before(const weak_ptr& b); + +#include +#include + +int main() +{ + const std::shared_ptr p1(new int); + const std::shared_ptr p2 = p1; + const std::shared_ptr p3(new int); + const std::weak_ptr w1(p1); + const std::weak_ptr w2(p2); + const std::weak_ptr w3(p3); + assert(!w1.owner_before(w2)); + assert(!w2.owner_before(w1)); + assert(w1.owner_before(w3) || w3.owner_before(w1)); + assert(w3.owner_before(w1) == w3.owner_before(w2)); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp index c349f90b6..c3d89fa56 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weak/util.smartptr.weak.spec/swap.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // weak_ptr // template void swap(weak_ptr& a, weak_ptr& b) #include #include struct A { static int count; A() {++count;} A(const A&) {++count;} ~A() {--count;} }; int A::count = 0; int main() { { A* ptr1 = new A; A* ptr2 = new A; std::shared_ptr p1(ptr1); std::weak_ptr w1(p1); { std::shared_ptr p2(ptr2); std::weak_ptr w2(p2); swap(w1, w2); assert(w1.use_count() == 1); assert(w1.lock().get() == ptr2); assert(w2.use_count() == 1); assert(w2.lock().get() == ptr1); assert(A::count == 2); } } assert(A::count == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// weak_ptr + +// template void swap(weak_ptr& a, weak_ptr& b) + +#include +#include + +struct A +{ + static int count; + + A() {++count;} + A(const A&) {++count;} + ~A() {--count;} +}; + +int A::count = 0; + +int main() +{ + { + A* ptr1 = new A; + A* ptr2 = new A; + std::shared_ptr p1(ptr1); + std::weak_ptr w1(p1); + { + std::shared_ptr p2(ptr2); + std::weak_ptr w2(p2); + swap(w1, w2); + assert(w1.use_count() == 1); + assert(w1.lock().get() == ptr2); + assert(w2.use_count() == 1); + assert(w2.lock().get() == ptr1); + assert(A::count == 2); + } + } + assert(A::count == 0); +} diff --git a/test/utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr.pass.cpp b/test/utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr.pass.cpp index ae75b4fe8..3b0eb934a 100644 --- a/test/utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr.pass.cpp +++ b/test/utilities/memory/util.smartptr/util.smartptr.weakptr/bad_weak_ptr.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // class bad_weak_ptr // : public std::exception // { // public: // bad_weak_ptr(); // }; #include #include #include #include int main() { static_assert((std::is_base_of::value), ""); std::bad_weak_ptr e; std::bad_weak_ptr e2 = e; e2 = e; assert(std::strcmp(e.what(), "bad_weak_ptr") == 0); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// class bad_weak_ptr +// : public std::exception +// { +// public: +// bad_weak_ptr(); +// }; + +#include +#include +#include +#include + +int main() +{ + static_assert((std::is_base_of::value), ""); + std::bad_weak_ptr e; + std::bad_weak_ptr e2 = e; + e2 = e; + assert(std::strcmp(e.what(), "bad_weak_ptr") == 0); +} diff --git a/test/utilities/memory/version.pass.cpp b/test/utilities/memory/version.pass.cpp index e05afd078..bc84501f1 100644 --- a/test/utilities/memory/version.pass.cpp +++ b/test/utilities/memory/version.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // #include #ifndef _LIBCPP_VERSION #error _LIBCPP_VERSION not defined #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/test/utilities/meta/meta.hel/integral_constant.pass.cpp b/test/utilities/meta/meta.hel/integral_constant.pass.cpp index f963769d9..47b8eaf18 100644 --- a/test/utilities/meta/meta.hel/integral_constant.pass.cpp +++ b/test/utilities/meta/meta.hel/integral_constant.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // integral_constant #include int main() { typedef std::integral_constant _5; static_assert(_5::value == 5, ""); static_assert((std::is_same<_5::value_type, int>::value), ""); static_assert((std::is_same<_5::type, _5>::value), ""); static_assert(std::false_type::value == false, ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert(std::true_type::value == true, ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); std::false_type f1; std::false_type f2 = f1; std::true_type t1; std::true_type t2 = t1; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// integral_constant + +#include + +int main() +{ + typedef std::integral_constant _5; + static_assert(_5::value == 5, ""); + static_assert((std::is_same<_5::value_type, int>::value), ""); + static_assert((std::is_same<_5::type, _5>::value), ""); + + static_assert(std::false_type::value == false, ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + + static_assert(std::true_type::value == true, ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + + std::false_type f1; + std::false_type f2 = f1; + + std::true_type t1; + std::true_type t2 = t1; +} diff --git a/test/utilities/meta/meta.rel/is_base_of.pass.cpp b/test/utilities/meta/meta.rel/is_base_of.pass.cpp index 319fb6cce..2d38d5524 100644 --- a/test/utilities/meta/meta.rel/is_base_of.pass.cpp +++ b/test/utilities/meta/meta.rel/is_base_of.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_base_of #include template void test_is_base_of() { static_assert((std::is_base_of::value), ""); static_assert((std::is_base_of::value), ""); static_assert((std::is_base_of::value), ""); static_assert((std::is_base_of::value), ""); } template void test_is_not_base_of() { static_assert((!std::is_base_of::value), ""); } struct B {}; struct B1 : B {}; struct B2 : B {}; struct D : private B1, private B2 {}; int main() { test_is_base_of(); test_is_base_of(); test_is_base_of(); test_is_base_of(); test_is_base_of(); test_is_base_of(); test_is_not_base_of(); test_is_not_base_of(); test_is_not_base_of(); test_is_not_base_of(); test_is_not_base_of(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_base_of + +#include + +template +void test_is_base_of() +{ + static_assert((std::is_base_of::value), ""); + static_assert((std::is_base_of::value), ""); + static_assert((std::is_base_of::value), ""); + static_assert((std::is_base_of::value), ""); +} + +template +void test_is_not_base_of() +{ + static_assert((!std::is_base_of::value), ""); +} + +struct B {}; +struct B1 : B {}; +struct B2 : B {}; +struct D : private B1, private B2 {}; + +int main() +{ + test_is_base_of(); + test_is_base_of(); + test_is_base_of(); + test_is_base_of(); + test_is_base_of(); + test_is_base_of(); + + test_is_not_base_of(); + test_is_not_base_of(); + test_is_not_base_of(); + test_is_not_base_of(); + test_is_not_base_of(); +} diff --git a/test/utilities/meta/meta.rel/is_convertible.pass.cpp b/test/utilities/meta/meta.rel/is_convertible.pass.cpp index 96c8a5e8a..a77d54a20 100644 --- a/test/utilities/meta/meta.rel/is_convertible.pass.cpp +++ b/test/utilities/meta/meta.rel/is_convertible.pass.cpp @@ -1 +1,369 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_convertible #include typedef void Function(); typedef char Array[1]; int main() { { static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); } { static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); static_assert((!std::is_convertible::value), ""); static_assert(( std::is_convertible::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_convertible + +#include + +typedef void Function(); +typedef char Array[1]; + +int main() +{ + { + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + } + { + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + + static_assert(( std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + static_assert((!std::is_convertible::value), ""); + static_assert(( std::is_convertible::value), ""); + } +} diff --git a/test/utilities/meta/meta.rel/is_same.pass.cpp b/test/utilities/meta/meta.rel/is_same.pass.cpp index 8fa8e556d..e75a8d037 100644 --- a/test/utilities/meta/meta.rel/is_same.pass.cpp +++ b/test/utilities/meta/meta.rel/is_same.pass.cpp @@ -1 +1,59 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_same #include template void test_is_same() { static_assert((std::is_same::value), ""); static_assert((!std::is_same::value), ""); static_assert((!std::is_same::value), ""); static_assert((std::is_same::value), ""); } template void test_is_same_ref() { static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); } template void test_is_not_same() { static_assert((!std::is_same::value), ""); } class Class { public: ~Class(); }; int main() { test_is_same(); test_is_same(); test_is_same(); test_is_same(); test_is_same_ref(); test_is_not_same(); test_is_not_same(); test_is_not_same(); test_is_not_same(); test_is_not_same(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_same + +#include + +template +void test_is_same() +{ + static_assert((std::is_same::value), ""); + static_assert((!std::is_same::value), ""); + static_assert((!std::is_same::value), ""); + static_assert((std::is_same::value), ""); +} + +template +void test_is_same_ref() +{ + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); +} + +template +void test_is_not_same() +{ + static_assert((!std::is_same::value), ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_is_same(); + test_is_same(); + test_is_same(); + test_is_same(); + test_is_same_ref(); + + test_is_not_same(); + test_is_not_same(); + test_is_not_same(); + test_is_not_same(); + test_is_not_same(); +} diff --git a/test/utilities/meta/meta.rqmts/nothing_to_do.pass.cpp b/test/utilities/meta/meta.rqmts/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/meta/meta.rqmts/nothing_to_do.pass.cpp +++ b/test/utilities/meta/meta.rqmts/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp index 51e5178cf..23b7646c3 100644 --- a/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.arr/remove_all_extents.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_all_extents #include enum Enum {zero, one_}; int main() { static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const Enum>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_all_extents + +#include + +enum Enum {zero, one_}; + +int main() +{ + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const Enum>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp index d6592e883..3f7d07a74 100644 --- a/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.arr/remove_extent.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_extent #include enum Enum {zero, one_}; int main() { static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const Enum>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, int[3]>::value), ""); static_assert((std::is_same::type, const int[3]>::value), ""); static_assert((std::is_same::type, int[3]>::value), ""); static_assert((std::is_same::type, const int[3]>::value), ""); static_assert((std::is_same::type, int[2][3]>::value), ""); static_assert((std::is_same::type, const int[2][3]>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_extent + +#include + +enum Enum {zero, one_}; + +int main() +{ + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const Enum>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, int[3]>::value), ""); + static_assert((std::is_same::type, const int[3]>::value), ""); + static_assert((std::is_same::type, int[3]>::value), ""); + static_assert((std::is_same::type, const int[3]>::value), ""); + static_assert((std::is_same::type, int[2][3]>::value), ""); + static_assert((std::is_same::type, const int[2][3]>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp index 55767898c..f9f20dfdf 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_const.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_const #include template void test_add_const_imp() { static_assert((std::is_same::type, const U>::value), ""); } template void test_add_const() { test_add_const_imp(); test_add_const_imp(); test_add_const_imp(); test_add_const_imp(); } int main() { test_add_const(); test_add_const(); test_add_const(); test_add_const(); test_add_const(); test_add_const(); test_add_const(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_const + +#include + +template +void test_add_const_imp() +{ + static_assert((std::is_same::type, const U>::value), ""); +} + +template +void test_add_const() +{ + test_add_const_imp(); + test_add_const_imp(); + test_add_const_imp(); + test_add_const_imp(); +} + +int main() +{ + test_add_const(); + test_add_const(); + test_add_const(); + test_add_const(); + test_add_const(); + test_add_const(); + test_add_const(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp index 43f516eab..ae87afb5f 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_cv.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_cv #include template void test_add_cv_imp() { static_assert((std::is_same::type, const volatile U>::value), ""); } template void test_add_cv() { test_add_cv_imp(); test_add_cv_imp(); test_add_cv_imp(); test_add_cv_imp(); } int main() { test_add_cv(); test_add_cv(); test_add_cv(); test_add_cv(); test_add_cv(); test_add_cv(); test_add_cv(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_cv + +#include + +template +void test_add_cv_imp() +{ + static_assert((std::is_same::type, const volatile U>::value), ""); +} + +template +void test_add_cv() +{ + test_add_cv_imp(); + test_add_cv_imp(); + test_add_cv_imp(); + test_add_cv_imp(); +} + +int main() +{ + test_add_cv(); + test_add_cv(); + test_add_cv(); + test_add_cv(); + test_add_cv(); + test_add_cv(); + test_add_cv(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp index cca300359..fd82f953d 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/add_volatile.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_volatile #include template void test_add_volatile_imp() { static_assert((std::is_same::type, volatile U>::value), ""); } template void test_add_volatile() { test_add_volatile_imp(); test_add_volatile_imp(); test_add_volatile_imp(); test_add_volatile_imp(); } int main() { test_add_volatile(); test_add_volatile(); test_add_volatile(); test_add_volatile(); test_add_volatile(); test_add_volatile(); test_add_volatile(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_volatile + +#include + +template +void test_add_volatile_imp() +{ + static_assert((std::is_same::type, volatile U>::value), ""); +} + +template +void test_add_volatile() +{ + test_add_volatile_imp(); + test_add_volatile_imp(); + test_add_volatile_imp(); + test_add_volatile_imp(); +} + +int main() +{ + test_add_volatile(); + test_add_volatile(); + test_add_volatile(); + test_add_volatile(); + test_add_volatile(); + test_add_volatile(); + test_add_volatile(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp index 4ecfcb893..f49a2b709 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_const.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_const #include template void test_remove_const_imp() { static_assert((std::is_same::type, U>::value), ""); } template void test_remove_const() { test_remove_const_imp(); test_remove_const_imp(); test_remove_const_imp(); test_remove_const_imp(); } int main() { test_remove_const(); test_remove_const(); test_remove_const(); test_remove_const(); test_remove_const(); test_remove_const(); test_remove_const(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_const + +#include + +template +void test_remove_const_imp() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +template +void test_remove_const() +{ + test_remove_const_imp(); + test_remove_const_imp(); + test_remove_const_imp(); + test_remove_const_imp(); +} + +int main() +{ + test_remove_const(); + test_remove_const(); + test_remove_const(); + test_remove_const(); + test_remove_const(); + test_remove_const(); + test_remove_const(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp index fc5b36f4f..137e093de 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_cv.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_cv #include template void test_remove_cv_imp() { static_assert((std::is_same::type, U>::value), ""); } template void test_remove_cv() { test_remove_cv_imp(); test_remove_cv_imp(); test_remove_cv_imp(); test_remove_cv_imp(); } int main() { test_remove_cv(); test_remove_cv(); test_remove_cv(); test_remove_cv(); test_remove_cv(); test_remove_cv(); test_remove_cv(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_cv + +#include + +template +void test_remove_cv_imp() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +template +void test_remove_cv() +{ + test_remove_cv_imp(); + test_remove_cv_imp(); + test_remove_cv_imp(); + test_remove_cv_imp(); +} + +int main() +{ + test_remove_cv(); + test_remove_cv(); + test_remove_cv(); + test_remove_cv(); + test_remove_cv(); + test_remove_cv(); + test_remove_cv(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp index 85d65213c..7c8294334 100644 --- a/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.cv/remove_volatile.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_volatile #include template void test_remove_volatile_imp() { static_assert((std::is_same::type, U>::value), ""); } template void test_remove_volatile() { test_remove_volatile_imp(); test_remove_volatile_imp(); test_remove_volatile_imp(); test_remove_volatile_imp(); } int main() { test_remove_volatile(); test_remove_volatile(); test_remove_volatile(); test_remove_volatile(); test_remove_volatile(); test_remove_volatile(); test_remove_volatile(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_volatile + +#include + +template +void test_remove_volatile_imp() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +template +void test_remove_volatile() +{ + test_remove_volatile_imp(); + test_remove_volatile_imp(); + test_remove_volatile_imp(); + test_remove_volatile_imp(); +} + +int main() +{ + test_remove_volatile(); + test_remove_volatile(); + test_remove_volatile(); + test_remove_volatile(); + test_remove_volatile(); + test_remove_volatile(); + test_remove_volatile(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp index 58be6e980..55153de8e 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/aligned_storage.pass.cpp @@ -1 +1,123 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // aligned_storage #include int main() { { typedef std::aligned_storage<10, 1 >::type T1; static_assert(std::alignment_of::value == 1, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_storage<10, 2 >::type T1; static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 10, ""); } { typedef std::aligned_storage<10, 4 >::type T1; static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 12, ""); } { typedef std::aligned_storage<10, 8 >::type T1; static_assert(std::alignment_of::value == 8, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<10, 16 >::type T1; static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<10, 32 >::type T1; static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<20, 32 >::type T1; static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<40, 32 >::type T1; static_assert(std::alignment_of::value == 32, ""); static_assert(sizeof(T1) == 64, ""); } { typedef std::aligned_storage<12, 16 >::type T1; static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<1>::type T1; static_assert(std::alignment_of::value == 1, ""); static_assert(sizeof(T1) == 1, ""); } { typedef std::aligned_storage<2>::type T1; static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 2, ""); } { typedef std::aligned_storage<3>::type T1; static_assert(std::alignment_of::value == 2, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_storage<4>::type T1; static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 4, ""); } { typedef std::aligned_storage<5>::type T1; static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<7>::type T1; static_assert(std::alignment_of::value == 4, ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<8>::type T1; static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); static_assert(sizeof(T1) == 8, ""); } { typedef std::aligned_storage<9>::type T1; static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); static_assert(sizeof(T1) == (sizeof(long) == 4 ? 12 : 16), ""); } { typedef std::aligned_storage<15>::type T1; static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<16>::type T1; static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 16, ""); } { typedef std::aligned_storage<17>::type T1; static_assert(std::alignment_of::value == 16, ""); static_assert(sizeof(T1) == 32, ""); } { typedef std::aligned_storage<10>::type T1; static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); static_assert(sizeof(T1) == (sizeof(long) == 4 ? 12 : 16), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// aligned_storage + +#include + +int main() +{ + { + typedef std::aligned_storage<10, 1 >::type T1; + static_assert(std::alignment_of::value == 1, ""); + static_assert(sizeof(T1) == 10, ""); + } + { + typedef std::aligned_storage<10, 2 >::type T1; + static_assert(std::alignment_of::value == 2, ""); + static_assert(sizeof(T1) == 10, ""); + } + { + typedef std::aligned_storage<10, 4 >::type T1; + static_assert(std::alignment_of::value == 4, ""); + static_assert(sizeof(T1) == 12, ""); + } + { + typedef std::aligned_storage<10, 8 >::type T1; + static_assert(std::alignment_of::value == 8, ""); + static_assert(sizeof(T1) == 16, ""); + } + { + typedef std::aligned_storage<10, 16 >::type T1; + static_assert(std::alignment_of::value == 16, ""); + static_assert(sizeof(T1) == 16, ""); + } + { + typedef std::aligned_storage<10, 32 >::type T1; + static_assert(std::alignment_of::value == 32, ""); + static_assert(sizeof(T1) == 32, ""); + } + { + typedef std::aligned_storage<20, 32 >::type T1; + static_assert(std::alignment_of::value == 32, ""); + static_assert(sizeof(T1) == 32, ""); + } + { + typedef std::aligned_storage<40, 32 >::type T1; + static_assert(std::alignment_of::value == 32, ""); + static_assert(sizeof(T1) == 64, ""); + } + { + typedef std::aligned_storage<12, 16 >::type T1; + static_assert(std::alignment_of::value == 16, ""); + static_assert(sizeof(T1) == 16, ""); + } + { + typedef std::aligned_storage<1>::type T1; + static_assert(std::alignment_of::value == 1, ""); + static_assert(sizeof(T1) == 1, ""); + } + { + typedef std::aligned_storage<2>::type T1; + static_assert(std::alignment_of::value == 2, ""); + static_assert(sizeof(T1) == 2, ""); + } + { + typedef std::aligned_storage<3>::type T1; + static_assert(std::alignment_of::value == 2, ""); + static_assert(sizeof(T1) == 4, ""); + } + { + typedef std::aligned_storage<4>::type T1; + static_assert(std::alignment_of::value == 4, ""); + static_assert(sizeof(T1) == 4, ""); + } + { + typedef std::aligned_storage<5>::type T1; + static_assert(std::alignment_of::value == 4, ""); + static_assert(sizeof(T1) == 8, ""); + } + { + typedef std::aligned_storage<7>::type T1; + static_assert(std::alignment_of::value == 4, ""); + static_assert(sizeof(T1) == 8, ""); + } + { + typedef std::aligned_storage<8>::type T1; + static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); + static_assert(sizeof(T1) == 8, ""); + } + { + typedef std::aligned_storage<9>::type T1; + static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); + static_assert(sizeof(T1) == (sizeof(long) == 4 ? 12 : 16), ""); + } + { + typedef std::aligned_storage<15>::type T1; + static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); + static_assert(sizeof(T1) == 16, ""); + } + { + typedef std::aligned_storage<16>::type T1; + static_assert(std::alignment_of::value == 16, ""); + static_assert(sizeof(T1) == 16, ""); + } + { + typedef std::aligned_storage<17>::type T1; + static_assert(std::alignment_of::value == 16, ""); + static_assert(sizeof(T1) == 32, ""); + } + { + typedef std::aligned_storage<10>::type T1; + static_assert(std::alignment_of::value == (sizeof(long) == 4 ? 4 : 8), ""); + static_assert(sizeof(T1) == (sizeof(long) == 4 ? 12 : 16), ""); + } +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp index 460f734a7..cc9e6a9d1 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // common_type #include int main() { static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, char>::value), ""); static_assert((std::is_same::type, double>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, double>::value), ""); static_assert((std::is_same::type, long long>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// common_type + +#include + +int main() +{ + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, char>::value), ""); + + static_assert((std::is_same::type, double>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + + static_assert((std::is_same::type, double>::value), ""); + static_assert((std::is_same::type, long long>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp index c6317037a..575814859 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/conditional.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // conditional #include int main() { static_assert((std::is_same::type, char>::value), ""); static_assert((std::is_same::type, int>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// conditional + +#include + +int main() +{ + static_assert((std::is_same::type, char>::value), ""); + static_assert((std::is_same::type, int>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp index 6ed6da8f8..a1cc8ec18 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/decay.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // decay #include template void test_decay() { static_assert((std::is_same::type, U>::value), ""); } int main() { test_decay(); test_decay(); test_decay(); test_decay(); test_decay(); test_decay(); test_decay(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// decay + +#include + +template +void test_decay() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +int main() +{ + test_decay(); + test_decay(); + test_decay(); + test_decay(); + test_decay(); + test_decay(); + test_decay(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.fail.cpp b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.fail.cpp index c4d27dc6b..d3a37dad1 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.fail.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // enable_if #include int main() { typedef std::enable_if::type A; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// enable_if + +#include + +int main() +{ + typedef std::enable_if::type A; +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp index 7cfdeeecf..f39719e25 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/enable_if.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // enable_if #include int main() { static_assert((std::is_same::type, void>::value), ""); static_assert((std::is_same::type, int>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// enable_if + +#include + +int main() +{ + static_assert((std::is_same::type, void>::value), ""); + static_assert((std::is_same::type, int>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp index b1468de64..b18b30b62 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/result_of.pass.cpp @@ -1 +1,39 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // result_of #include #include typedef bool (&PF1)(); typedef short (*PF2)(long); struct S { operator PF2() const; double operator()(char, int&); void calc(long) const; char data_; }; typedef void (S::*PMS)(long) const; typedef char S::*PMD; int main() { static_assert((std::is_same::type, short>::value), "Error!"); static_assert((std::is_same::type, double>::value), "Error!"); static_assert((std::is_same::type, bool>::value), "Error!"); // static_assert(std::is_same, int)>::type, void>::value, "Error!"); // static_assert(std::is_same::type, char&&>::value, "Error!"); // static_assert(std::is_same::type, const char&>::value, "Error!"); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// result_of + +#include +#include + +typedef bool (&PF1)(); +typedef short (*PF2)(long); + +struct S +{ + operator PF2() const; + double operator()(char, int&); + void calc(long) const; + char data_; +}; + +typedef void (S::*PMS)(long) const; +typedef char S::*PMD; + +int main() +{ + static_assert((std::is_same::type, short>::value), "Error!"); + static_assert((std::is_same::type, double>::value), "Error!"); + static_assert((std::is_same::type, bool>::value), "Error!"); +// static_assert(std::is_same, int)>::type, void>::value, "Error!"); +// static_assert(std::is_same::type, char&&>::value, "Error!"); +// static_assert(std::is_same::type, const char&>::value, "Error!"); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp index 128ca05ad..ba2b2bac7 100644 --- a/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.other/underlying_type.pass.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // underlying_type #include int main() { #error underlying_type is not implemented } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// underlying_type + +#include + +int main() +{ +#error underlying_type is not implemented +} diff --git a/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp index ad43c4399..d601e85c1 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ptr/add_pointer.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_pointer #include template void test_add_pointer() { static_assert((std::is_same::type, U>::value), ""); } int main() { test_add_pointer(); test_add_pointer(); test_add_pointer(); test_add_pointer(); test_add_pointer(); test_add_pointer(); test_add_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_pointer + +#include + +template +void test_add_pointer() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +int main() +{ + test_add_pointer(); + test_add_pointer(); + test_add_pointer(); + test_add_pointer(); + test_add_pointer(); + test_add_pointer(); + test_add_pointer(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp index 4b1b903e5..5156afc71 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ptr/remove_pointer.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_pointer #include template void test_remove_pointer() { static_assert((std::is_same::type, U>::value), ""); } int main() { test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); test_remove_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_pointer + +#include + +template +void test_remove_pointer() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +int main() +{ + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); + test_remove_pointer(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp index 5dfea6699..3bb92fc81 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/add_lvalue_ref.pass.cpp @@ -1 +1,31 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_lvalue_reference #include template void test_add_lvalue_reference() { static_assert((std::is_same::type, U>::value), ""); } int main() { test_add_lvalue_reference(); test_add_lvalue_reference(); test_add_lvalue_reference(); test_add_lvalue_reference(); test_add_lvalue_reference(); test_add_lvalue_reference(); test_add_lvalue_reference(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_lvalue_reference + +#include + +template +void test_add_lvalue_reference() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +int main() +{ + test_add_lvalue_reference(); + test_add_lvalue_reference(); + test_add_lvalue_reference(); + test_add_lvalue_reference(); + test_add_lvalue_reference(); + test_add_lvalue_reference(); + test_add_lvalue_reference(); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp index 0a86b53e5..cbfb7f4d7 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/add_rvalue_ref.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // add_rvalue_reference #include #ifdef _LIBCPP_MOVE template void test_add_rvalue_reference() { static_assert((std::is_same::type, U>::value), ""); } #endif int main() { #ifdef _LIBCPP_MOVE test_add_rvalue_reference(); test_add_rvalue_reference(); test_add_rvalue_reference(); test_add_rvalue_reference(); test_add_rvalue_reference(); test_add_rvalue_reference(); test_add_rvalue_reference(); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// add_rvalue_reference + +#include + +#ifdef _LIBCPP_MOVE + +template +void test_add_rvalue_reference() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +#endif // _LIBCPP_MOVE + +int main() +{ +#ifdef _LIBCPP_MOVE + test_add_rvalue_reference(); + test_add_rvalue_reference(); + test_add_rvalue_reference(); + test_add_rvalue_reference(); + test_add_rvalue_reference(); + test_add_rvalue_reference(); + test_add_rvalue_reference(); +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp index d36dd019b..b42b0b504 100644 --- a/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.ref/remove_ref.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // remove_reference #include template void test_remove_reference() { static_assert((std::is_same::type, U>::value), ""); } int main() { test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); #ifdef _LIBCPP_MOVE test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); test_remove_reference(); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// remove_reference + +#include + +template +void test_remove_reference() +{ + static_assert((std::is_same::type, U>::value), ""); +} + +int main() +{ + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + +#ifdef _LIBCPP_MOVE + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); + test_remove_reference(); +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp index 3b87a8355..5d369daea 100644 --- a/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.sign/make_signed.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // make_signed #include enum Enum {zero, one_}; enum BigEnum { bzero, big = 0xFFFFFFFFFFFFFFFFULL }; int main() { static_assert((std::is_same::type, signed char>::value), ""); static_assert((std::is_same::type, signed char>::value), ""); static_assert((std::is_same::type, signed char>::value), ""); static_assert((std::is_same::type, signed short>::value), ""); static_assert((std::is_same::type, signed short>::value), ""); static_assert((std::is_same::type, signed int>::value), ""); static_assert((std::is_same::type, signed int>::value), ""); static_assert((std::is_same::type, signed long>::value), ""); static_assert((std::is_same::type, long>::value), ""); static_assert((std::is_same::type, signed long long>::value), ""); static_assert((std::is_same::type, signed long long>::value), ""); static_assert((std::is_same::type, int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, const int>::value), ""); static_assert((std::is_same::type, std::conditional::type>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// make_signed + +#include + +enum Enum {zero, one_}; + +enum BigEnum +{ + bzero, + big = 0xFFFFFFFFFFFFFFFFULL +}; + +int main() +{ + static_assert((std::is_same::type, signed char>::value), ""); + static_assert((std::is_same::type, signed char>::value), ""); + static_assert((std::is_same::type, signed char>::value), ""); + static_assert((std::is_same::type, signed short>::value), ""); + static_assert((std::is_same::type, signed short>::value), ""); + static_assert((std::is_same::type, signed int>::value), ""); + static_assert((std::is_same::type, signed int>::value), ""); + static_assert((std::is_same::type, signed long>::value), ""); + static_assert((std::is_same::type, long>::value), ""); + static_assert((std::is_same::type, signed long long>::value), ""); + static_assert((std::is_same::type, signed long long>::value), ""); + static_assert((std::is_same::type, int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, const int>::value), ""); + static_assert((std::is_same::type, + std::conditional::type>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp b/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp index d8bb4e33e..a029acb83 100644 --- a/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp +++ b/test/utilities/meta/meta.trans/meta.trans.sign/make_unsigned.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // make_unsigned #include enum Enum {zero, one_}; enum BigEnum { bzero, big = 0xFFFFFFFFFFFFFFFFULL }; int main() { static_assert((std::is_same::type, unsigned char>::value), ""); static_assert((std::is_same::type, unsigned char>::value), ""); static_assert((std::is_same::type, unsigned char>::value), ""); static_assert((std::is_same::type, unsigned short>::value), ""); static_assert((std::is_same::type, unsigned short>::value), ""); static_assert((std::is_same::type, unsigned int>::value), ""); static_assert((std::is_same::type, unsigned int>::value), ""); static_assert((std::is_same::type, unsigned long>::value), ""); static_assert((std::is_same::type, unsigned long>::value), ""); static_assert((std::is_same::type, unsigned long long>::value), ""); static_assert((std::is_same::type, unsigned long long>::value), ""); static_assert((std::is_same::type, unsigned int>::value), ""); static_assert((std::is_same::type, const unsigned int>::value), ""); static_assert((std::is_same::type, const unsigned int>::value), ""); static_assert((std::is_same::type, std::conditional::type>::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// make_unsigned + +#include + +enum Enum {zero, one_}; + +enum BigEnum +{ + bzero, + big = 0xFFFFFFFFFFFFFFFFULL +}; + +int main() +{ + static_assert((std::is_same::type, unsigned char>::value), ""); + static_assert((std::is_same::type, unsigned char>::value), ""); + static_assert((std::is_same::type, unsigned char>::value), ""); + static_assert((std::is_same::type, unsigned short>::value), ""); + static_assert((std::is_same::type, unsigned short>::value), ""); + static_assert((std::is_same::type, unsigned int>::value), ""); + static_assert((std::is_same::type, unsigned int>::value), ""); + static_assert((std::is_same::type, unsigned long>::value), ""); + static_assert((std::is_same::type, unsigned long>::value), ""); + static_assert((std::is_same::type, unsigned long long>::value), ""); + static_assert((std::is_same::type, unsigned long long>::value), ""); + static_assert((std::is_same::type, unsigned int>::value), ""); + static_assert((std::is_same::type, const unsigned int>::value), ""); + static_assert((std::is_same::type, const unsigned int>::value), ""); + static_assert((std::is_same::type, + std::conditional::type>::value), ""); +} diff --git a/test/utilities/meta/meta.trans/nothing_to_do.pass.cpp b/test/utilities/meta/meta.trans/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/meta/meta.trans/nothing_to_do.pass.cpp +++ b/test/utilities/meta/meta.trans/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/meta/meta.type.synop/nothing_to_do.pass.cpp b/test/utilities/meta/meta.type.synop/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/meta/meta.type.synop/nothing_to_do.pass.cpp +++ b/test/utilities/meta/meta.type.synop/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/array.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/array.pass.cpp index da1a68137..3eb16c215 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/array.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/array.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // array #include template void test_array_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert( std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_array() { test_array_imp(); test_array_imp(); test_array_imp(); test_array_imp(); } typedef char array[3]; typedef const char const_array[3]; typedef char incomplete_array[]; int main() { test_array(); test_array(); test_array(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// array + +#include + +template +void test_array_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert( std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_array() +{ + test_array_imp(); + test_array_imp(); + test_array_imp(); + test_array_imp(); +} + +typedef char array[3]; +typedef const char const_array[3]; +typedef char incomplete_array[]; + +int main() +{ + test_array(); + test_array(); + test_array(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/class.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/class.pass.cpp index fa604cf18..3e6a9c086 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/class.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/class.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // class #include template void test_class_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert( std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_class() { test_class_imp(); test_class_imp(); test_class_imp(); test_class_imp(); } class Class { int _; double __; }; int main() { test_class(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// class + +#include + +template +void test_class_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert( std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_class() +{ + test_class_imp(); + test_class_imp(); + test_class_imp(); + test_class_imp(); +} + +class Class +{ + int _; + double __; +}; + +int main() +{ + test_class(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/enum.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/enum.pass.cpp index b1a72f9f1..bdff0419f 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/enum.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/enum.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // enum #include template void test_enum_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert( std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_enum() { test_enum_imp(); test_enum_imp(); test_enum_imp(); test_enum_imp(); } enum Enum {zero, one}; int main() { test_enum(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// enum + +#include + +template +void test_enum_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert( std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_enum() +{ + test_enum_imp(); + test_enum_imp(); + test_enum_imp(); + test_enum_imp(); +} + +enum Enum {zero, one}; + +int main() +{ + test_enum(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/floating_point.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/floating_point.pass.cpp index bd5d03f44..efff10aa5 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/floating_point.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/floating_point.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // floating_point #include template void test_floating_point_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert( std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_floating_point() { test_floating_point_imp(); test_floating_point_imp(); test_floating_point_imp(); test_floating_point_imp(); } int main() { test_floating_point(); test_floating_point(); test_floating_point(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// floating_point + +#include + +template +void test_floating_point_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert( std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_floating_point() +{ + test_floating_point_imp(); + test_floating_point_imp(); + test_floating_point_imp(); + test_floating_point_imp(); +} + +int main() +{ + test_floating_point(); + test_floating_point(); + test_floating_point(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/function.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/function.pass.cpp index a3bab5b32..ba5f5213f 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/function.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/function.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // function #include template void test_function_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert( std::is_function::value, ""); } template void test_function() { test_function_imp(); test_function_imp(); test_function_imp(); test_function_imp(); } int main() { test_function(); test_function(); test_function(); test_function(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// function + +#include + +template +void test_function_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert( std::is_function::value, ""); +} + +template +void test_function() +{ + test_function_imp(); + test_function_imp(); + test_function_imp(); + test_function_imp(); +} + +int main() +{ + test_function(); + test_function(); + test_function(); + test_function(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/integral.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/integral.pass.cpp index a4c0cb427..ac3004667 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/integral.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/integral.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // integral #include template void test_integral_imp() { static_assert(!std::is_void::value, ""); static_assert( std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_integral() { test_integral_imp(); test_integral_imp(); test_integral_imp(); test_integral_imp(); } int main() { test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// integral + +#include + +template +void test_integral_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert( std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_integral() +{ + test_integral_imp(); + test_integral_imp(); + test_integral_imp(); + test_integral_imp(); +} + +int main() +{ + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/lvalue_ref.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/lvalue_ref.pass.cpp index 581a8aeb1..4b4dc2ed1 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/lvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/lvalue_ref.pass.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // lvalue_ref #include template void test_lvalue_ref() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert( std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } int main() { test_lvalue_ref(); test_lvalue_ref(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// lvalue_ref + +#include + +template +void test_lvalue_ref() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert( std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +int main() +{ + test_lvalue_ref(); + test_lvalue_ref(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp index 2a66fa0a9..914697400 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/member_function_pointer.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // member_function_pointer #include template void test_member_function_pointer_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert( std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_member_function_pointer() { test_member_function_pointer_imp(); test_member_function_pointer_imp(); test_member_function_pointer_imp(); test_member_function_pointer_imp(); } class Class { }; int main() { test_member_function_pointer(); test_member_function_pointer(); test_member_function_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// member_function_pointer + +#include + +template +void test_member_function_pointer_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert( std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_member_function_pointer() +{ + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); +} + +class Class +{ +}; + +int main() +{ + test_member_function_pointer(); + test_member_function_pointer(); + test_member_function_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/member_object_pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/member_object_pointer.pass.cpp index ed9eff866..a768e9ec3 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/member_object_pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/member_object_pointer.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // member_object_pointer #include template void test_member_object_pointer_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert( std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_member_object_pointer() { test_member_object_pointer_imp(); test_member_object_pointer_imp(); test_member_object_pointer_imp(); test_member_object_pointer_imp(); } class Class { }; int main() { test_member_object_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// member_object_pointer + +#include + +template +void test_member_object_pointer_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert( std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_member_object_pointer() +{ + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); +} + +class Class +{ +}; + +int main() +{ + test_member_object_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/pointer.pass.cpp index 263e73886..c74e9ea43 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/pointer.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // pointer #include template void test_pointer_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert( std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_pointer() { test_pointer_imp(); test_pointer_imp(); test_pointer_imp(); test_pointer_imp(); } int main() { test_pointer(); test_pointer(); test_pointer(); test_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// pointer + +#include + +template +void test_pointer_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert( std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_pointer() +{ + test_pointer_imp(); + test_pointer_imp(); + test_pointer_imp(); + test_pointer_imp(); +} + +int main() +{ + test_pointer(); + test_pointer(); + test_pointer(); + test_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/rvalue_ref.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/rvalue_ref.pass.cpp index 91d7a6e09..11600217a 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/rvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/rvalue_ref.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // rvalue_ref #include template void test_rvalue_ref() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert( std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } int main() { #ifdef _LIBCPP_MOVE test_rvalue_ref(); test_rvalue_ref(); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// rvalue_ref + +#include + +template +void test_rvalue_ref() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert( std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +int main() +{ +#ifdef _LIBCPP_MOVE + test_rvalue_ref(); + test_rvalue_ref(); +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/union.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/union.pass.cpp index 07c9729ff..b386a8ae9 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/union.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/union.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // union #include template void test_union_imp() { static_assert(!std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert( std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_union() { test_union_imp(); test_union_imp(); test_union_imp(); test_union_imp(); } union Union { int _; double __; }; int main() { test_union(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// union + +#include + +template +void test_union_imp() +{ + static_assert(!std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert( std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_union() +{ + test_union_imp(); + test_union_imp(); + test_union_imp(); + test_union_imp(); +} + +union Union +{ + int _; + double __; +}; + +int main() +{ + test_union(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.cat/void.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.cat/void.pass.cpp index cfcff70a9..49ecacced 100644 --- a/test/utilities/meta/meta.unary/meta.unary.cat/void.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.cat/void.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // void #include template void test_void_imp() { static_assert( std::is_void::value, ""); static_assert(!std::is_integral::value, ""); static_assert(!std::is_floating_point::value, ""); static_assert(!std::is_array::value, ""); static_assert(!std::is_pointer::value, ""); static_assert(!std::is_lvalue_reference::value, ""); static_assert(!std::is_rvalue_reference::value, ""); static_assert(!std::is_member_object_pointer::value, ""); static_assert(!std::is_member_function_pointer::value, ""); static_assert(!std::is_enum::value, ""); static_assert(!std::is_union::value, ""); static_assert(!std::is_class::value, ""); static_assert(!std::is_function::value, ""); } template void test_void() { test_void_imp(); test_void_imp(); test_void_imp(); test_void_imp(); } int main() { test_void(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// void + +#include + +template +void test_void_imp() +{ + static_assert( std::is_void::value, ""); + static_assert(!std::is_integral::value, ""); + static_assert(!std::is_floating_point::value, ""); + static_assert(!std::is_array::value, ""); + static_assert(!std::is_pointer::value, ""); + static_assert(!std::is_lvalue_reference::value, ""); + static_assert(!std::is_rvalue_reference::value, ""); + static_assert(!std::is_member_object_pointer::value, ""); + static_assert(!std::is_member_function_pointer::value, ""); + static_assert(!std::is_enum::value, ""); + static_assert(!std::is_union::value, ""); + static_assert(!std::is_class::value, ""); + static_assert(!std::is_function::value, ""); +} + +template +void test_void() +{ + test_void_imp(); + test_void_imp(); + test_void_imp(); + test_void_imp(); +} + +int main() +{ + test_void(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/array.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/array.pass.cpp index e521e4597..80034227d 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/array.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/array.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // array #include template void test_array_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_array() { test_array_imp(); test_array_imp(); test_array_imp(); test_array_imp(); } typedef char array[3]; typedef const char const_array[3]; typedef char incomplete_array[]; int main() { test_array(); test_array(); test_array(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// array + +#include + +template +void test_array_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_array() +{ + test_array_imp(); + test_array_imp(); + test_array_imp(); + test_array_imp(); +} + +typedef char array[3]; +typedef const char const_array[3]; +typedef char incomplete_array[]; + +int main() +{ + test_array(); + test_array(); + test_array(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/class.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/class.pass.cpp index 4ddf499d7..ca727b2db 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/class.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/class.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // class #include template void test_class_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_class() { test_class_imp(); test_class_imp(); test_class_imp(); test_class_imp(); } class Class { int _; double __; }; int main() { test_class(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// class + +#include + +template +void test_class_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_class() +{ + test_class_imp(); + test_class_imp(); + test_class_imp(); + test_class_imp(); +} + +class Class +{ + int _; + double __; +}; + +int main() +{ + test_class(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/enum.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/enum.pass.cpp index cdd87e84c..9f0940db9 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/enum.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/enum.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // enum #include template void test_enum_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_enum() { test_enum_imp(); test_enum_imp(); test_enum_imp(); test_enum_imp(); } enum Enum {zero, one}; int main() { test_enum(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// enum + +#include + +template +void test_enum_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_enum() +{ + test_enum_imp(); + test_enum_imp(); + test_enum_imp(); + test_enum_imp(); +} + +enum Enum {zero, one}; + +int main() +{ + test_enum(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/floating_point.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/floating_point.pass.cpp index d5d06eba7..7d95a8a0d 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/floating_point.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/floating_point.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // floating_point #include template void test_floating_point_imp() { static_assert(!std::is_reference::value, ""); static_assert( std::is_arithmetic::value, ""); static_assert( std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert(!std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_floating_point() { test_floating_point_imp(); test_floating_point_imp(); test_floating_point_imp(); test_floating_point_imp(); } int main() { test_floating_point(); test_floating_point(); test_floating_point(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// floating_point + +#include + +template +void test_floating_point_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert( std::is_arithmetic::value, ""); + static_assert( std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert(!std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_floating_point() +{ + test_floating_point_imp(); + test_floating_point_imp(); + test_floating_point_imp(); + test_floating_point_imp(); +} + +int main() +{ + test_floating_point(); + test_floating_point(); + test_floating_point(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/function.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/function.pass.cpp index f67fd8f36..b4c4386f9 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/function.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/function.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // function #include template void test_function_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert(!std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_function() { test_function_imp(); test_function_imp(); test_function_imp(); test_function_imp(); } int main() { test_function(); test_function(); test_function(); test_function(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// function + +#include + +template +void test_function_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert(!std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_function() +{ + test_function_imp(); + test_function_imp(); + test_function_imp(); + test_function_imp(); +} + +int main() +{ + test_function(); + test_function(); + test_function(); + test_function(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/integral.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/integral.pass.cpp index 12c72ee5a..fdf374b23 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/integral.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/integral.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // integral #include template void test_integral_imp() { static_assert(!std::is_reference::value, ""); static_assert( std::is_arithmetic::value, ""); static_assert( std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert(!std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_integral() { test_integral_imp(); test_integral_imp(); test_integral_imp(); test_integral_imp(); } int main() { test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); test_integral(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// integral + +#include + +template +void test_integral_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert( std::is_arithmetic::value, ""); + static_assert( std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert(!std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_integral() +{ + test_integral_imp(); + test_integral_imp(); + test_integral_imp(); + test_integral_imp(); +} + +int main() +{ + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); + test_integral(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/lvalue_ref.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/lvalue_ref.pass.cpp index db749b0e8..8a4fdb7df 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/lvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/lvalue_ref.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // lvalue_ref #include template void test_lvalue_ref() { static_assert( std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert(!std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } int main() { test_lvalue_ref(); test_lvalue_ref(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// lvalue_ref + +#include + +template +void test_lvalue_ref() +{ + static_assert( std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert(!std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +int main() +{ + test_lvalue_ref(); + test_lvalue_ref(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/member_function_pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/member_function_pointer.pass.cpp index 9e8f15973..05c79be84 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/member_function_pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/member_function_pointer.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // member_function_pointer #include template void test_member_function_pointer_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert( std::is_member_pointer::value, ""); } template void test_member_function_pointer() { test_member_function_pointer_imp(); test_member_function_pointer_imp(); test_member_function_pointer_imp(); test_member_function_pointer_imp(); } class Class { }; int main() { test_member_function_pointer(); test_member_function_pointer(); test_member_function_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// member_function_pointer + +#include + +template +void test_member_function_pointer_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert( std::is_member_pointer::value, ""); +} + +template +void test_member_function_pointer() +{ + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); + test_member_function_pointer_imp(); +} + +class Class +{ +}; + +int main() +{ + test_member_function_pointer(); + test_member_function_pointer(); + test_member_function_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/member_object_pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/member_object_pointer.pass.cpp index 6af0606f0..2ac244382 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/member_object_pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/member_object_pointer.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // member_object_pointer #include template void test_member_object_pointer_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert( std::is_member_pointer::value, ""); } template void test_member_object_pointer() { test_member_object_pointer_imp(); test_member_object_pointer_imp(); test_member_object_pointer_imp(); test_member_object_pointer_imp(); } class Class { }; int main() { test_member_object_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// member_object_pointer + +#include + +template +void test_member_object_pointer_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert( std::is_member_pointer::value, ""); +} + +template +void test_member_object_pointer() +{ + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); + test_member_object_pointer_imp(); +} + +class Class +{ +}; + +int main() +{ + test_member_object_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/pointer.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/pointer.pass.cpp index ccc936b13..4cc5ccf99 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/pointer.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/pointer.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // pointer #include template void test_pointer_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert( std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_pointer() { test_pointer_imp(); test_pointer_imp(); test_pointer_imp(); test_pointer_imp(); } int main() { test_pointer(); test_pointer(); test_pointer(); test_pointer(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// pointer + +#include + +template +void test_pointer_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert( std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_pointer() +{ + test_pointer_imp(); + test_pointer_imp(); + test_pointer_imp(); + test_pointer_imp(); +} + +int main() +{ + test_pointer(); + test_pointer(); + test_pointer(); + test_pointer(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp index 7233ba99f..62f997815 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/rvalue_ref.pass.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // rvalue_ref #include template void test_rvalue_ref() { static_assert(std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert(!std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } int main() { #ifdef _LIBCPP_MOVE test_rvalue_ref(); test_rvalue_ref(); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// rvalue_ref + +#include + +template +void test_rvalue_ref() +{ + static_assert(std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert(!std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +int main() +{ +#ifdef _LIBCPP_MOVE + test_rvalue_ref(); + test_rvalue_ref(); +#endif // _LIBCPP_MOVE +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/union.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/union.pass.cpp index 8eb857064..eeb073e96 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/union.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/union.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // union #include template void test_union_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert(!std::is_fundamental::value, ""); static_assert( std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert( std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_union() { test_union_imp(); test_union_imp(); test_union_imp(); test_union_imp(); } union Union { int _; double __; }; int main() { test_union(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// union + +#include + +template +void test_union_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert(!std::is_fundamental::value, ""); + static_assert( std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert( std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_union() +{ + test_union_imp(); + test_union_imp(); + test_union_imp(); + test_union_imp(); +} + +union Union +{ + int _; + double __; +}; + +int main() +{ + test_union(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.comp/void.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.comp/void.pass.cpp index 88c2fa8a0..9bebfba6d 100644 --- a/test/utilities/meta/meta.unary/meta.unary.comp/void.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.comp/void.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // void #include template void test_void_imp() { static_assert(!std::is_reference::value, ""); static_assert(!std::is_arithmetic::value, ""); static_assert( std::is_fundamental::value, ""); static_assert(!std::is_object::value, ""); static_assert(!std::is_scalar::value, ""); static_assert(!std::is_compound::value, ""); static_assert(!std::is_member_pointer::value, ""); } template void test_void() { test_void_imp(); test_void_imp(); test_void_imp(); test_void_imp(); } int main() { test_void(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// void + +#include + +template +void test_void_imp() +{ + static_assert(!std::is_reference::value, ""); + static_assert(!std::is_arithmetic::value, ""); + static_assert( std::is_fundamental::value, ""); + static_assert(!std::is_object::value, ""); + static_assert(!std::is_scalar::value, ""); + static_assert(!std::is_compound::value, ""); + static_assert(!std::is_member_pointer::value, ""); +} + +template +void test_void() +{ + test_void_imp(); + test_void_imp(); + test_void_imp(); + test_void_imp(); +} + +int main() +{ + test_void(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/alignment_of.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/alignment_of.pass.cpp index 093ca33c9..a277a3468 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/alignment_of.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/alignment_of.pass.cpp @@ -1 +1,42 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // alignment_of #include template void test_alignment_of() { static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); static_assert( std::alignment_of::value == A, ""); } class Class { public: ~Class(); }; int main() { test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); test_alignment_of(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// alignment_of + +#include + +template +void test_alignment_of() +{ + static_assert( std::alignment_of::value == A, ""); + static_assert( std::alignment_of::value == A, ""); + static_assert( std::alignment_of::value == A, ""); + static_assert( std::alignment_of::value == A, ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); + test_alignment_of(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/extent.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/extent.pass.cpp index d149eb3d9..105217c21 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/extent.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/extent.pass.cpp @@ -1 +1,60 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // extent #include template void test_extent() { static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); } template void test_extent1() { static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); static_assert((std::extent::value == A), ""); } class Class { public: ~Class(); }; int main() { test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent(); test_extent1(); test_extent1(); test_extent1(); test_extent1(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// extent + +#include + +template +void test_extent() +{ + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); +} + +template +void test_extent1() +{ + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); + static_assert((std::extent::value == A), ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_extent(); + test_extent(); + test_extent(); + test_extent(); + test_extent(); + test_extent(); + test_extent(); + test_extent(); + test_extent(); + + test_extent(); + test_extent(); + test_extent(); + + test_extent1(); + test_extent1(); + test_extent1(); + test_extent1(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_assign.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_assign.pass.cpp index 31a5a7c1c..127e76290 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_assign.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_assign.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_nothrow_copy_assign #include template void test_has_nothrow_assign() { static_assert( std::has_nothrow_copy_assign::value, ""); static_assert(!std::has_nothrow_copy_assign::value, ""); static_assert( std::has_nothrow_copy_assign::value, ""); static_assert(!std::has_nothrow_copy_assign::value, ""); } template void test_has_not_nothrow_assign() { static_assert(!std::has_nothrow_copy_assign::value, ""); static_assert(!std::has_nothrow_copy_assign::value, ""); static_assert(!std::has_nothrow_copy_assign::value, ""); static_assert(!std::has_nothrow_copy_assign::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A& operator=(const A&); }; int main() { test_has_not_nothrow_assign(); test_has_not_nothrow_assign(); test_has_not_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); test_has_nothrow_assign(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_nothrow_copy_assign + +#include + +template +void test_has_nothrow_assign() +{ + static_assert( std::has_nothrow_copy_assign::value, ""); + static_assert(!std::has_nothrow_copy_assign::value, ""); + static_assert( std::has_nothrow_copy_assign::value, ""); + static_assert(!std::has_nothrow_copy_assign::value, ""); +} + +template +void test_has_not_nothrow_assign() +{ + static_assert(!std::has_nothrow_copy_assign::value, ""); + static_assert(!std::has_nothrow_copy_assign::value, ""); + static_assert(!std::has_nothrow_copy_assign::value, ""); + static_assert(!std::has_nothrow_copy_assign::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A& operator=(const A&); +}; + +int main() +{ + test_has_not_nothrow_assign(); + test_has_not_nothrow_assign(); + test_has_not_nothrow_assign(); + + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); + test_has_nothrow_assign(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_constructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_constructor.pass.cpp index 1a9beaa5d..1634dea8b 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_constructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_copy_constructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_nothrow_copy_constructor #include template void test_has_nothrow_copy_constructor() { static_assert( std::has_nothrow_copy_constructor::value, ""); static_assert( std::has_nothrow_copy_constructor::value, ""); static_assert( std::has_nothrow_copy_constructor::value, ""); static_assert( std::has_nothrow_copy_constructor::value, ""); } template void test_has_not_nothrow_copy_constructor() { static_assert(!std::has_nothrow_copy_constructor::value, ""); static_assert(!std::has_nothrow_copy_constructor::value, ""); static_assert(!std::has_nothrow_copy_constructor::value, ""); static_assert(!std::has_nothrow_copy_constructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A(const A&); }; int main() { test_has_not_nothrow_copy_constructor(); test_has_not_nothrow_copy_constructor(); test_has_not_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); test_has_nothrow_copy_constructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_nothrow_copy_constructor + +#include + +template +void test_has_nothrow_copy_constructor() +{ + static_assert( std::has_nothrow_copy_constructor::value, ""); + static_assert( std::has_nothrow_copy_constructor::value, ""); + static_assert( std::has_nothrow_copy_constructor::value, ""); + static_assert( std::has_nothrow_copy_constructor::value, ""); +} + +template +void test_has_not_nothrow_copy_constructor() +{ + static_assert(!std::has_nothrow_copy_constructor::value, ""); + static_assert(!std::has_nothrow_copy_constructor::value, ""); + static_assert(!std::has_nothrow_copy_constructor::value, ""); + static_assert(!std::has_nothrow_copy_constructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A(const A&); +}; + +int main() +{ + test_has_not_nothrow_copy_constructor(); + test_has_not_nothrow_copy_constructor(); + test_has_not_nothrow_copy_constructor(); + + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); + test_has_nothrow_copy_constructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_default_constructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_default_constructor.pass.cpp index 2a4e81e5d..cc4a45809 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_default_constructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_nothrow_default_constructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_nothrow_default_constructor #include template void test_has_nothrow_default_constructor() { static_assert( std::has_nothrow_default_constructor::value, ""); static_assert( std::has_nothrow_default_constructor::value, ""); static_assert( std::has_nothrow_default_constructor::value, ""); static_assert( std::has_nothrow_default_constructor::value, ""); } template void test_has_not_nothrow_default_constructor() { static_assert(!std::has_nothrow_default_constructor::value, ""); static_assert(!std::has_nothrow_default_constructor::value, ""); static_assert(!std::has_nothrow_default_constructor::value, ""); static_assert(!std::has_nothrow_default_constructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A(); }; int main() { test_has_not_nothrow_default_constructor(); test_has_not_nothrow_default_constructor(); test_has_not_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); test_has_nothrow_default_constructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_nothrow_default_constructor + +#include + +template +void test_has_nothrow_default_constructor() +{ + static_assert( std::has_nothrow_default_constructor::value, ""); + static_assert( std::has_nothrow_default_constructor::value, ""); + static_assert( std::has_nothrow_default_constructor::value, ""); + static_assert( std::has_nothrow_default_constructor::value, ""); +} + +template +void test_has_not_nothrow_default_constructor() +{ + static_assert(!std::has_nothrow_default_constructor::value, ""); + static_assert(!std::has_nothrow_default_constructor::value, ""); + static_assert(!std::has_nothrow_default_constructor::value, ""); + static_assert(!std::has_nothrow_default_constructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A(); +}; + +int main() +{ + test_has_not_nothrow_default_constructor(); + test_has_not_nothrow_default_constructor(); + test_has_not_nothrow_default_constructor(); + + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); + test_has_nothrow_default_constructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_assign.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_assign.pass.cpp index 064195027..762bd5114 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_assign.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_assign.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_trivial_copy_assign #include template void test_has_trivial_assign() { static_assert( std::has_trivial_copy_assign::value, ""); static_assert(!std::has_trivial_copy_assign::value, ""); static_assert( std::has_trivial_copy_assign::value, ""); static_assert(!std::has_trivial_copy_assign::value, ""); } template void test_has_not_trivial_assign() { static_assert(!std::has_trivial_copy_assign::value, ""); static_assert(!std::has_trivial_copy_assign::value, ""); static_assert(!std::has_trivial_copy_assign::value, ""); static_assert(!std::has_trivial_copy_assign::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A& operator=(const A&); }; int main() { test_has_not_trivial_assign(); test_has_not_trivial_assign(); test_has_not_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); test_has_trivial_assign(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_trivial_copy_assign + +#include + +template +void test_has_trivial_assign() +{ + static_assert( std::has_trivial_copy_assign::value, ""); + static_assert(!std::has_trivial_copy_assign::value, ""); + static_assert( std::has_trivial_copy_assign::value, ""); + static_assert(!std::has_trivial_copy_assign::value, ""); +} + +template +void test_has_not_trivial_assign() +{ + static_assert(!std::has_trivial_copy_assign::value, ""); + static_assert(!std::has_trivial_copy_assign::value, ""); + static_assert(!std::has_trivial_copy_assign::value, ""); + static_assert(!std::has_trivial_copy_assign::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A& operator=(const A&); +}; + +int main() +{ + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); + test_has_not_trivial_assign(); + + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); + test_has_trivial_assign(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_constructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_constructor.pass.cpp index 711d9c391..c51b77267 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_constructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_copy_constructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_trivial_copy_constructor #include template void test_has_trivial_copy_constructor() { static_assert( std::has_trivial_copy_constructor::value, ""); static_assert( std::has_trivial_copy_constructor::value, ""); static_assert( std::has_trivial_copy_constructor::value, ""); static_assert( std::has_trivial_copy_constructor::value, ""); } template void test_has_not_trivial_copy_constructor() { static_assert(!std::has_trivial_copy_constructor::value, ""); static_assert(!std::has_trivial_copy_constructor::value, ""); static_assert(!std::has_trivial_copy_constructor::value, ""); static_assert(!std::has_trivial_copy_constructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A(const A&); }; int main() { test_has_not_trivial_copy_constructor(); test_has_not_trivial_copy_constructor(); test_has_not_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); test_has_trivial_copy_constructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_trivial_copy_constructor + +#include + +template +void test_has_trivial_copy_constructor() +{ + static_assert( std::has_trivial_copy_constructor::value, ""); + static_assert( std::has_trivial_copy_constructor::value, ""); + static_assert( std::has_trivial_copy_constructor::value, ""); + static_assert( std::has_trivial_copy_constructor::value, ""); +} + +template +void test_has_not_trivial_copy_constructor() +{ + static_assert(!std::has_trivial_copy_constructor::value, ""); + static_assert(!std::has_trivial_copy_constructor::value, ""); + static_assert(!std::has_trivial_copy_constructor::value, ""); + static_assert(!std::has_trivial_copy_constructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A(const A&); +}; + +int main() +{ + test_has_not_trivial_copy_constructor(); + test_has_not_trivial_copy_constructor(); + test_has_not_trivial_copy_constructor(); + + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); + test_has_trivial_copy_constructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_default_constructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_default_constructor.pass.cpp index 841fb37ec..cf20c8223 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_default_constructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_default_constructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_trivial_default_constructor #include template void test_has_trivial_default_constructor() { static_assert( std::has_trivial_default_constructor::value, ""); static_assert( std::has_trivial_default_constructor::value, ""); static_assert( std::has_trivial_default_constructor::value, ""); static_assert( std::has_trivial_default_constructor::value, ""); } template void test_has_not_trivial_default_constructor() { static_assert(!std::has_trivial_default_constructor::value, ""); static_assert(!std::has_trivial_default_constructor::value, ""); static_assert(!std::has_trivial_default_constructor::value, ""); static_assert(!std::has_trivial_default_constructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A(); }; int main() { test_has_not_trivial_default_constructor(); test_has_not_trivial_default_constructor(); test_has_not_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); test_has_trivial_default_constructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_trivial_default_constructor + +#include + +template +void test_has_trivial_default_constructor() +{ + static_assert( std::has_trivial_default_constructor::value, ""); + static_assert( std::has_trivial_default_constructor::value, ""); + static_assert( std::has_trivial_default_constructor::value, ""); + static_assert( std::has_trivial_default_constructor::value, ""); +} + +template +void test_has_not_trivial_default_constructor() +{ + static_assert(!std::has_trivial_default_constructor::value, ""); + static_assert(!std::has_trivial_default_constructor::value, ""); + static_assert(!std::has_trivial_default_constructor::value, ""); + static_assert(!std::has_trivial_default_constructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A(); +}; + +int main() +{ + test_has_not_trivial_default_constructor(); + test_has_not_trivial_default_constructor(); + test_has_not_trivial_default_constructor(); + + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); + test_has_trivial_default_constructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_destructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_destructor.pass.cpp index b0b09d9c8..37c278ceb 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_destructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_trivial_destructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_trivial_destructor #include template void test_has_trivial_destructor() { static_assert( std::has_trivial_destructor::value, ""); static_assert( std::has_trivial_destructor::value, ""); static_assert( std::has_trivial_destructor::value, ""); static_assert( std::has_trivial_destructor::value, ""); } template void test_has_not_trivial_destructor() { static_assert(!std::has_trivial_destructor::value, ""); static_assert(!std::has_trivial_destructor::value, ""); static_assert(!std::has_trivial_destructor::value, ""); static_assert(!std::has_trivial_destructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { ~A(); }; int main() { test_has_not_trivial_destructor(); test_has_not_trivial_destructor(); test_has_not_trivial_destructor(); test_has_not_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); test_has_trivial_destructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_trivial_destructor + +#include + +template +void test_has_trivial_destructor() +{ + static_assert( std::has_trivial_destructor::value, ""); + static_assert( std::has_trivial_destructor::value, ""); + static_assert( std::has_trivial_destructor::value, ""); + static_assert( std::has_trivial_destructor::value, ""); +} + +template +void test_has_not_trivial_destructor() +{ + static_assert(!std::has_trivial_destructor::value, ""); + static_assert(!std::has_trivial_destructor::value, ""); + static_assert(!std::has_trivial_destructor::value, ""); + static_assert(!std::has_trivial_destructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + ~A(); +}; + +int main() +{ + test_has_not_trivial_destructor(); + test_has_not_trivial_destructor(); + test_has_not_trivial_destructor(); + test_has_not_trivial_destructor(); + + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); + test_has_trivial_destructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp index 05198ba13..a9b389604 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/has_virtual_destructor.pass.cpp @@ -1 +1,77 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // has_virtual_destructor #include template void test_has_virtual_destructor() { static_assert( std::has_virtual_destructor::value, ""); static_assert( std::has_virtual_destructor::value, ""); static_assert( std::has_virtual_destructor::value, ""); static_assert( std::has_virtual_destructor::value, ""); } template void test_has_not_virtual_destructor() { static_assert(!std::has_virtual_destructor::value, ""); static_assert(!std::has_virtual_destructor::value, ""); static_assert(!std::has_virtual_destructor::value, ""); static_assert(!std::has_virtual_destructor::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { ~A(); }; int main() { test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_not_virtual_destructor(); test_has_virtual_destructor(); test_has_virtual_destructor(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// has_virtual_destructor + +#include + +template +void test_has_virtual_destructor() +{ + static_assert( std::has_virtual_destructor::value, ""); + static_assert( std::has_virtual_destructor::value, ""); + static_assert( std::has_virtual_destructor::value, ""); + static_assert( std::has_virtual_destructor::value, ""); +} + +template +void test_has_not_virtual_destructor() +{ + static_assert(!std::has_virtual_destructor::value, ""); + static_assert(!std::has_virtual_destructor::value, ""); + static_assert(!std::has_virtual_destructor::value, ""); + static_assert(!std::has_virtual_destructor::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + ~A(); +}; + +int main() +{ + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + test_has_not_virtual_destructor(); + + test_has_virtual_destructor(); + test_has_virtual_destructor(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp index 583cbff8f..9be3d1dfe 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_abstract.pass.cpp @@ -1 +1,71 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_abstract #include template void test_is_abstract() { static_assert( std::is_abstract::value, ""); static_assert( std::is_abstract::value, ""); static_assert( std::is_abstract::value, ""); static_assert( std::is_abstract::value, ""); } template void test_is_not_abstract() { static_assert(!std::is_abstract::value, ""); static_assert(!std::is_abstract::value, ""); static_assert(!std::is_abstract::value, ""); static_assert(!std::is_abstract::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; int main() { test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_not_abstract(); test_is_abstract(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_abstract + +#include + +template +void test_is_abstract() +{ + static_assert( std::is_abstract::value, ""); + static_assert( std::is_abstract::value, ""); + static_assert( std::is_abstract::value, ""); + static_assert( std::is_abstract::value, ""); +} + +template +void test_is_not_abstract() +{ + static_assert(!std::is_abstract::value, ""); + static_assert(!std::is_abstract::value, ""); + static_assert(!std::is_abstract::value, ""); + static_assert(!std::is_abstract::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +int main() +{ + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + test_is_not_abstract(); + + test_is_abstract(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp index c56b78ba5..7aeefa568 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_const.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_const #include template void test_is_const() { static_assert(!std::is_const::value, ""); static_assert( std::is_const::value, ""); static_assert(!std::is_const::value, ""); static_assert( std::is_const::value, ""); } int main() { test_is_const(); test_is_const(); test_is_const(); test_is_const(); test_is_const(); test_is_const(); test_is_const(); static_assert(!std::is_const::value, ""); static_assert(!std::is_const::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_const + +#include + +template +void test_is_const() +{ + static_assert(!std::is_const::value, ""); + static_assert( std::is_const::value, ""); + static_assert(!std::is_const::value, ""); + static_assert( std::is_const::value, ""); +} + +int main() +{ + test_is_const(); + test_is_const(); + test_is_const(); + test_is_const(); + test_is_const(); + test_is_const(); + test_is_const(); + + static_assert(!std::is_const::value, ""); + static_assert(!std::is_const::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp index a4601fd9b..344ddcc03 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_constructible.pass.cpp @@ -1 +1,38 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // template // struct is_constructible; #include #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE struct A { explicit A(int); A(int, double); }; #endif int main() { #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE static_assert((std::is_constructible::value), ""); static_assert((std::is_constructible::value), ""); static_assert((std::is_constructible::value), ""); static_assert((std::is_constructible::value), ""); static_assert((!std::is_constructible::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// template +// struct is_constructible; + +#include + +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + +struct A +{ + explicit A(int); + A(int, double); +}; + +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE + +int main() +{ +#ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE + + static_assert((std::is_constructible::value), ""); + static_assert((std::is_constructible::value), ""); + static_assert((std::is_constructible::value), ""); + static_assert((std::is_constructible::value), ""); + static_assert((!std::is_constructible::value), ""); + +#endif // _LIBCPP_HAS_NO_ADVANCED_SFINAE +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp index e1dc14f7e..1aebc0bcd 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_empty.pass.cpp @@ -1 +1,65 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_empty #include template void test_is_empty() { static_assert( std::is_empty::value, ""); static_assert( std::is_empty::value, ""); static_assert( std::is_empty::value, ""); static_assert( std::is_empty::value, ""); } template void test_is_not_empty() { static_assert(!std::is_empty::value, ""); static_assert(!std::is_empty::value, ""); static_assert(!std::is_empty::value, ""); static_assert(!std::is_empty::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; int main() { test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_not_empty(); test_is_empty(); test_is_empty(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_empty + +#include + +template +void test_is_empty() +{ + static_assert( std::is_empty::value, ""); + static_assert( std::is_empty::value, ""); + static_assert( std::is_empty::value, ""); + static_assert( std::is_empty::value, ""); +} + +template +void test_is_not_empty() +{ + static_assert(!std::is_empty::value, ""); + static_assert(!std::is_empty::value, ""); + static_assert(!std::is_empty::value, ""); + static_assert(!std::is_empty::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +int main() +{ + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + test_is_not_empty(); + + test_is_empty(); + test_is_empty(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp index cbce73730..557206a3a 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_literal_type.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_literal_type #include int main() { static_assert( std::is_literal_type::value, ""); static_assert( std::is_literal_type::value, ""); static_assert(!std::is_literal_type::value, ""); static_assert(!std::is_literal_type::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_literal_type + +#include + +int main() +{ + static_assert( std::is_literal_type::value, ""); + static_assert( std::is_literal_type::value, ""); + static_assert(!std::is_literal_type::value, ""); + static_assert(!std::is_literal_type::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp index 0974ee3aa..57e176b7c 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_nothrow_constructible.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // template // struct is_nothrow_constructible; #include #ifndef _LIBCPP_HAS_NO_VARIADICS class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; struct A { A(const A&); }; #endif int main() { #ifndef _LIBCPP_HAS_NO_VARIADICS static_assert((std::is_nothrow_constructible::value), ""); #endif } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// template +// struct is_nothrow_constructible; + +#include + +#ifndef _LIBCPP_HAS_NO_VARIADICS + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +struct A +{ + A(const A&); +}; + +#endif // _LIBCPP_HAS_NO_VARIADICS + +int main() +{ +#ifndef _LIBCPP_HAS_NO_VARIADICS + static_assert((std::is_nothrow_constructible::value), ""); +#endif +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp index 8f783b073..a70d23ca1 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_pod.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_pod #include template void test_is_pod() { static_assert( std::is_pod::value, ""); static_assert( std::is_pod::value, ""); static_assert( std::is_pod::value, ""); static_assert( std::is_pod::value, ""); } template void test_is_not_pod() { static_assert(!std::is_pod::value, ""); static_assert(!std::is_pod::value, ""); static_assert(!std::is_pod::value, ""); static_assert(!std::is_pod::value, ""); } class Class { public: ~Class(); }; int main() { test_is_not_pod(); test_is_not_pod(); test_is_not_pod(); test_is_pod(); test_is_pod(); test_is_pod(); test_is_pod(); test_is_pod(); test_is_pod(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_pod + +#include + +template +void test_is_pod() +{ + static_assert( std::is_pod::value, ""); + static_assert( std::is_pod::value, ""); + static_assert( std::is_pod::value, ""); + static_assert( std::is_pod::value, ""); +} + +template +void test_is_not_pod() +{ + static_assert(!std::is_pod::value, ""); + static_assert(!std::is_pod::value, ""); + static_assert(!std::is_pod::value, ""); + static_assert(!std::is_pod::value, ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_is_not_pod(); + test_is_not_pod(); + test_is_not_pod(); + + test_is_pod(); + test_is_pod(); + test_is_pod(); + test_is_pod(); + test_is_pod(); + test_is_pod(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp index 07004b9fa..018478923 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_polymorphic.pass.cpp @@ -1 +1,71 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_polymorphic #include template void test_is_polymorphic() { static_assert( std::is_polymorphic::value, ""); static_assert( std::is_polymorphic::value, ""); static_assert( std::is_polymorphic::value, ""); static_assert( std::is_polymorphic::value, ""); } template void test_is_not_polymorphic() { static_assert(!std::is_polymorphic::value, ""); static_assert(!std::is_polymorphic::value, ""); static_assert(!std::is_polymorphic::value, ""); static_assert(!std::is_polymorphic::value, ""); } class Empty { }; class NotEmpty { virtual ~NotEmpty(); }; union Union {}; struct bit_zero { int : 0; }; class Abstract { virtual ~Abstract() = 0; }; int main() { test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_not_polymorphic(); test_is_polymorphic(); test_is_polymorphic(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_polymorphic + +#include + +template +void test_is_polymorphic() +{ + static_assert( std::is_polymorphic::value, ""); + static_assert( std::is_polymorphic::value, ""); + static_assert( std::is_polymorphic::value, ""); + static_assert( std::is_polymorphic::value, ""); +} + +template +void test_is_not_polymorphic() +{ + static_assert(!std::is_polymorphic::value, ""); + static_assert(!std::is_polymorphic::value, ""); + static_assert(!std::is_polymorphic::value, ""); + static_assert(!std::is_polymorphic::value, ""); +} + +class Empty +{ +}; + +class NotEmpty +{ + virtual ~NotEmpty(); +}; + +union Union {}; + +struct bit_zero +{ + int : 0; +}; + +class Abstract +{ + virtual ~Abstract() = 0; +}; + +int main() +{ + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + test_is_not_polymorphic(); + + test_is_polymorphic(); + test_is_polymorphic(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp index 0416e3a96..10b8f4e0c 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_signed.pass.cpp @@ -1 +1,54 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_signed #include template void test_is_signed() { static_assert( std::is_signed::value, ""); static_assert( std::is_signed::value, ""); static_assert( std::is_signed::value, ""); static_assert( std::is_signed::value, ""); } template void test_is_not_signed() { static_assert(!std::is_signed::value, ""); static_assert(!std::is_signed::value, ""); static_assert(!std::is_signed::value, ""); static_assert(!std::is_signed::value, ""); } class Class { public: ~Class(); }; int main() { test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_not_signed(); test_is_signed(); test_is_signed(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_signed + +#include + +template +void test_is_signed() +{ + static_assert( std::is_signed::value, ""); + static_assert( std::is_signed::value, ""); + static_assert( std::is_signed::value, ""); + static_assert( std::is_signed::value, ""); +} + +template +void test_is_not_signed() +{ + static_assert(!std::is_signed::value, ""); + static_assert(!std::is_signed::value, ""); + static_assert(!std::is_signed::value, ""); + static_assert(!std::is_signed::value, ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + test_is_not_signed(); + + test_is_signed(); + test_is_signed(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp index ede3b834a..7371adbe6 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_standard_layout.pass.cpp @@ -1 +1,21 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_standard_layout #include int main() { static_assert( std::is_standard_layout::value, ""); static_assert(!std::is_standard_layout::value, ""); static_assert(!std::is_standard_layout::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_standard_layout + +#include + +int main() +{ + static_assert( std::is_standard_layout::value, ""); + static_assert(!std::is_standard_layout::value, ""); + static_assert(!std::is_standard_layout::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp index 3a48ccab2..05262b6cf 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivial.pass.cpp @@ -1 +1,21 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_trivial #include int main() { static_assert( std::is_trivial::value, ""); static_assert(!std::is_trivial::value, ""); static_assert(!std::is_trivial::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_trivial + +#include + +int main() +{ + static_assert( std::is_trivial::value, ""); + static_assert(!std::is_trivial::value, ""); + static_assert(!std::is_trivial::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp index b589c2b92..4046dbbc3 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_trivialially_copyable.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_trivially_copyable #include #include struct A { int i_; }; struct B { int i_; ~B() {assert(i_ == 0);} }; int main() { static_assert( std::is_trivially_copyable::value, ""); static_assert( std::is_trivially_copyable::value, ""); static_assert(!std::is_trivially_copyable::value, ""); static_assert( std::is_trivially_copyable::value, ""); static_assert( std::is_trivially_copyable::value, ""); static_assert(!std::is_trivially_copyable::value, ""); static_assert(!std::is_trivially_copyable::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_trivially_copyable + +#include +#include + +struct A +{ + int i_; +}; + +struct B +{ + int i_; + ~B() {assert(i_ == 0);} +}; + +int main() +{ + static_assert( std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); + static_assert( std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); + static_assert(!std::is_trivially_copyable::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp index 9967cc4ab..d5696feb8 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_unsigned.pass.cpp @@ -1 +1,54 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_unsigned #include template void test_is_unsigned() { static_assert( std::is_unsigned::value, ""); static_assert( std::is_unsigned::value, ""); static_assert( std::is_unsigned::value, ""); static_assert( std::is_unsigned::value, ""); } template void test_is_not_unsigned() { static_assert(!std::is_unsigned::value, ""); static_assert(!std::is_unsigned::value, ""); static_assert(!std::is_unsigned::value, ""); static_assert(!std::is_unsigned::value, ""); } class Class { public: ~Class(); }; int main() { test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_not_unsigned(); test_is_unsigned(); test_is_unsigned(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_unsigned + +#include + +template +void test_is_unsigned() +{ + static_assert( std::is_unsigned::value, ""); + static_assert( std::is_unsigned::value, ""); + static_assert( std::is_unsigned::value, ""); + static_assert( std::is_unsigned::value, ""); +} + +template +void test_is_not_unsigned() +{ + static_assert(!std::is_unsigned::value, ""); + static_assert(!std::is_unsigned::value, ""); + static_assert(!std::is_unsigned::value, ""); + static_assert(!std::is_unsigned::value, ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + test_is_not_unsigned(); + + test_is_unsigned(); + test_is_unsigned(); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp index 00ff887e6..92a46bd90 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/is_volatile.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // is_volatile #include template void test_is_volatile() { static_assert(!std::is_volatile::value, ""); static_assert(!std::is_volatile::value, ""); static_assert( std::is_volatile::value, ""); static_assert( std::is_volatile::value, ""); } int main() { test_is_volatile(); test_is_volatile(); test_is_volatile(); test_is_volatile(); test_is_volatile(); test_is_volatile(); test_is_volatile(); static_assert(!std::is_volatile::value, ""); static_assert(!std::is_volatile::value, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// is_volatile + +#include + +template +void test_is_volatile() +{ + static_assert(!std::is_volatile::value, ""); + static_assert(!std::is_volatile::value, ""); + static_assert( std::is_volatile::value, ""); + static_assert( std::is_volatile::value, ""); +} + +int main() +{ + test_is_volatile(); + test_is_volatile(); + test_is_volatile(); + test_is_volatile(); + test_is_volatile(); + test_is_volatile(); + test_is_volatile(); + + static_assert(!std::is_volatile::value, ""); + static_assert(!std::is_volatile::value, ""); +} diff --git a/test/utilities/meta/meta.unary/meta.unary.prop/rank.pass.cpp b/test/utilities/meta/meta.unary/meta.unary.prop/rank.pass.cpp index 0cd61f685..d2e4702e8 100644 --- a/test/utilities/meta/meta.unary/meta.unary.prop/rank.pass.cpp +++ b/test/utilities/meta/meta.unary/meta.unary.prop/rank.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // type_traits // rank #include template void test_rank() { static_assert( std::rank::value == A, ""); static_assert( std::rank::value == A, ""); static_assert( std::rank::value == A, ""); static_assert( std::rank::value == A, ""); } class Class { public: ~Class(); }; int main() { test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); test_rank(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// type_traits + +// rank + +#include + +template +void test_rank() +{ + static_assert( std::rank::value == A, ""); + static_assert( std::rank::value == A, ""); + static_assert( std::rank::value == A, ""); + static_assert( std::rank::value == A, ""); +} + +class Class +{ +public: + ~Class(); +}; + +int main() +{ + test_rank(); + test_rank(); + test_rank(); + test_rank(); + test_rank(); + test_rank(); + test_rank(); + test_rank(); + test_rank(); + + test_rank(); + test_rank(); + test_rank(); +} diff --git a/test/utilities/meta/meta.unary/nothing_to_do.pass.cpp b/test/utilities/meta/meta.unary/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/meta/meta.unary/nothing_to_do.pass.cpp +++ b/test/utilities/meta/meta.unary/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/meta/version.pass.cpp b/test/utilities/meta/version.pass.cpp index 513d4080a..9aa7c8c09 100644 --- a/test/utilities/meta/version.pass.cpp +++ b/test/utilities/meta/version.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // #include #ifndef _LIBCPP_VERSION #error _LIBCPP_VERSION not defined #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/test/utilities/nothing_to_do.pass.cpp b/test/utilities/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/nothing_to_do.pass.cpp +++ b/test/utilities/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_add.fail.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_add.fail.cpp index 4b88d7ca1..17d7a900d 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_add.fail.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_add.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_add #include int main() { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_add::type R; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_add + +#include + +int main() +{ + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_add::type R; +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp index 8ab8ad985..e69f11f43 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_add.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_add #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_add::type R; static_assert(R::num == 2 && R::den == 1, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_add::type R; static_assert(R::num == 3 && R::den == 2, ""); } { typedef std::ratio<-1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_add::type R; static_assert(R::num == 1 && R::den == 2, ""); } { typedef std::ratio<1, -2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_add::type R; static_assert(R::num == 1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<-1, 1> R2; typedef std::ratio_add::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, -1> R2; typedef std::ratio_add::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<56987354, 467584654> R1; typedef std::ratio<544668, 22145> R2; typedef std::ratio_add::type R; static_assert(R::num == 127970191639601LL && R::den == 5177331081415LL, ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_add + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == 2 && R::den == 1, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == 3 && R::den == 2, ""); + } + { + typedef std::ratio<-1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == 1 && R::den == 2, ""); + } + { + typedef std::ratio<1, -2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == 1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<-1, 1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, -1> R2; + typedef std::ratio_add::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<56987354, 467584654> R1; + typedef std::ratio<544668, 22145> R2; + typedef std::ratio_add::type R; + static_assert(R::num == 127970191639601LL && R::den == 5177331081415LL, ""); + } +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_divide.fail.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_divide.fail.cpp index 6058f7cdb..69acec1f8 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_divide.fail.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_divide.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_divide #include int main() { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<1, 2> R2; typedef std::ratio_divide::type R; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_divide + +#include + +int main() +{ + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<1, 2> R2; + typedef std::ratio_divide::type R; +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_divide.pass.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_divide.pass.cpp index 79623e674..2e7b31257 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_divide.pass.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_divide.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_divide #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_divide::type R; static_assert(R::num == 1 && R::den == 1, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_divide::type R; static_assert(R::num == 1 && R::den == 2, ""); } { typedef std::ratio<-1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_divide::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, -2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_divide::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<-1, 1> R2; typedef std::ratio_divide::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, -1> R2; typedef std::ratio_divide::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<56987354, 467584654> R1; typedef std::ratio<544668, 22145> R2; typedef std::ratio_divide::type R; static_assert(R::num == 630992477165LL && R::den == 127339199162436LL, ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_divide + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == 1 && R::den == 1, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == 1 && R::den == 2, ""); + } + { + typedef std::ratio<-1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, -2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<-1, 1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, -1> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<56987354, 467584654> R1; + typedef std::ratio<544668, 22145> R2; + typedef std::ratio_divide::type R; + static_assert(R::num == 630992477165LL && R::den == 127339199162436LL, ""); + } +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_multiply.fail.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_multiply.fail.cpp index 04e7683d1..98031002c 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_multiply.fail.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_multiply.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_multiply #include int main() { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<2, 1> R2; typedef std::ratio_multiply::type R; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_multiply + +#include + +int main() +{ + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<2, 1> R2; + typedef std::ratio_multiply::type R; +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_multiply.pass.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_multiply.pass.cpp index b4b3f6a72..24d980a11 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_multiply.pass.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_multiply.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_multiply #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == 1 && R::den == 1, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == 1 && R::den == 2, ""); } { typedef std::ratio<-1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, -2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<-1, 1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, -1> R2; typedef std::ratio_multiply::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<56987354, 467584654> R1; typedef std::ratio<544668, 22145> R2; typedef std::ratio_multiply::type R; static_assert(R::num == 15519594064236LL && R::den == 5177331081415LL, ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_multiply + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == 1 && R::den == 1, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == 1 && R::den == 2, ""); + } + { + typedef std::ratio<-1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, -2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<-1, 1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, -1> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<56987354, 467584654> R1; + typedef std::ratio<544668, 22145> R2; + typedef std::ratio_multiply::type R; + static_assert(R::num == 15519594064236LL && R::den == 5177331081415LL, ""); + } +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_subtract.fail.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_subtract.fail.cpp index 7d03fb7a6..8b5ea5d2d 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_subtract.fail.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_subtract.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_subtract #include int main() { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_subtract::type R; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_subtract + +#include + +int main() +{ + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_subtract::type R; +} diff --git a/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp b/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp index 3068ecaf9..11e53d1f8 100644 --- a/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp +++ b/test/utilities/ratio/ratio.arithmetic/ratio_subtract.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_subtract #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == 0 && R::den == 1, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == -1 && R::den == 2, ""); } { typedef std::ratio<-1, 2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == -3 && R::den == 2, ""); } { typedef std::ratio<1, -2> R1; typedef std::ratio<1, 1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == -3 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<-1, 1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == 3 && R::den == 2, ""); } { typedef std::ratio<1, 2> R1; typedef std::ratio<1, -1> R2; typedef std::ratio_subtract::type R; static_assert(R::num == 3 && R::den == 2, ""); } { typedef std::ratio<56987354, 467584654> R1; typedef std::ratio<544668, 22145> R2; typedef std::ratio_subtract::type R; static_assert(R::num == -126708206685271LL && R::den == 5177331081415LL, ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_subtract + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == 0 && R::den == 1, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == -1 && R::den == 2, ""); + } + { + typedef std::ratio<-1, 2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == -3 && R::den == 2, ""); + } + { + typedef std::ratio<1, -2> R1; + typedef std::ratio<1, 1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == -3 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<-1, 1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == 3 && R::den == 2, ""); + } + { + typedef std::ratio<1, 2> R1; + typedef std::ratio<1, -1> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == 3 && R::den == 2, ""); + } + { + typedef std::ratio<56987354, 467584654> R1; + typedef std::ratio<544668, 22145> R2; + typedef std::ratio_subtract::type R; + static_assert(R::num == -126708206685271LL && R::den == 5177331081415LL, ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_equal.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_equal.pass.cpp index 7f77c02b4..8a78294bc 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_equal.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_equal.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_equal #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((std::ratio_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_equal::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((!std::ratio_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_equal::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_equal + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((std::ratio_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_equal::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((!std::ratio_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_equal::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_greater.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_greater.pass.cpp index 5f75f19dc..662f38444 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_greater.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_greater.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_greater #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((!std::ratio_greater::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_greater::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_greater::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_greater::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((std::ratio_greater::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_greater::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_greater::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_greater::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_greater + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((!std::ratio_greater::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_greater::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_greater::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_greater::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((std::ratio_greater::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_greater::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_greater::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_greater::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_greater_equal.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_greater_equal.pass.cpp index 05533cfa7..1720294bb 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_greater_equal.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_greater_equal.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_greater_equal #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_greater_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_greater_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_greater_equal::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_greater_equal + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_greater_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_greater_equal::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_less.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_less.pass.cpp index 0b264d840..2cc8b960e 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_less.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_less.pass.cpp @@ -1 +1,86 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_less #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_less::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R2; static_assert((std::ratio_less::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R2; static_assert((std::ratio_less::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFELL, 0x7FFFFFFFFFFFFFFDLL> R2; static_assert((std::ratio_less::value), ""); } { typedef std::ratio<641981, 1339063> R1; typedef std::ratio<1291640, 2694141LL> R2; static_assert((!std::ratio_less::value), ""); } { typedef std::ratio<1291640, 2694141LL> R1; typedef std::ratio<641981, 1339063> R2; static_assert((std::ratio_less::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_less + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_less::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R2; + static_assert((std::ratio_less::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFDLL, 0x7FFFFFFFFFFFFFFCLL> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R2; + static_assert((std::ratio_less::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFELL> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFELL, 0x7FFFFFFFFFFFFFFDLL> R2; + static_assert((std::ratio_less::value), ""); + } + { + typedef std::ratio<641981, 1339063> R1; + typedef std::ratio<1291640, 2694141LL> R2; + static_assert((!std::ratio_less::value), ""); + } + { + typedef std::ratio<1291640, 2694141LL> R1; + typedef std::ratio<641981, 1339063> R2; + static_assert((std::ratio_less::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_less_equal.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_less_equal.pass.cpp index 3db02068a..d84a40656 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_less_equal.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_less_equal.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_less_equal #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((std::ratio_less_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_less_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_less_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_less_equal::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((!std::ratio_less_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_less_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_less_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_less_equal::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_less_equal + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((!std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_less_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_less_equal::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.comparison/ratio_not_equal.pass.cpp b/test/utilities/ratio/ratio.comparison/ratio_not_equal.pass.cpp index fa35cef70..0bf77dac1 100644 --- a/test/utilities/ratio/ratio.comparison/ratio_not_equal.pass.cpp +++ b/test/utilities/ratio/ratio.comparison/ratio_not_equal.pass.cpp @@ -1 +1,56 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio_not_equal #include int main() { { typedef std::ratio<1, 1> R1; typedef std::ratio<1, 1> R2; static_assert((!std::ratio_not_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_not_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((!std::ratio_not_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; static_assert((!std::ratio_not_equal::value), ""); } { typedef std::ratio<1, 1> R1; typedef std::ratio<1, -1> R2; static_assert((std::ratio_not_equal::value), ""); } { typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_not_equal::value), ""); } { typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; static_assert((std::ratio_not_equal::value), ""); } { typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; static_assert((std::ratio_not_equal::value), ""); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio_not_equal + +#include + +int main() +{ + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, 1> R2; + static_assert((!std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((!std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((!std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<1, 1> R1; + typedef std::ratio<1, -1> R2; + static_assert((std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<-0x7FFFFFFFFFFFFFFFLL, 1> R1; + typedef std::ratio<0x7FFFFFFFFFFFFFFFLL, 1> R2; + static_assert((std::ratio_not_equal::value), ""); + } + { + typedef std::ratio<1, 0x7FFFFFFFFFFFFFFFLL> R1; + typedef std::ratio<1, -0x7FFFFFFFFFFFFFFFLL> R2; + static_assert((std::ratio_not_equal::value), ""); + } +} diff --git a/test/utilities/ratio/ratio.ratio/ratio.pass.cpp b/test/utilities/ratio/ratio.ratio/ratio.pass.cpp index c2c8166fb..36d7965ed 100644 --- a/test/utilities/ratio/ratio.ratio/ratio.pass.cpp +++ b/test/utilities/ratio/ratio.ratio/ratio.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio: The static data members num and den shall have thcommon // divisor of the absolute values of N and D: #include template void test() { static_assert((std::ratio::num == eN), ""); static_assert((std::ratio::den == eD), ""); } int main() { test<1, 1, 1, 1>(); test<1, 10, 1, 10>(); test<10, 10, 1, 1>(); test<10, 1, 10, 1>(); test<12, 4, 3, 1>(); test<12, -4, -3, 1>(); test<-12, 4, -3, 1>(); test<-12, -4, 3, 1>(); test<4, 12, 1, 3>(); test<4, -12, -1, 3>(); test<-4, 12, -1, 3>(); test<-4, -12, 1, 3>(); test<222, 333, 2, 3>(); test<222, -333, -2, 3>(); test<-222, 333, -2, 3>(); test<-222, -333, 2, 3>(); test<0x7FFFFFFFFFFFFFFFLL, 127, 72624976668147841LL, 1>(); test<-0x7FFFFFFFFFFFFFFFLL, 127, -72624976668147841LL, 1>(); test<0x7FFFFFFFFFFFFFFFLL, -127, -72624976668147841LL, 1>(); test<-0x7FFFFFFFFFFFFFFFLL, -127, 72624976668147841LL, 1>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio: The static data members num and den shall have thcommon +// divisor of the absolute values of N and D: + +#include + +template +void test() +{ + static_assert((std::ratio::num == eN), ""); + static_assert((std::ratio::den == eD), ""); +} + +int main() +{ + test<1, 1, 1, 1>(); + test<1, 10, 1, 10>(); + test<10, 10, 1, 1>(); + test<10, 1, 10, 1>(); + test<12, 4, 3, 1>(); + test<12, -4, -3, 1>(); + test<-12, 4, -3, 1>(); + test<-12, -4, 3, 1>(); + test<4, 12, 1, 3>(); + test<4, -12, -1, 3>(); + test<-4, 12, -1, 3>(); + test<-4, -12, 1, 3>(); + test<222, 333, 2, 3>(); + test<222, -333, -2, 3>(); + test<-222, 333, -2, 3>(); + test<-222, -333, 2, 3>(); + test<0x7FFFFFFFFFFFFFFFLL, 127, 72624976668147841LL, 1>(); + test<-0x7FFFFFFFFFFFFFFFLL, 127, -72624976668147841LL, 1>(); + test<0x7FFFFFFFFFFFFFFFLL, -127, -72624976668147841LL, 1>(); + test<-0x7FFFFFFFFFFFFFFFLL, -127, 72624976668147841LL, 1>(); +} diff --git a/test/utilities/ratio/ratio.ratio/ratio1.fail.cpp b/test/utilities/ratio/ratio.ratio/ratio1.fail.cpp index f3d12d2a0..4860ce9d7 100644 --- a/test/utilities/ratio/ratio.ratio/ratio1.fail.cpp +++ b/test/utilities/ratio/ratio.ratio/ratio1.fail.cpp @@ -1 +1,18 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio: The template argument D shall not be zero #include #include int main() { const std::intmax_t t1 = std::ratio<1, 0>::num; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio: The template argument D shall not be zero + +#include +#include + +int main() +{ + const std::intmax_t t1 = std::ratio<1, 0>::num; +} diff --git a/test/utilities/ratio/ratio.ratio/ratio2.fail.cpp b/test/utilities/ratio/ratio.ratio/ratio2.fail.cpp index e371ed9d0..e854aca4a 100644 --- a/test/utilities/ratio/ratio.ratio/ratio2.fail.cpp +++ b/test/utilities/ratio/ratio.ratio/ratio2.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio: the absolute values of the template arguments N and D // shall be representable by type intmax_t. #include #include int main() { const std::intmax_t t1 = std::ratio<0x8000000000000000ULL, 1>::num; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio: the absolute values of the template arguments N and D +// shall be representable by type intmax_t. + +#include +#include + +int main() +{ + const std::intmax_t t1 = std::ratio<0x8000000000000000ULL, 1>::num; +} diff --git a/test/utilities/ratio/ratio.ratio/ratio3.fail.cpp b/test/utilities/ratio/ratio.ratio/ratio3.fail.cpp index 36097d023..56616cf95 100644 --- a/test/utilities/ratio/ratio.ratio/ratio3.fail.cpp +++ b/test/utilities/ratio/ratio.ratio/ratio3.fail.cpp @@ -1 +1,19 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio: the absolute values of the template arguments N and D // shall be representable by type intmax_t. #include #include int main() { const std::intmax_t t1 = std::ratio<1, 0x8000000000000000ULL>::num; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio: the absolute values of the template arguments N and D +// shall be representable by type intmax_t. + +#include +#include + +int main() +{ + const std::intmax_t t1 = std::ratio<1, 0x8000000000000000ULL>::num; +} diff --git a/test/utilities/ratio/ratio.si/nothing_to_do.pass.cpp b/test/utilities/ratio/ratio.si/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/ratio/ratio.si/nothing_to_do.pass.cpp +++ b/test/utilities/ratio/ratio.si/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/ratio/typedefs.pass.cpp b/test/utilities/ratio/typedefs.pass.cpp index 83ef47ec2..adbe0afd9 100644 --- a/test/utilities/ratio/typedefs.pass.cpp +++ b/test/utilities/ratio/typedefs.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test ratio typedef's #include int main() { static_assert(std::atto::num == 1 && std::atto::den == 1000000000000000000ULL, ""); static_assert(std::femto::num == 1 && std::femto::den == 1000000000000000ULL, ""); static_assert(std::pico::num == 1 && std::pico::den == 1000000000000ULL, ""); static_assert(std::nano::num == 1 && std::nano::den == 1000000000ULL, ""); static_assert(std::micro::num == 1 && std::micro::den == 1000000ULL, ""); static_assert(std::milli::num == 1 && std::milli::den == 1000ULL, ""); static_assert(std::centi::num == 1 && std::centi::den == 100ULL, ""); static_assert(std::deci::num == 1 && std::deci::den == 10ULL, ""); static_assert(std::deca::num == 10ULL && std::deca::den == 1, ""); static_assert(std::hecto::num == 100ULL && std::hecto::den == 1, ""); static_assert(std::kilo::num == 1000ULL && std::kilo::den == 1, ""); static_assert(std::mega::num == 1000000ULL && std::mega::den == 1, ""); static_assert(std::giga::num == 1000000000ULL && std::giga::den == 1, ""); static_assert(std::tera::num == 1000000000000ULL && std::tera::den == 1, ""); static_assert(std::peta::num == 1000000000000000ULL && std::peta::den == 1, ""); static_assert(std::exa::num == 1000000000000000000ULL && std::exa::den == 1, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test ratio typedef's + +#include + +int main() +{ + static_assert(std::atto::num == 1 && std::atto::den == 1000000000000000000ULL, ""); + static_assert(std::femto::num == 1 && std::femto::den == 1000000000000000ULL, ""); + static_assert(std::pico::num == 1 && std::pico::den == 1000000000000ULL, ""); + static_assert(std::nano::num == 1 && std::nano::den == 1000000000ULL, ""); + static_assert(std::micro::num == 1 && std::micro::den == 1000000ULL, ""); + static_assert(std::milli::num == 1 && std::milli::den == 1000ULL, ""); + static_assert(std::centi::num == 1 && std::centi::den == 100ULL, ""); + static_assert(std::deci::num == 1 && std::deci::den == 10ULL, ""); + static_assert(std::deca::num == 10ULL && std::deca::den == 1, ""); + static_assert(std::hecto::num == 100ULL && std::hecto::den == 1, ""); + static_assert(std::kilo::num == 1000ULL && std::kilo::den == 1, ""); + static_assert(std::mega::num == 1000000ULL && std::mega::den == 1, ""); + static_assert(std::giga::num == 1000000000ULL && std::giga::den == 1, ""); + static_assert(std::tera::num == 1000000000000ULL && std::tera::den == 1, ""); + static_assert(std::peta::num == 1000000000000000ULL && std::peta::den == 1, ""); + static_assert(std::exa::num == 1000000000000000000ULL && std::exa::den == 1, ""); +} diff --git a/test/utilities/ratio/version.pass.cpp b/test/utilities/ratio/version.pass.cpp index 1d6b9e4c9..48d3133bf 100644 --- a/test/utilities/ratio/version.pass.cpp +++ b/test/utilities/ratio/version.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // #include #ifndef _LIBCPP_VERSION #error _LIBCPP_VERSION not defined #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/test/utilities/template.bitset/bitset.cons/char_ptr_ctor.pass.cpp b/test/utilities/template.bitset/bitset.cons/char_ptr_ctor.pass.cpp index e446fc007..c928bd056 100644 --- a/test/utilities/template.bitset/bitset.cons/char_ptr_ctor.pass.cpp +++ b/test/utilities/template.bitset/bitset.cons/char_ptr_ctor.pass.cpp @@ -1 +1,51 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset(const char *str); #include #include template void test_char_pointer_ctor() { { try { std::bitset v("xxx1010101010xxxx"); assert(false); } catch (std::invalid_argument&) { } } { const char str[] ="1010101010"; std::bitset v(str); std::size_t M = std::min(N, 10); for (std::size_t i = 0; i < M; ++i) assert(v[i] == (str[M - 1 - i] == '1')); for (std::size_t i = 10; i < N; ++i) assert(v[i] == false); } } int main() { test_char_pointer_ctor<0>(); test_char_pointer_ctor<1>(); test_char_pointer_ctor<31>(); test_char_pointer_ctor<32>(); test_char_pointer_ctor<33>(); test_char_pointer_ctor<63>(); test_char_pointer_ctor<64>(); test_char_pointer_ctor<65>(); test_char_pointer_ctor<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset(const char *str); + +#include +#include + +template +void test_char_pointer_ctor() +{ + { + try + { + std::bitset v("xxx1010101010xxxx"); + assert(false); + } + catch (std::invalid_argument&) + { + } + } + + { + const char str[] ="1010101010"; + std::bitset v(str); + std::size_t M = std::min(N, 10); + for (std::size_t i = 0; i < M; ++i) + assert(v[i] == (str[M - 1 - i] == '1')); + for (std::size_t i = 10; i < N; ++i) + assert(v[i] == false); + } +} + +int main() +{ + test_char_pointer_ctor<0>(); + test_char_pointer_ctor<1>(); + test_char_pointer_ctor<31>(); + test_char_pointer_ctor<32>(); + test_char_pointer_ctor<33>(); + test_char_pointer_ctor<63>(); + test_char_pointer_ctor<64>(); + test_char_pointer_ctor<65>(); + test_char_pointer_ctor<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.cons/default.pass.cpp b/test/utilities/template.bitset/bitset.cons/default.pass.cpp index e0abc516e..571e6f050 100644 --- a/test/utilities/template.bitset/bitset.cons/default.pass.cpp +++ b/test/utilities/template.bitset/bitset.cons/default.pass.cpp @@ -1 +1,37 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test default ctor #include #include template void test_default_ctor() { { std::bitset v1; assert(v1.size() == N); for (std::size_t i = 0; i < N; ++i) assert(v1[i] == false); } } int main() { test_default_ctor<0>(); test_default_ctor<1>(); test_default_ctor<31>(); test_default_ctor<32>(); test_default_ctor<33>(); test_default_ctor<63>(); test_default_ctor<64>(); test_default_ctor<65>(); test_default_ctor<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test default ctor + +#include +#include + +template +void test_default_ctor() +{ + { + std::bitset v1; + assert(v1.size() == N); + for (std::size_t i = 0; i < N; ++i) + assert(v1[i] == false); + } +} + +int main() +{ + test_default_ctor<0>(); + test_default_ctor<1>(); + test_default_ctor<31>(); + test_default_ctor<32>(); + test_default_ctor<33>(); + test_default_ctor<63>(); + test_default_ctor<64>(); + test_default_ctor<65>(); + test_default_ctor<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp b/test/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp index 800dfc6db..acf719c80 100644 --- a/test/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp +++ b/test/utilities/template.bitset/bitset.cons/string_ctor.pass.cpp @@ -1 +1,86 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset(string, pos, n, zero, one); #include #include template void test_string_ctor() { { try { std::string str("xxx1010101010xxxx"); std::bitset v(str, str.size()+1, 10); assert(false); } catch (std::out_of_range&) { } } { try { std::string str("xxx1010101010xxxx"); std::bitset v(str, 2, 10); assert(false); } catch (std::invalid_argument&) { } } { std::string str("xxx1010101010xxxx"); std::bitset v(str, 3, 10); std::size_t M = std::min(N, 10); for (std::size_t i = 0; i < M; ++i) assert(v[i] == (str[3 + M - 1 - i] == '1')); for (std::size_t i = 10; i < N; ++i) assert(v[i] == false); } { try { std::string str("xxxbababababaxxxx"); std::bitset v(str, 2, 10, 'a', 'b'); assert(false); } catch (std::invalid_argument&) { } } { std::string str("xxxbababababaxxxx"); std::bitset v(str, 3, 10, 'a', 'b'); std::size_t M = std::min(N, 10); for (std::size_t i = 0; i < M; ++i) assert(v[i] == (str[3 + M - 1 - i] == 'b')); for (std::size_t i = 10; i < N; ++i) assert(v[i] == false); } } int main() { test_string_ctor<0>(); test_string_ctor<1>(); test_string_ctor<31>(); test_string_ctor<32>(); test_string_ctor<33>(); test_string_ctor<63>(); test_string_ctor<64>(); test_string_ctor<65>(); test_string_ctor<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset(string, pos, n, zero, one); + +#include +#include + +template +void test_string_ctor() +{ + { + try + { + std::string str("xxx1010101010xxxx"); + std::bitset v(str, str.size()+1, 10); + assert(false); + } + catch (std::out_of_range&) + { + } + } + + { + try + { + std::string str("xxx1010101010xxxx"); + std::bitset v(str, 2, 10); + assert(false); + } + catch (std::invalid_argument&) + { + } + } + + { + std::string str("xxx1010101010xxxx"); + std::bitset v(str, 3, 10); + std::size_t M = std::min(N, 10); + for (std::size_t i = 0; i < M; ++i) + assert(v[i] == (str[3 + M - 1 - i] == '1')); + for (std::size_t i = 10; i < N; ++i) + assert(v[i] == false); + } + + { + try + { + std::string str("xxxbababababaxxxx"); + std::bitset v(str, 2, 10, 'a', 'b'); + assert(false); + } + catch (std::invalid_argument&) + { + } + } + + { + std::string str("xxxbababababaxxxx"); + std::bitset v(str, 3, 10, 'a', 'b'); + std::size_t M = std::min(N, 10); + for (std::size_t i = 0; i < M; ++i) + assert(v[i] == (str[3 + M - 1 - i] == 'b')); + for (std::size_t i = 10; i < N; ++i) + assert(v[i] == false); + } +} + +int main() +{ + test_string_ctor<0>(); + test_string_ctor<1>(); + test_string_ctor<31>(); + test_string_ctor<32>(); + test_string_ctor<33>(); + test_string_ctor<63>(); + test_string_ctor<64>(); + test_string_ctor<65>(); + test_string_ctor<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp b/test/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp index 6e20abd48..e5763e318 100644 --- a/test/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp +++ b/test/utilities/template.bitset/bitset.cons/ull_ctor.pass.cpp @@ -1 +1,40 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset(unsigned long long val); #include #include template void test_val_ctor() { { std::bitset v(0xAAAAAAAAAAAAAAAAULL); assert(v.size() == N); unsigned M = std::min(N, 64); for (std::size_t i = 0; i < M; ++i) assert(v[i] == (i & 1)); for (std::size_t i = M; i < N; ++i) assert(v[i] == false); } } int main() { test_val_ctor<0>(); test_val_ctor<1>(); test_val_ctor<31>(); test_val_ctor<32>(); test_val_ctor<33>(); test_val_ctor<63>(); test_val_ctor<64>(); test_val_ctor<65>(); test_val_ctor<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset(unsigned long long val); + +#include +#include + +template +void test_val_ctor() +{ + { + std::bitset v(0xAAAAAAAAAAAAAAAAULL); + assert(v.size() == N); + unsigned M = std::min(N, 64); + for (std::size_t i = 0; i < M; ++i) + assert(v[i] == (i & 1)); + for (std::size_t i = M; i < N; ++i) + assert(v[i] == false); + } +} + +int main() +{ + test_val_ctor<0>(); + test_val_ctor<1>(); + test_val_ctor<31>(); + test_val_ctor<32>(); + test_val_ctor<33>(); + test_val_ctor<63>(); + test_val_ctor<64>(); + test_val_ctor<65>(); + test_val_ctor<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/all.pass.cpp b/test/utilities/template.bitset/bitset.members/all.pass.cpp index fbe6447b0..04ad5cefb 100644 --- a/test/utilities/template.bitset/bitset.members/all.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/all.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bool all() const; #include #include template void test_all() { std::bitset v; v.reset(); assert(v.all() == (N == 0)); v.set(); assert(v.all() == true); if (N > 1) { v[N/2] = false; assert(v.all() == false); } } int main() { test_all<0>(); test_all<1>(); test_all<31>(); test_all<32>(); test_all<33>(); test_all<63>(); test_all<64>(); test_all<65>(); test_all<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bool all() const; + +#include +#include + +template +void test_all() +{ + std::bitset v; + v.reset(); + assert(v.all() == (N == 0)); + v.set(); + assert(v.all() == true); + if (N > 1) + { + v[N/2] = false; + assert(v.all() == false); + } +} + +int main() +{ + test_all<0>(); + test_all<1>(); + test_all<31>(); + test_all<32>(); + test_all<33>(); + test_all<63>(); + test_all<64>(); + test_all<65>(); + test_all<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/any.pass.cpp b/test/utilities/template.bitset/bitset.members/any.pass.cpp index 40cd0067b..e685b3735 100644 --- a/test/utilities/template.bitset/bitset.members/any.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/any.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bool any() const; #include #include template void test_any() { std::bitset v; v.reset(); assert(v.any() == false); v.set(); assert(v.any() == (N != 0)); if (N > 1) { v[N/2] = false; assert(v.any() == true); v.reset(); v[N/2] = true; assert(v.any() == true); } } int main() { test_any<0>(); test_any<1>(); test_any<31>(); test_any<32>(); test_any<33>(); test_any<63>(); test_any<64>(); test_any<65>(); test_any<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bool any() const; + +#include +#include + +template +void test_any() +{ + std::bitset v; + v.reset(); + assert(v.any() == false); + v.set(); + assert(v.any() == (N != 0)); + if (N > 1) + { + v[N/2] = false; + assert(v.any() == true); + v.reset(); + v[N/2] = true; + assert(v.any() == true); + } +} + +int main() +{ + test_any<0>(); + test_any<1>(); + test_any<31>(); + test_any<32>(); + test_any<33>(); + test_any<63>(); + test_any<64>(); + test_any<65>(); + test_any<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/count.pass.cpp b/test/utilities/template.bitset/bitset.members/count.pass.cpp index 8b5a72736..82222dfb4 100644 --- a/test/utilities/template.bitset/bitset.members/count.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/count.pass.cpp @@ -1 +1,49 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test size_t count() const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_count() { const std::bitset v = make_bitset(); std::size_t c1 = v.count(); std::size_t c2 = 0; for (std::size_t i = 0; i < N; ++i) if (v[i]) ++c2; assert(c1 == c2); } int main() { test_count<0>(); test_count<1>(); test_count<31>(); test_count<32>(); test_count<33>(); test_count<63>(); test_count<64>(); test_count<65>(); test_count<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test size_t count() const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_count() +{ + const std::bitset v = make_bitset(); + std::size_t c1 = v.count(); + std::size_t c2 = 0; + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + ++c2; + assert(c1 == c2); +} + +int main() +{ + test_count<0>(); + test_count<1>(); + test_count<31>(); + test_count<32>(); + test_count<33>(); + test_count<63>(); + test_count<64>(); + test_count<65>(); + test_count<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/flip_all.pass.cpp b/test/utilities/template.bitset/bitset.members/flip_all.pass.cpp index 790d0b22c..85b255d44 100644 --- a/test/utilities/template.bitset/bitset.members/flip_all.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/flip_all.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& flip(); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_flip_all() { std::bitset v1 = make_bitset(); std::bitset v2 = v1; v2.flip(); for (std::size_t i = 0; i < N; ++i) assert(v2[i] == ~v1[i]); } int main() { test_flip_all<0>(); test_flip_all<1>(); test_flip_all<31>(); test_flip_all<32>(); test_flip_all<33>(); test_flip_all<63>(); test_flip_all<64>(); test_flip_all<65>(); test_flip_all<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& flip(); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_flip_all() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + v2.flip(); + for (std::size_t i = 0; i < N; ++i) + assert(v2[i] == ~v1[i]); +} + +int main() +{ + test_flip_all<0>(); + test_flip_all<1>(); + test_flip_all<31>(); + test_flip_all<32>(); + test_flip_all<33>(); + test_flip_all<63>(); + test_flip_all<64>(); + test_flip_all<65>(); + test_flip_all<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/flip_one.pass.cpp b/test/utilities/template.bitset/bitset.members/flip_one.pass.cpp index 10e1b7dbe..1754ee867 100644 --- a/test/utilities/template.bitset/bitset.members/flip_one.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/flip_one.pass.cpp @@ -1 +1,58 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& flip(size_t pos); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_flip_one() { std::bitset v = make_bitset(); try { v.flip(50); bool b = v[50]; if (50 >= v.size()) assert(false); assert(v[50] == b); v.flip(50); assert(v[50] != b); v.flip(50); assert(v[50] == b); } catch (std::out_of_range&) { } } int main() { test_flip_one<0>(); test_flip_one<1>(); test_flip_one<31>(); test_flip_one<32>(); test_flip_one<33>(); test_flip_one<63>(); test_flip_one<64>(); test_flip_one<65>(); test_flip_one<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& flip(size_t pos); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_flip_one() +{ + std::bitset v = make_bitset(); + try + { + v.flip(50); + bool b = v[50]; + if (50 >= v.size()) + assert(false); + assert(v[50] == b); + v.flip(50); + assert(v[50] != b); + v.flip(50); + assert(v[50] == b); + } + catch (std::out_of_range&) + { + } +} + +int main() +{ + test_flip_one<0>(); + test_flip_one<1>(); + test_flip_one<31>(); + test_flip_one<32>(); + test_flip_one<33>(); + test_flip_one<63>(); + test_flip_one<64>(); + test_flip_one<65>(); + test_flip_one<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/index.pass.cpp b/test/utilities/template.bitset/bitset.members/index.pass.cpp index b18489037..c346a3fb0 100644 --- a/test/utilities/template.bitset/bitset.members/index.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/index.pass.cpp @@ -1 +1,65 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset::reference operator[](size_t pos); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_index_const() { std::bitset v1 = make_bitset(); if (N > 0) { assert(v1[N/2] == v1.test(N/2)); typename std::bitset::reference r = v1[N/2]; assert(r == v1.test(N/2)); typename std::bitset::reference r2 = v1[N/2]; r = r2; assert(r == v1.test(N/2)); r = false; assert(r == false); assert(v1.test(N/2) == false); r = true; assert(r == true); assert(v1.test(N/2) == true); bool b = ~r; assert(r == true); assert(v1.test(N/2) == true); assert(b == false); r.flip(); assert(r == false); assert(v1.test(N/2) == false); } } int main() { test_index_const<0>(); test_index_const<1>(); test_index_const<31>(); test_index_const<32>(); test_index_const<33>(); test_index_const<63>(); test_index_const<64>(); test_index_const<65>(); test_index_const<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset::reference operator[](size_t pos); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_index_const() +{ + std::bitset v1 = make_bitset(); + if (N > 0) + { + assert(v1[N/2] == v1.test(N/2)); + typename std::bitset::reference r = v1[N/2]; + assert(r == v1.test(N/2)); + typename std::bitset::reference r2 = v1[N/2]; + r = r2; + assert(r == v1.test(N/2)); + r = false; + assert(r == false); + assert(v1.test(N/2) == false); + r = true; + assert(r == true); + assert(v1.test(N/2) == true); + bool b = ~r; + assert(r == true); + assert(v1.test(N/2) == true); + assert(b == false); + r.flip(); + assert(r == false); + assert(v1.test(N/2) == false); + } +} + +int main() +{ + test_index_const<0>(); + test_index_const<1>(); + test_index_const<31>(); + test_index_const<32>(); + test_index_const<33>(); + test_index_const<63>(); + test_index_const<64>(); + test_index_const<65>(); + test_index_const<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/index_const.pass.cpp b/test/utilities/template.bitset/bitset.members/index_const.pass.cpp index 60973a275..3d4d1e822 100644 --- a/test/utilities/template.bitset/bitset.members/index_const.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/index_const.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test constexpr bool operator[](size_t pos) const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_index_const() { const std::bitset v1 = make_bitset(); if (N > 0) { assert(v1[N/2] == v1.test(N/2)); } } int main() { test_index_const<0>(); test_index_const<1>(); test_index_const<31>(); test_index_const<32>(); test_index_const<33>(); test_index_const<63>(); test_index_const<64>(); test_index_const<65>(); test_index_const<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test constexpr bool operator[](size_t pos) const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_index_const() +{ + const std::bitset v1 = make_bitset(); + if (N > 0) + { + assert(v1[N/2] == v1.test(N/2)); + } +} + +int main() +{ + test_index_const<0>(); + test_index_const<1>(); + test_index_const<31>(); + test_index_const<32>(); + test_index_const<33>(); + test_index_const<63>(); + test_index_const<64>(); + test_index_const<65>(); + test_index_const<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/left_shift.pass.cpp b/test/utilities/template.bitset/bitset.members/left_shift.pass.cpp index b1d373187..f19987c01 100644 --- a/test/utilities/template.bitset/bitset.members/left_shift.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/left_shift.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator<<(size_t pos) const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_left_shift() { for (std::size_t s = 0; s <= N+1; ++s) { std::bitset v1 = make_bitset(); std::bitset v2 = v1; assert((v1 <<= s) == (v2 << s)); } } int main() { test_left_shift<0>(); test_left_shift<1>(); test_left_shift<31>(); test_left_shift<32>(); test_left_shift<33>(); test_left_shift<63>(); test_left_shift<64>(); test_left_shift<65>(); test_left_shift<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator<<(size_t pos) const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_left_shift() +{ + for (std::size_t s = 0; s <= N+1; ++s) + { + std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + assert((v1 <<= s) == (v2 << s)); + } +} + +int main() +{ + test_left_shift<0>(); + test_left_shift<1>(); + test_left_shift<31>(); + test_left_shift<32>(); + test_left_shift<33>(); + test_left_shift<63>(); + test_left_shift<64>(); + test_left_shift<65>(); + test_left_shift<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/left_shift_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/left_shift_eq.pass.cpp index 8ea0981c5..340921db5 100644 --- a/test/utilities/template.bitset/bitset.members/left_shift_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/left_shift_eq.pass.cpp @@ -1 +1,53 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& operator<<=(size_t pos); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_left_shift() { for (std::size_t s = 0; s <= N+1; ++s) { std::bitset v1 = make_bitset(); std::bitset v2 = v1; v1 <<= s; for (std::size_t i = 0; i < N; ++i) if (i < s) assert(v1[i] == 0); else assert(v1[i] == v2[i-s]); } } int main() { test_left_shift<0>(); test_left_shift<1>(); test_left_shift<31>(); test_left_shift<32>(); test_left_shift<33>(); test_left_shift<63>(); test_left_shift<64>(); test_left_shift<65>(); test_left_shift<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& operator<<=(size_t pos); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_left_shift() +{ + for (std::size_t s = 0; s <= N+1; ++s) + { + std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + v1 <<= s; + for (std::size_t i = 0; i < N; ++i) + if (i < s) + assert(v1[i] == 0); + else + assert(v1[i] == v2[i-s]); + } +} + +int main() +{ + test_left_shift<0>(); + test_left_shift<1>(); + test_left_shift<31>(); + test_left_shift<32>(); + test_left_shift<33>(); + test_left_shift<63>(); + test_left_shift<64>(); + test_left_shift<65>(); + test_left_shift<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/none.pass.cpp b/test/utilities/template.bitset/bitset.members/none.pass.cpp index abba3fd54..5270a5a33 100644 --- a/test/utilities/template.bitset/bitset.members/none.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/none.pass.cpp @@ -1 +1,44 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bool none() const; #include #include template void test_none() { std::bitset v; v.reset(); assert(v.none() == true); v.set(); assert(v.none() == (N == 0)); if (N > 1) { v[N/2] = false; assert(v.none() == false); v.reset(); v[N/2] = true; assert(v.none() == false); } } int main() { test_none<0>(); test_none<1>(); test_none<31>(); test_none<32>(); test_none<33>(); test_none<63>(); test_none<64>(); test_none<65>(); test_none<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bool none() const; + +#include +#include + +template +void test_none() +{ + std::bitset v; + v.reset(); + assert(v.none() == true); + v.set(); + assert(v.none() == (N == 0)); + if (N > 1) + { + v[N/2] = false; + assert(v.none() == false); + v.reset(); + v[N/2] = true; + assert(v.none() == false); + } +} + +int main() +{ + test_none<0>(); + test_none<1>(); + test_none<31>(); + test_none<32>(); + test_none<33>(); + test_none<63>(); + test_none<64>(); + test_none<65>(); + test_none<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/not_all.pass.cpp b/test/utilities/template.bitset/bitset.members/not_all.pass.cpp index edaeac673..7b30564f1 100644 --- a/test/utilities/template.bitset/bitset.members/not_all.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/not_all.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator~() const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_not_all() { std::bitset v1 = make_bitset(); std::bitset v2 = ~v1; for (std::size_t i = 0; i < N; ++i) assert(v2[i] == ~v1[i]); } int main() { test_not_all<0>(); test_not_all<1>(); test_not_all<31>(); test_not_all<32>(); test_not_all<33>(); test_not_all<63>(); test_not_all<64>(); test_not_all<65>(); test_not_all<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator~() const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_not_all() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = ~v1; + for (std::size_t i = 0; i < N; ++i) + assert(v2[i] == ~v1[i]); +} + +int main() +{ + test_not_all<0>(); + test_not_all<1>(); + test_not_all<31>(); + test_not_all<32>(); + test_not_all<33>(); + test_not_all<63>(); + test_not_all<64>(); + test_not_all<65>(); + test_not_all<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/op_and_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/op_and_eq.pass.cpp index 420443ea3..d1c878dd7 100644 --- a/test/utilities/template.bitset/bitset.members/op_and_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/op_and_eq.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& operator&=(const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_and_eq() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; v1 &= v2; for (std::size_t i = 0; i < N; ++i) assert(v1[i] == (v3[i] && v2[i])); } int main() { test_op_and_eq<0>(); test_op_and_eq<1>(); test_op_and_eq<31>(); test_op_and_eq<32>(); test_op_and_eq<33>(); test_op_and_eq<63>(); test_op_and_eq<64>(); test_op_and_eq<65>(); test_op_and_eq<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& operator&=(const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_and_eq() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + v1 &= v2; + for (std::size_t i = 0; i < N; ++i) + assert(v1[i] == (v3[i] && v2[i])); +} + +int main() +{ + test_op_and_eq<0>(); + test_op_and_eq<1>(); + test_op_and_eq<31>(); + test_op_and_eq<32>(); + test_op_and_eq<33>(); + test_op_and_eq<63>(); + test_op_and_eq<64>(); + test_op_and_eq<65>(); + test_op_and_eq<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/op_eq_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/op_eq_eq.pass.cpp index beac3d31c..4d37de6b9 100644 --- a/test/utilities/template.bitset/bitset.members/op_eq_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/op_eq_eq.pass.cpp @@ -1 +1,53 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test: // bool operator==(const bitset& rhs) const; // bool operator!=(const bitset& rhs) const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_equality() { const std::bitset v1 = make_bitset(); std::bitset v2 = v1; assert(v1 == v2); if (N > 0) { v2[N/2].flip(); assert(v1 != v2); } } int main() { test_equality<0>(); test_equality<1>(); test_equality<31>(); test_equality<32>(); test_equality<33>(); test_equality<63>(); test_equality<64>(); test_equality<65>(); test_equality<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test: + +// bool operator==(const bitset& rhs) const; +// bool operator!=(const bitset& rhs) const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_equality() +{ + const std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + assert(v1 == v2); + if (N > 0) + { + v2[N/2].flip(); + assert(v1 != v2); + } +} + +int main() +{ + test_equality<0>(); + test_equality<1>(); + test_equality<31>(); + test_equality<32>(); + test_equality<33>(); + test_equality<63>(); + test_equality<64>(); + test_equality<65>(); + test_equality<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/op_or_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/op_or_eq.pass.cpp index 6de4b0376..041e2dd7e 100644 --- a/test/utilities/template.bitset/bitset.members/op_or_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/op_or_eq.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& operator|=(const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_or_eq() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; v1 |= v2; for (std::size_t i = 0; i < N; ++i) assert(v1[i] == (v3[i] || v2[i])); } int main() { test_op_or_eq<0>(); test_op_or_eq<1>(); test_op_or_eq<31>(); test_op_or_eq<32>(); test_op_or_eq<33>(); test_op_or_eq<63>(); test_op_or_eq<64>(); test_op_or_eq<65>(); test_op_or_eq<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& operator|=(const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_or_eq() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + v1 |= v2; + for (std::size_t i = 0; i < N; ++i) + assert(v1[i] == (v3[i] || v2[i])); +} + +int main() +{ + test_op_or_eq<0>(); + test_op_or_eq<1>(); + test_op_or_eq<31>(); + test_op_or_eq<32>(); + test_op_or_eq<33>(); + test_op_or_eq<63>(); + test_op_or_eq<64>(); + test_op_or_eq<65>(); + test_op_or_eq<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/op_xor_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/op_xor_eq.pass.cpp index b02e5cd5d..4ebc187a5 100644 --- a/test/utilities/template.bitset/bitset.members/op_xor_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/op_xor_eq.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& operator^=(const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_xor_eq() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; v1 ^= v2; for (std::size_t i = 0; i < N; ++i) assert(v1[i] == (v3[i] != v2[i])); } int main() { test_op_xor_eq<0>(); test_op_xor_eq<1>(); test_op_xor_eq<31>(); test_op_xor_eq<32>(); test_op_xor_eq<33>(); test_op_xor_eq<63>(); test_op_xor_eq<64>(); test_op_xor_eq<65>(); test_op_xor_eq<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& operator^=(const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_xor_eq() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + v1 ^= v2; + for (std::size_t i = 0; i < N; ++i) + assert(v1[i] == (v3[i] != v2[i])); +} + +int main() +{ + test_op_xor_eq<0>(); + test_op_xor_eq<1>(); + test_op_xor_eq<31>(); + test_op_xor_eq<32>(); + test_op_xor_eq<33>(); + test_op_xor_eq<63>(); + test_op_xor_eq<64>(); + test_op_xor_eq<65>(); + test_op_xor_eq<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/reset_all.pass.cpp b/test/utilities/template.bitset/bitset.members/reset_all.pass.cpp index 0d8695bd0..3d3d9a2fb 100644 --- a/test/utilities/template.bitset/bitset.members/reset_all.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/reset_all.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& reset(); #include #include template void test_reset_all() { std::bitset v; v.set(); v.reset(); for (std::size_t i = 0; i < N; ++i) assert(!v[i]); } int main() { test_reset_all<0>(); test_reset_all<1>(); test_reset_all<31>(); test_reset_all<32>(); test_reset_all<33>(); test_reset_all<63>(); test_reset_all<64>(); test_reset_all<65>(); test_reset_all<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& reset(); + +#include +#include + +template +void test_reset_all() +{ + std::bitset v; + v.set(); + v.reset(); + for (std::size_t i = 0; i < N; ++i) + assert(!v[i]); +} + +int main() +{ + test_reset_all<0>(); + test_reset_all<1>(); + test_reset_all<31>(); + test_reset_all<32>(); + test_reset_all<33>(); + test_reset_all<63>(); + test_reset_all<64>(); + test_reset_all<65>(); + test_reset_all<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/reset_one.pass.cpp b/test/utilities/template.bitset/bitset.members/reset_one.pass.cpp index 61c1410c0..b37d2fa3d 100644 --- a/test/utilities/template.bitset/bitset.members/reset_one.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/reset_one.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& reset(size_t pos); #include #include template void test_reset_one() { std::bitset v; try { v.set(); v.reset(50); if (50 >= v.size()) assert(false); for (unsigned i = 0; i < v.size(); ++i) if (i == 50) assert(!v[i]); else assert(v[i]); } catch (std::out_of_range&) { } } int main() { test_reset_one<0>(); test_reset_one<1>(); test_reset_one<31>(); test_reset_one<32>(); test_reset_one<33>(); test_reset_one<63>(); test_reset_one<64>(); test_reset_one<65>(); test_reset_one<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& reset(size_t pos); + +#include +#include + +template +void test_reset_one() +{ + std::bitset v; + try + { + v.set(); + v.reset(50); + if (50 >= v.size()) + assert(false); + for (unsigned i = 0; i < v.size(); ++i) + if (i == 50) + assert(!v[i]); + else + assert(v[i]); + } + catch (std::out_of_range&) + { + } +} + +int main() +{ + test_reset_one<0>(); + test_reset_one<1>(); + test_reset_one<31>(); + test_reset_one<32>(); + test_reset_one<33>(); + test_reset_one<63>(); + test_reset_one<64>(); + test_reset_one<65>(); + test_reset_one<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/right_shift.pass.cpp b/test/utilities/template.bitset/bitset.members/right_shift.pass.cpp index 4c48638ed..817adabe8 100644 --- a/test/utilities/template.bitset/bitset.members/right_shift.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/right_shift.pass.cpp @@ -1 +1,48 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator>>(size_t pos) const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_right_shift() { for (std::size_t s = 0; s <= N+1; ++s) { std::bitset v1 = make_bitset(); std::bitset v2 = v1; assert((v1 >>= s) == (v2 >> s)); } } int main() { test_right_shift<0>(); test_right_shift<1>(); test_right_shift<31>(); test_right_shift<32>(); test_right_shift<33>(); test_right_shift<63>(); test_right_shift<64>(); test_right_shift<65>(); test_right_shift<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator>>(size_t pos) const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_right_shift() +{ + for (std::size_t s = 0; s <= N+1; ++s) + { + std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + assert((v1 >>= s) == (v2 >> s)); + } +} + +int main() +{ + test_right_shift<0>(); + test_right_shift<1>(); + test_right_shift<31>(); + test_right_shift<32>(); + test_right_shift<33>(); + test_right_shift<63>(); + test_right_shift<64>(); + test_right_shift<65>(); + test_right_shift<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/right_shift_eq.pass.cpp b/test/utilities/template.bitset/bitset.members/right_shift_eq.pass.cpp index 71f334796..8171a7825 100644 --- a/test/utilities/template.bitset/bitset.members/right_shift_eq.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/right_shift_eq.pass.cpp @@ -1 +1,53 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& operator<<=(size_t pos); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_right_shift() { for (std::size_t s = 0; s <= N+1; ++s) { std::bitset v1 = make_bitset(); std::bitset v2 = v1; v1 >>= s; for (std::size_t i = 0; i < N; ++i) if (i + s < N) assert(v1[i] == v2[i + s]); else assert(v1[i] == 0); } } int main() { test_right_shift<0>(); test_right_shift<1>(); test_right_shift<31>(); test_right_shift<32>(); test_right_shift<33>(); test_right_shift<63>(); test_right_shift<64>(); test_right_shift<65>(); test_right_shift<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& operator<<=(size_t pos); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_right_shift() +{ + for (std::size_t s = 0; s <= N+1; ++s) + { + std::bitset v1 = make_bitset(); + std::bitset v2 = v1; + v1 >>= s; + for (std::size_t i = 0; i < N; ++i) + if (i + s < N) + assert(v1[i] == v2[i + s]); + else + assert(v1[i] == 0); + } +} + +int main() +{ + test_right_shift<0>(); + test_right_shift<1>(); + test_right_shift<31>(); + test_right_shift<32>(); + test_right_shift<33>(); + test_right_shift<63>(); + test_right_shift<64>(); + test_right_shift<65>(); + test_right_shift<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/set_all.pass.cpp b/test/utilities/template.bitset/bitset.members/set_all.pass.cpp index 289eae316..97e58b1f7 100644 --- a/test/utilities/template.bitset/bitset.members/set_all.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/set_all.pass.cpp @@ -1 +1,35 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& set(); #include #include template void test_set_all() { std::bitset v; v.set(); for (std::size_t i = 0; i < N; ++i) assert(v[i]); } int main() { test_set_all<0>(); test_set_all<1>(); test_set_all<31>(); test_set_all<32>(); test_set_all<33>(); test_set_all<63>(); test_set_all<64>(); test_set_all<65>(); test_set_all<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& set(); + +#include +#include + +template +void test_set_all() +{ + std::bitset v; + v.set(); + for (std::size_t i = 0; i < N; ++i) + assert(v[i]); +} + +int main() +{ + test_set_all<0>(); + test_set_all<1>(); + test_set_all<31>(); + test_set_all<32>(); + test_set_all<33>(); + test_set_all<63>(); + test_set_all<64>(); + test_set_all<65>(); + test_set_all<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/set_one.pass.cpp b/test/utilities/template.bitset/bitset.members/set_one.pass.cpp index 899b2f4cf..869a5ca6a 100644 --- a/test/utilities/template.bitset/bitset.members/set_one.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/set_one.pass.cpp @@ -1 +1,52 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset& set(size_t pos, bool val = true); #include #include template void test_set_one() { std::bitset v; try { v.set(50); if (50 >= v.size()) assert(false); assert(v[50]); } catch (std::out_of_range&) { } try { v.set(50, false); if (50 >= v.size()) assert(false); assert(!v[50]); } catch (std::out_of_range&) { } } int main() { test_set_one<0>(); test_set_one<1>(); test_set_one<31>(); test_set_one<32>(); test_set_one<33>(); test_set_one<63>(); test_set_one<64>(); test_set_one<65>(); test_set_one<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset& set(size_t pos, bool val = true); + +#include +#include + +template +void test_set_one() +{ + std::bitset v; + try + { + v.set(50); + if (50 >= v.size()) + assert(false); + assert(v[50]); + } + catch (std::out_of_range&) + { + } + try + { + v.set(50, false); + if (50 >= v.size()) + assert(false); + assert(!v[50]); + } + catch (std::out_of_range&) + { + } +} + +int main() +{ + test_set_one<0>(); + test_set_one<1>(); + test_set_one<31>(); + test_set_one<32>(); + test_set_one<33>(); + test_set_one<63>(); + test_set_one<64>(); + test_set_one<65>(); + test_set_one<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/size.pass.cpp b/test/utilities/template.bitset/bitset.members/size.pass.cpp index 9109d2a2c..641f9d672 100644 --- a/test/utilities/template.bitset/bitset.members/size.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/size.pass.cpp @@ -1 +1,33 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test size_t count() const; #include #include template void test_size() { const std::bitset v; assert(v.size() == N); } int main() { test_size<0>(); test_size<1>(); test_size<31>(); test_size<32>(); test_size<33>(); test_size<63>(); test_size<64>(); test_size<65>(); test_size<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test size_t count() const; + +#include +#include + +template +void test_size() +{ + const std::bitset v; + assert(v.size() == N); +} + +int main() +{ + test_size<0>(); + test_size<1>(); + test_size<31>(); + test_size<32>(); + test_size<33>(); + test_size<63>(); + test_size<64>(); + test_size<65>(); + test_size<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/test.pass.cpp b/test/utilities/template.bitset/bitset.members/test.pass.cpp index 530cc1d9f..e2f0d39f0 100644 --- a/test/utilities/template.bitset/bitset.members/test.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/test.pass.cpp @@ -1 +1,53 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test constexpr bool test(size_t pos) const; #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_test() { const std::bitset v1 = make_bitset(); try { bool b = v1.test(50); if (50 >= v1.size()) assert(false); assert(b == v1[50]); } catch (std::out_of_range&) { } } int main() { test_test<0>(); test_test<1>(); test_test<31>(); test_test<32>(); test_test<33>(); test_test<63>(); test_test<64>(); test_test<65>(); test_test<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test constexpr bool test(size_t pos) const; + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_test() +{ + const std::bitset v1 = make_bitset(); + try + { + bool b = v1.test(50); + if (50 >= v1.size()) + assert(false); + assert(b == v1[50]); + } + catch (std::out_of_range&) + { + } +} + +int main() +{ + test_test<0>(); + test_test<1>(); + test_test<31>(); + test_test<32>(); + test_test<33>(); + test_test<63>(); + test_test<64>(); + test_test<65>(); + test_test<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/to_string.pass.cpp b/test/utilities/template.bitset/bitset.members/to_string.pass.cpp index a44877902..eebe8d1e2 100644 --- a/test/utilities/template.bitset/bitset.members/to_string.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/to_string.pass.cpp @@ -1 +1,160 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test: // template // basic_string // to_string(charT zero = charT('0'), charT one = charT('1')) const; // // template // basic_string > to_string() const; // // template // basic_string, allocator > to_string() const; // // basic_string, allocator > to_string() const; #include #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_to_string() { { std::bitset v = make_bitset(); { std::wstring s = v.template to_string, std::allocator >(); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::wstring s = v.template to_string >(); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.template to_string(); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.to_string(); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } } { std::bitset v = make_bitset(); { std::wstring s = v.template to_string, std::allocator >('0'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::wstring s = v.template to_string >('0'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.template to_string('0'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.to_string('0'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } } { std::bitset v = make_bitset(); { std::wstring s = v.template to_string, std::allocator >('0', '1'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::wstring s = v.template to_string >('0', '1'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.template to_string('0', '1'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } { std::string s = v.to_string('0', '1'); for (std::size_t i = 0; i < N; ++i) if (v[i]) assert(s[N - 1 - i] == '1'); else assert(s[N - 1 - i] == '0'); } } } int main() { test_to_string<0>(); test_to_string<1>(); test_to_string<31>(); test_to_string<32>(); test_to_string<33>(); test_to_string<63>(); test_to_string<64>(); test_to_string<65>(); test_to_string<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test: + +// template +// basic_string +// to_string(charT zero = charT('0'), charT one = charT('1')) const; +// +// template +// basic_string > to_string() const; +// +// template +// basic_string, allocator > to_string() const; +// +// basic_string, allocator > to_string() const; + +#include +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_to_string() +{ +{ + std::bitset v = make_bitset(); + { + std::wstring s = v.template to_string, std::allocator >(); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::wstring s = v.template to_string >(); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.template to_string(); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.to_string(); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } +} +{ + std::bitset v = make_bitset(); + { + std::wstring s = v.template to_string, std::allocator >('0'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::wstring s = v.template to_string >('0'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.template to_string('0'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.to_string('0'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } +} +{ + std::bitset v = make_bitset(); + { + std::wstring s = v.template to_string, std::allocator >('0', '1'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::wstring s = v.template to_string >('0', '1'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.template to_string('0', '1'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } + { + std::string s = v.to_string('0', '1'); + for (std::size_t i = 0; i < N; ++i) + if (v[i]) + assert(s[N - 1 - i] == '1'); + else + assert(s[N - 1 - i] == '0'); + } +} +} + +int main() +{ + test_to_string<0>(); + test_to_string<1>(); + test_to_string<31>(); + test_to_string<32>(); + test_to_string<33>(); + test_to_string<63>(); + test_to_string<64>(); + test_to_string<65>(); + test_to_string<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/to_ullong.pass.cpp b/test/utilities/template.bitset/bitset.members/to_ullong.pass.cpp index 0fbf212e8..4b9b5cbda 100644 --- a/test/utilities/template.bitset/bitset.members/to_ullong.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/to_ullong.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test unsigned long long to_ullong() const; #include #include #include #include template void test_to_ullong() { const std::size_t M = sizeof(unsigned long long) * CHAR_BIT < N ? sizeof(unsigned long long) * CHAR_BIT : N; const std::size_t X = M == 0 ? sizeof(unsigned long long) * CHAR_BIT - 1 : sizeof(unsigned long long) * CHAR_BIT - M; const unsigned long long max = M == 0 ? 0 : (unsigned long long)(-1) >> X; unsigned long long tests[] = {0, std::min(1, max), std::min(2, max), std::min(3, max), std::min(max, max-3), std::min(max, max-2), std::min(max, max-1), max}; for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) { unsigned long long j = tests[i]; std::bitset v(j); assert(j == v.to_ullong()); } } int main() { test_to_ullong<0>(); test_to_ullong<1>(); test_to_ullong<31>(); test_to_ullong<32>(); test_to_ullong<33>(); test_to_ullong<63>(); test_to_ullong<64>(); test_to_ullong<65>(); test_to_ullong<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test unsigned long long to_ullong() const; + +#include +#include +#include +#include + +template +void test_to_ullong() +{ + const std::size_t M = sizeof(unsigned long long) * CHAR_BIT < N ? sizeof(unsigned long long) * CHAR_BIT : N; + const std::size_t X = M == 0 ? sizeof(unsigned long long) * CHAR_BIT - 1 : sizeof(unsigned long long) * CHAR_BIT - M; + const unsigned long long max = M == 0 ? 0 : (unsigned long long)(-1) >> X; + unsigned long long tests[] = {0, + std::min(1, max), + std::min(2, max), + std::min(3, max), + std::min(max, max-3), + std::min(max, max-2), + std::min(max, max-1), + max}; + for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) + { + unsigned long long j = tests[i]; + std::bitset v(j); + assert(j == v.to_ullong()); + } +} + +int main() +{ + test_to_ullong<0>(); + test_to_ullong<1>(); + test_to_ullong<31>(); + test_to_ullong<32>(); + test_to_ullong<33>(); + test_to_ullong<63>(); + test_to_ullong<64>(); + test_to_ullong<65>(); + test_to_ullong<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.members/to_ulong.pass.cpp b/test/utilities/template.bitset/bitset.members/to_ulong.pass.cpp index da5f16336..050b3f798 100644 --- a/test/utilities/template.bitset/bitset.members/to_ulong.pass.cpp +++ b/test/utilities/template.bitset/bitset.members/to_ulong.pass.cpp @@ -1 +1,50 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test unsigned long to_ulong() const; #include #include #include #include template void test_to_ulong() { const std::size_t M = sizeof(unsigned long) * CHAR_BIT < N ? sizeof(unsigned long) * CHAR_BIT : N; const std::size_t X = M == 0 ? sizeof(unsigned long) * CHAR_BIT - 1 : sizeof(unsigned long) * CHAR_BIT - M; const std::size_t max = M == 0 ? 0 : std::size_t(-1) >> X; std::size_t tests[] = {0, std::min(1, max), std::min(2, max), std::min(3, max), std::min(max, max-3), std::min(max, max-2), std::min(max, max-1), max}; for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) { std::size_t j = tests[i]; std::bitset v(j); assert(j == v.to_ulong()); } } int main() { test_to_ulong<0>(); test_to_ulong<1>(); test_to_ulong<31>(); test_to_ulong<32>(); test_to_ulong<33>(); test_to_ulong<63>(); test_to_ulong<64>(); test_to_ulong<65>(); test_to_ulong<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test unsigned long to_ulong() const; + +#include +#include +#include +#include + +template +void test_to_ulong() +{ + const std::size_t M = sizeof(unsigned long) * CHAR_BIT < N ? sizeof(unsigned long) * CHAR_BIT : N; + const std::size_t X = M == 0 ? sizeof(unsigned long) * CHAR_BIT - 1 : sizeof(unsigned long) * CHAR_BIT - M; + const std::size_t max = M == 0 ? 0 : std::size_t(-1) >> X; + std::size_t tests[] = {0, + std::min(1, max), + std::min(2, max), + std::min(3, max), + std::min(max, max-3), + std::min(max, max-2), + std::min(max, max-1), + max}; + for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) + { + std::size_t j = tests[i]; + std::bitset v(j); + assert(j == v.to_ulong()); + } +} + +int main() +{ + test_to_ulong<0>(); + test_to_ulong<1>(); + test_to_ulong<31>(); + test_to_ulong<32>(); + test_to_ulong<33>(); + test_to_ulong<63>(); + test_to_ulong<64>(); + test_to_ulong<65>(); + test_to_ulong<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.operators/op_and.pass.cpp b/test/utilities/template.bitset/bitset.operators/op_and.pass.cpp index a27b55bdb..437f8c47e 100644 --- a/test/utilities/template.bitset/bitset.operators/op_and.pass.cpp +++ b/test/utilities/template.bitset/bitset.operators/op_and.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator&(const bitset& lhs, const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_and() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; assert((v1 & v2) == (v3 &= v2));; } int main() { test_op_and<0>(); test_op_and<1>(); test_op_and<31>(); test_op_and<32>(); test_op_and<33>(); test_op_and<63>(); test_op_and<64>(); test_op_and<65>(); test_op_and<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator&(const bitset& lhs, const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_and() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + assert((v1 & v2) == (v3 &= v2));; +} + +int main() +{ + test_op_and<0>(); + test_op_and<1>(); + test_op_and<31>(); + test_op_and<32>(); + test_op_and<33>(); + test_op_and<63>(); + test_op_and<64>(); + test_op_and<65>(); + test_op_and<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.operators/op_not.pass.cpp b/test/utilities/template.bitset/bitset.operators/op_not.pass.cpp index e4b20fd9a..5d4196ed4 100644 --- a/test/utilities/template.bitset/bitset.operators/op_not.pass.cpp +++ b/test/utilities/template.bitset/bitset.operators/op_not.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator^(const bitset& lhs, const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_not() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; assert((v1 ^ v2) == (v3 ^= v2));; } int main() { test_op_not<0>(); test_op_not<1>(); test_op_not<31>(); test_op_not<32>(); test_op_not<33>(); test_op_not<63>(); test_op_not<64>(); test_op_not<65>(); test_op_not<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator^(const bitset& lhs, const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_not() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + assert((v1 ^ v2) == (v3 ^= v2));; +} + +int main() +{ + test_op_not<0>(); + test_op_not<1>(); + test_op_not<31>(); + test_op_not<32>(); + test_op_not<33>(); + test_op_not<63>(); + test_op_not<64>(); + test_op_not<65>(); + test_op_not<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.operators/op_or.pass.cpp b/test/utilities/template.bitset/bitset.operators/op_or.pass.cpp index 573ab8e6e..56667140a 100644 --- a/test/utilities/template.bitset/bitset.operators/op_or.pass.cpp +++ b/test/utilities/template.bitset/bitset.operators/op_or.pass.cpp @@ -1 +1,46 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test bitset operator|(const bitset& lhs, const bitset& rhs); #include #include #include template std::bitset make_bitset() { std::bitset v; for (std::size_t i = 0; i < N; ++i) v[i] = static_cast(std::rand() & 1); return v; } template void test_op_or() { std::bitset v1 = make_bitset(); std::bitset v2 = make_bitset(); std::bitset v3 = v1; assert((v1 | v2) == (v3 |= v2));; } int main() { test_op_or<0>(); test_op_or<1>(); test_op_or<31>(); test_op_or<32>(); test_op_or<33>(); test_op_or<63>(); test_op_or<64>(); test_op_or<65>(); test_op_or<1000>(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test bitset operator|(const bitset& lhs, const bitset& rhs); + +#include +#include +#include + +template +std::bitset +make_bitset() +{ + std::bitset v; + for (std::size_t i = 0; i < N; ++i) + v[i] = static_cast(std::rand() & 1); + return v; +} + +template +void test_op_or() +{ + std::bitset v1 = make_bitset(); + std::bitset v2 = make_bitset(); + std::bitset v3 = v1; + assert((v1 | v2) == (v3 |= v2));; +} + +int main() +{ + test_op_or<0>(); + test_op_or<1>(); + test_op_or<31>(); + test_op_or<32>(); + test_op_or<33>(); + test_op_or<63>(); + test_op_or<64>(); + test_op_or<65>(); + test_op_or<1000>(); +} diff --git a/test/utilities/template.bitset/bitset.operators/stream_in.pass.cpp b/test/utilities/template.bitset/bitset.operators/stream_in.pass.cpp index b18007e41..edd2fd855 100644 --- a/test/utilities/template.bitset/bitset.operators/stream_in.pass.cpp +++ b/test/utilities/template.bitset/bitset.operators/stream_in.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test: // template // basic_ostream& // operator<<(basic_ostream& os, const bitset& x); #include #include #include int main() { std::istringstream in("01011010"); std::bitset<8> b; in >> b; assert(b.to_ulong() == 0x5A); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test: + +// template +// basic_ostream& +// operator<<(basic_ostream& os, const bitset& x); + +#include +#include +#include + +int main() +{ + std::istringstream in("01011010"); + std::bitset<8> b; + in >> b; + assert(b.to_ulong() == 0x5A); +} diff --git a/test/utilities/template.bitset/bitset.operators/stream_out.pass.cpp b/test/utilities/template.bitset/bitset.operators/stream_out.pass.cpp index 41486d9b4..5ebf87f35 100644 --- a/test/utilities/template.bitset/bitset.operators/stream_out.pass.cpp +++ b/test/utilities/template.bitset/bitset.operators/stream_out.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test: // template // basic_istream& // operator>>(basic_istream& is, bitset& x); #include #include #include int main() { std::ostringstream os; std::bitset<8> b(0x5A); os << b; assert(os.str() == "01011010"); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test: + +// template +// basic_istream& +// operator>>(basic_istream& is, bitset& x); + +#include +#include +#include + +int main() +{ + std::ostringstream os; + std::bitset<8> b(0x5A); + os << b; + assert(os.str() == "01011010"); +} diff --git a/test/utilities/template.bitset/includes.pass.cpp b/test/utilities/template.bitset/includes.pass.cpp index 4812424b6..19baadca7 100644 --- a/test/utilities/template.bitset/includes.pass.cpp +++ b/test/utilities/template.bitset/includes.pass.cpp @@ -1 +1,32 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // test that includes , , and #include #ifndef _LIBCPP_CSTDDEF #error has not been included #endif #ifndef _LIBCPP_STRING #error has not been included #endif #ifndef _LIBCPP_STDEXCEPT #error has not been included #endif #ifndef _LIBCPP_IOSFWD #error has not been included #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// test that includes , , and + +#include + +#ifndef _LIBCPP_CSTDDEF +#error has not been included +#endif + +#ifndef _LIBCPP_STRING +#error has not been included +#endif + +#ifndef _LIBCPP_STDEXCEPT +#error has not been included +#endif + +#ifndef _LIBCPP_IOSFWD +#error has not been included +#endif + +int main() +{ +} diff --git a/test/utilities/template.bitset/version.pass.cpp b/test/utilities/template.bitset/version.pass.cpp index 37f3671f2..5b6511fd0 100644 --- a/test/utilities/template.bitset/version.pass.cpp +++ b/test/utilities/template.bitset/version.pass.cpp @@ -1 +1,20 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // #include #ifndef _LIBCPP_VERSION #error _LIBCPP_VERSION not defined #endif int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +#include + +#ifndef _LIBCPP_VERSION +#error _LIBCPP_VERSION not defined +#endif + +int main() +{ +} diff --git a/test/utilities/time/clock.h b/test/utilities/time/clock.h index d5f4c02cc..8490188ac 100644 --- a/test/utilities/time/clock.h +++ b/test/utilities/time/clock.h @@ -14,4 +14,4 @@ class Clock static time_point now(); }; -#endif +#endif // CLOCK_H diff --git a/test/utilities/time/hours.pass.cpp b/test/utilities/time/hours.pass.cpp index f76fdf007..387089f8f 100644 --- a/test/utilities/time/hours.pass.cpp +++ b/test/utilities/time/hours.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration> hours; #include #include #include int main() { typedef std::chrono::hours D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 22, ""); static_assert((std::is_same >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration> hours; + +#include +#include +#include + +int main() +{ + typedef std::chrono::hours D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 22, ""); + static_assert((std::is_same >::value), ""); +} diff --git a/test/utilities/time/microseconds.pass.cpp b/test/utilities/time/microseconds.pass.cpp index f04a2de5d..368d41273 100644 --- a/test/utilities/time/microseconds.pass.cpp +++ b/test/utilities/time/microseconds.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration microseconds; #include #include #include int main() { typedef std::chrono::microseconds D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 54, ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration microseconds; + +#include +#include +#include + +int main() +{ + typedef std::chrono::microseconds D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 54, ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/time/milliseconds.pass.cpp b/test/utilities/time/milliseconds.pass.cpp index 6002fa028..8c147d9f0 100644 --- a/test/utilities/time/milliseconds.pass.cpp +++ b/test/utilities/time/milliseconds.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration milliseconds; #include #include #include int main() { typedef std::chrono::milliseconds D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 44, ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration milliseconds; + +#include +#include +#include + +int main() +{ + typedef std::chrono::milliseconds D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 44, ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/time/minutes.pass.cpp b/test/utilities/time/minutes.pass.cpp index afa1b320b..965899476 100644 --- a/test/utilities/time/minutes.pass.cpp +++ b/test/utilities/time/minutes.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration> minutes; #include #include #include int main() { typedef std::chrono::minutes D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 28, ""); static_assert((std::is_same >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration> minutes; + +#include +#include +#include + +int main() +{ + typedef std::chrono::minutes D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 28, ""); + static_assert((std::is_same >::value), ""); +} diff --git a/test/utilities/time/nanoseconds.pass.cpp b/test/utilities/time/nanoseconds.pass.cpp index 929bd9a15..a5eb803f5 100644 --- a/test/utilities/time/nanoseconds.pass.cpp +++ b/test/utilities/time/nanoseconds.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration nanoseconds; #include #include #include int main() { typedef std::chrono::nanoseconds D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 63, ""); static_assert((std::is_same::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration nanoseconds; + +#include +#include +#include + +int main() +{ + typedef std::chrono::nanoseconds D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 63, ""); + static_assert((std::is_same::value), ""); +} diff --git a/test/utilities/time/rep.h b/test/utilities/time/rep.h index fa949fe2e..ea4db2d3f 100644 --- a/test/utilities/time/rep.h +++ b/test/utilities/time/rep.h @@ -15,4 +15,4 @@ public: Rep& operator/=(Rep x) {data_ /= x.data_; return *this;} }; -#endif +#endif // REP_H diff --git a/test/utilities/time/seconds.pass.cpp b/test/utilities/time/seconds.pass.cpp index 0022b56a7..d9948bc5b 100644 --- a/test/utilities/time/seconds.pass.cpp +++ b/test/utilities/time/seconds.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // typedef duration seconds; #include #include #include int main() { typedef std::chrono::seconds D; typedef D::rep Rep; typedef D::period Period; static_assert(std::is_signed::value, ""); static_assert(std::is_integral::value, ""); static_assert(std::numeric_limits::digits >= 34, ""); static_assert((std::is_same >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// typedef duration seconds; + +#include +#include +#include + +int main() +{ + typedef std::chrono::seconds D; + typedef D::rep Rep; + typedef D::period Period; + static_assert(std::is_signed::value, ""); + static_assert(std::is_integral::value, ""); + static_assert(std::numeric_limits::digits >= 34, ""); + static_assert((std::is_same >::value), ""); +} diff --git a/test/utilities/time/time.clock.req/nothing_to_do.pass.cpp b/test/utilities/time/time.clock.req/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/time/time.clock.req/nothing_to_do.pass.cpp +++ b/test/utilities/time/time.clock.req/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/time/time.clock/nothing_to_do.pass.cpp b/test/utilities/time/time.clock/nothing_to_do.pass.cpp index e8db90cbe..b89f168e9 100644 --- a/test/utilities/time/time.clock/nothing_to_do.pass.cpp +++ b/test/utilities/time/time.clock/nothing_to_do.pass.cpp @@ -1 +1,12 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// int main() { } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +int main() +{ +} diff --git a/test/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp b/test/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp index 5ad13d0b6..50923a9f3 100644 --- a/test/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.hires/consistency.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // high_resolution_clock // check clock invariants #include int main() { typedef std::chrono::high_resolution_clock C; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert(C::is_monotonic || !C::is_monotonic, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// high_resolution_clock + +// check clock invariants + +#include + +int main() +{ + typedef std::chrono::high_resolution_clock C; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert(C::is_monotonic || !C::is_monotonic, ""); +} diff --git a/test/utilities/time/time.clock/time.clock.hires/now.pass.cpp b/test/utilities/time/time.clock/time.clock.hires/now.pass.cpp index d98e07310..a0a917bc8 100644 --- a/test/utilities/time/time.clock/time.clock.hires/now.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.hires/now.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // high_resolution_clock // static time_point now(); #include int main() { typedef std::chrono::high_resolution_clock C; C::time_point t1 = C::now(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// high_resolution_clock + +// static time_point now(); + +#include + +int main() +{ + typedef std::chrono::high_resolution_clock C; + C::time_point t1 = C::now(); +} diff --git a/test/utilities/time/time.clock/time.clock.monotonic/consistency.pass.cpp b/test/utilities/time/time.clock/time.clock.monotonic/consistency.pass.cpp index 63690ff6b..ac661240e 100644 --- a/test/utilities/time/time.clock/time.clock.monotonic/consistency.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.monotonic/consistency.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // monotonic_clock // check clock invariants #include int main() { typedef std::chrono::monotonic_clock C; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert(C::is_monotonic, ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// monotonic_clock + +// check clock invariants + +#include + +int main() +{ + typedef std::chrono::monotonic_clock C; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert(C::is_monotonic, ""); +} diff --git a/test/utilities/time/time.clock/time.clock.monotonic/now.pass.cpp b/test/utilities/time/time.clock/time.clock.monotonic/now.pass.cpp index 994e93750..0cb141222 100644 --- a/test/utilities/time/time.clock/time.clock.monotonic/now.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.monotonic/now.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // monotonic_clock // static time_point now(); #include #include int main() { typedef std::chrono::monotonic_clock C; C::time_point t1 = C::now(); C::time_point t2 = C::now(); assert(t2 >= t1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// monotonic_clock + +// static time_point now(); + +#include +#include + +int main() +{ + typedef std::chrono::monotonic_clock C; + C::time_point t1 = C::now(); + C::time_point t2 = C::now(); + assert(t2 >= t1); +} diff --git a/test/utilities/time/time.clock/time.clock.system/consistency.pass.cpp b/test/utilities/time/time.clock/time.clock.system/consistency.pass.cpp index f1b43e626..915504a56 100644 --- a/test/utilities/time/time.clock/time.clock.system/consistency.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.system/consistency.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // system_clock // check clock invariants #include int main() { typedef std::chrono::system_clock C; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((C::is_monotonic || !C::is_monotonic), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// system_clock + +// check clock invariants + +#include + +int main() +{ + typedef std::chrono::system_clock C; + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((std::is_same::value), ""); + static_assert((C::is_monotonic || !C::is_monotonic), ""); +} diff --git a/test/utilities/time/time.clock/time.clock.system/from_time_t.pass.cpp b/test/utilities/time/time.clock/time.clock.system/from_time_t.pass.cpp index 9b44a1084..440444599 100644 --- a/test/utilities/time/time.clock/time.clock.system/from_time_t.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.system/from_time_t.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // system_clock // static time_point from_time_t(time_t t); #include #include int main() { typedef std::chrono::system_clock C; C::time_point t1 = C::from_time_t(C::to_time_t(C::now())); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// system_clock + +// static time_point from_time_t(time_t t); + +#include +#include + +int main() +{ + typedef std::chrono::system_clock C; + C::time_point t1 = C::from_time_t(C::to_time_t(C::now())); +} diff --git a/test/utilities/time/time.clock/time.clock.system/now.pass.cpp b/test/utilities/time/time.clock/time.clock.system/now.pass.cpp index a47395680..ef6cb055a 100644 --- a/test/utilities/time/time.clock/time.clock.system/now.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.system/now.pass.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // system_clock // static time_point now(); #include int main() { typedef std::chrono::system_clock C; C::time_point t1 = C::now(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// system_clock + +// static time_point now(); + +#include + +int main() +{ + typedef std::chrono::system_clock C; + C::time_point t1 = C::now(); +} diff --git a/test/utilities/time/time.clock/time.clock.system/rep_signed.pass.cpp b/test/utilities/time/time.clock/time.clock.system/rep_signed.pass.cpp index d9b574e53..f971c90af 100644 --- a/test/utilities/time/time.clock/time.clock.system/rep_signed.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.system/rep_signed.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // system_clock // rep should be signed #include #include int main() { assert(std::chrono::system_clock::duration::min() < std::chrono::system_clock::duration::zero()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// system_clock + +// rep should be signed + +#include +#include + +int main() +{ + assert(std::chrono::system_clock::duration::min() < + std::chrono::system_clock::duration::zero()); +} diff --git a/test/utilities/time/time.clock/time.clock.system/to_time_t.pass.cpp b/test/utilities/time/time.clock/time.clock.system/to_time_t.pass.cpp index f87bd84d7..c307cbe31 100644 --- a/test/utilities/time/time.clock/time.clock.system/to_time_t.pass.cpp +++ b/test/utilities/time/time.clock/time.clock.system/to_time_t.pass.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // system_clock // time_t to_time_t(const time_point& t); #include #include int main() { typedef std::chrono::system_clock C; std::time_t t1 = C::to_time_t(C::now()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// system_clock + +// time_t to_time_t(const time_point& t); + +#include +#include + +int main() +{ + typedef std::chrono::system_clock C; + std::time_t t1 = C::to_time_t(C::now()); +} diff --git a/test/utilities/time/time.duration/default_ratio.pass.cpp b/test/utilities/time/time.duration/default_ratio.pass.cpp index 2d3230496..2e20acfc4 100644 --- a/test/utilities/time/time.duration/default_ratio.pass.cpp +++ b/test/utilities/time/time.duration/default_ratio.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // Test default template arg: // template > // class duration; #include #include int main() { static_assert((std::is_same >, std::chrono::duration >::value), ""); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// Test default template arg: + +// template > +// class duration; + +#include +#include + +int main() +{ + static_assert((std::is_same >, + std::chrono::duration >::value), ""); +} diff --git a/test/utilities/time/time.duration/duration.fail.cpp b/test/utilities/time/time.duration/duration.fail.cpp index 11a157d3e..2a879cbf3 100644 --- a/test/utilities/time/time.duration/duration.fail.cpp +++ b/test/utilities/time/time.duration/duration.fail.cpp @@ -1 +1,23 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // If a program instantiates duration with a duration type for the template // argument Rep a diagnostic is required. #include int main() { typedef std::chrono::duration D; D d; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// If a program instantiates duration with a duration type for the template +// argument Rep a diagnostic is required. + +#include + +int main() +{ + typedef std::chrono::duration D; + D d; +} diff --git a/test/utilities/time/time.duration/positive_num.fail.cpp b/test/utilities/time/time.duration/positive_num.fail.cpp index afb51a5a1..430bf0ac7 100644 --- a/test/utilities/time/time.duration/positive_num.fail.cpp +++ b/test/utilities/time/time.duration/positive_num.fail.cpp @@ -1 +1,22 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // Period::num shall be positive, diagnostic required. #include int main() { typedef std::chrono::duration > D; D d; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// Period::num shall be positive, diagnostic required. + +#include + +int main() +{ + typedef std::chrono::duration > D; + D d; +} diff --git a/test/utilities/time/time.duration/ratio.fail.cpp b/test/utilities/time/time.duration/ratio.fail.cpp index e3e104ebf..44039e4c2 100644 --- a/test/utilities/time/time.duration/ratio.fail.cpp +++ b/test/utilities/time/time.duration/ratio.fail.cpp @@ -1 +1,30 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // Period shall be a specialization of ratio, diagnostic required. #include template class Ratio { public: static const int num = N; static const int den = D; }; int main() { typedef std::chrono::duration > D; D d; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// Period shall be a specialization of ratio, diagnostic required. + +#include + +template +class Ratio +{ +public: + static const int num = N; + static const int den = D; +}; + +int main() +{ + typedef std::chrono::duration > D; + D d; +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_++.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_++.pass.cpp index beaa5cb5f..41f24dc71 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_++.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_++.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator++(); #include #include int main() { std::chrono::hours h(3); std::chrono::hours& href = ++h; assert(&href == &h); assert(h.count() == 4); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator++(); + +#include +#include + +int main() +{ + std::chrono::hours h(3); + std::chrono::hours& href = ++h; + assert(&href == &h); + assert(h.count() == 4); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_++int.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_++int.pass.cpp index 129c0efd7..c596a7eab 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_++int.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_++int.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration operator++(int); #include #include int main() { std::chrono::hours h(3); std::chrono::hours h2 = h++; assert(h.count() == 4); assert(h2.count() == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration operator++(int); + +#include +#include + +int main() +{ + std::chrono::hours h(3); + std::chrono::hours h2 = h++; + assert(h.count() == 4); + assert(h2.count() == 3); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp index 667b1959f..27d11cabb 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration operator+() const; #include #include int main() { const std::chrono::minutes m(3); std::chrono::minutes m2 = +m; assert(m.count() == m2.count()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration operator+() const; + +#include +#include + +int main() +{ + const std::chrono::minutes m(3); + std::chrono::minutes m2 = +m; + assert(m.count() == m2.count()); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_+=.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_+=.pass.cpp index 244de3c8e..5038ab75d 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_+=.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_+=.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator+=(const duration& d); #include #include int main() { std::chrono::seconds s(3); s += std::chrono::seconds(2); assert(s.count() == 5); s += std::chrono::minutes(2); assert(s.count() == 125); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator+=(const duration& d); + +#include +#include + +int main() +{ + std::chrono::seconds s(3); + s += std::chrono::seconds(2); + assert(s.count() == 5); + s += std::chrono::minutes(2); + assert(s.count() == 125); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_--.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_--.pass.cpp index cb60a618c..9966f063c 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_--.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_--.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator--(); #include #include int main() { std::chrono::hours h(3); std::chrono::hours& href = --h; assert(&href == &h); assert(h.count() == 2); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator--(); + +#include +#include + +int main() +{ + std::chrono::hours h(3); + std::chrono::hours& href = --h; + assert(&href == &h); + assert(h.count() == 2); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_--int.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_--int.pass.cpp index 6b88ddfdc..bbed446d8 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_--int.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_--int.pass.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration operator--(int); #include #include int main() { std::chrono::hours h(3); std::chrono::hours h2 = h--; assert(h.count() == 2); assert(h2.count() == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration operator--(int); + +#include +#include + +int main() +{ + std::chrono::hours h(3); + std::chrono::hours h2 = h--; + assert(h.count() == 2); + assert(h2.count() == 3); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp index 8ea6e46e3..0148dc77e 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration operator-() const; #include #include int main() { const std::chrono::minutes m(3); std::chrono::minutes m2 = -m; assert(m2.count() == -m.count()); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration operator-() const; + +#include +#include + +int main() +{ + const std::chrono::minutes m(3); + std::chrono::minutes m2 = -m; + assert(m2.count() == -m.count()); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_-=.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_-=.pass.cpp index 87ce32c93..eab4d7007 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_-=.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_-=.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator-=(const duration& d); #include #include int main() { std::chrono::seconds s(3); s -= std::chrono::seconds(2); assert(s.count() == 1); s -= std::chrono::minutes(2); assert(s.count() == -119); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator-=(const duration& d); + +#include +#include + +int main() +{ + std::chrono::seconds s(3); + s -= std::chrono::seconds(2); + assert(s.count() == 1); + s -= std::chrono::minutes(2); + assert(s.count() == -119); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_divide=.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_divide=.pass.cpp index 3371c392d..0490ab4ef 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_divide=.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_divide=.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator/=(const rep& rhs); #include #include int main() { std::chrono::nanoseconds ns(15); ns /= 5; assert(ns.count() == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator/=(const rep& rhs); + +#include +#include + +int main() +{ + std::chrono::nanoseconds ns(15); + ns /= 5; + assert(ns.count() == 3); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=duration.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=duration.pass.cpp index 953e778a9..f1e0c8690 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=duration.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=duration.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator%=(const duration& rhs) #include #include int main() { std::chrono::microseconds us(11); std::chrono::microseconds us2(3); us %= us2; assert(us.count() == 2); us %= std::chrono::milliseconds(3); assert(us.count() == 2); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator%=(const duration& rhs) + +#include +#include + +int main() +{ + std::chrono::microseconds us(11); + std::chrono::microseconds us2(3); + us %= us2; + assert(us.count() == 2); + us %= std::chrono::milliseconds(3); + assert(us.count() == 2); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=rep.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=rep.pass.cpp index ab7d7ca82..5449aecd3 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=rep.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_mod=rep.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator%=(const rep& rhs) #include #include int main() { std::chrono::microseconds us(11); us %= 3; assert(us.count() == 2); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator%=(const rep& rhs) + +#include +#include + +int main() +{ + std::chrono::microseconds us(11); + us %= 3; + assert(us.count() == 2); +} diff --git a/test/utilities/time/time.duration/time.duration.arithmetic/op_times=.pass.cpp b/test/utilities/time/time.duration/time.duration.arithmetic/op_times=.pass.cpp index 869eb7fcb..e04887082 100644 --- a/test/utilities/time/time.duration/time.duration.arithmetic/op_times=.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.arithmetic/op_times=.pass.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration& operator*=(const rep& rhs); #include #include int main() { std::chrono::nanoseconds ns(3); ns *= 5; assert(ns.count() == 15); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration& operator*=(const rep& rhs); + +#include +#include + +int main() +{ + std::chrono::nanoseconds ns(3); + ns *= 5; + assert(ns.count() == 15); +} diff --git a/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp b/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp index acc41bb1a..7c5758f24 100644 --- a/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // ToDuration // duration_cast(const duration& d); #include #include #include template void test(const FromDuration& f, const ToDuration& d) { typedef decltype(std::chrono::duration_cast(f)) R; static_assert((std::is_same::value), ""); assert(std::chrono::duration_cast(f) == d); } int main() { test(std::chrono::milliseconds(7265000), std::chrono::hours(2)); test(std::chrono::milliseconds(7265000), std::chrono::minutes(121)); test(std::chrono::milliseconds(7265000), std::chrono::seconds(7265)); test(std::chrono::milliseconds(7265000), std::chrono::milliseconds(7265000)); test(std::chrono::milliseconds(7265000), std::chrono::microseconds(7265000000LL)); test(std::chrono::milliseconds(7265000), std::chrono::nanoseconds(7265000000000LL)); test(std::chrono::milliseconds(7265000), std::chrono::duration >(7265./3600)); test(std::chrono::duration >(9), std::chrono::duration >(10)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// ToDuration +// duration_cast(const duration& d); + +#include +#include +#include + +template +void +test(const FromDuration& f, const ToDuration& d) +{ + typedef decltype(std::chrono::duration_cast(f)) R; + static_assert((std::is_same::value), ""); + assert(std::chrono::duration_cast(f) == d); +} + +int main() +{ + test(std::chrono::milliseconds(7265000), std::chrono::hours(2)); + test(std::chrono::milliseconds(7265000), std::chrono::minutes(121)); + test(std::chrono::milliseconds(7265000), std::chrono::seconds(7265)); + test(std::chrono::milliseconds(7265000), std::chrono::milliseconds(7265000)); + test(std::chrono::milliseconds(7265000), std::chrono::microseconds(7265000000LL)); + test(std::chrono::milliseconds(7265000), std::chrono::nanoseconds(7265000000000LL)); + test(std::chrono::milliseconds(7265000), + std::chrono::duration >(7265./3600)); + test(std::chrono::duration >(9), + std::chrono::duration >(10)); +} diff --git a/test/utilities/time/time.duration/time.duration.cast/toduration.fail.cpp b/test/utilities/time/time.duration/time.duration.cast/toduration.fail.cpp index d90502cba..bbf7be5cb 100644 --- a/test/utilities/time/time.duration/time.duration.cast/toduration.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cast/toduration.fail.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // ToDuration // duration_cast(const duration& d); // ToDuration shall be an instantiation of duration. #include int main() { std::chrono::duration_cast(std::chrono::milliseconds(3)); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// ToDuration +// duration_cast(const duration& d); + +// ToDuration shall be an instantiation of duration. + +#include + +int main() +{ + std::chrono::duration_cast(std::chrono::milliseconds(3)); +} diff --git a/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp b/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp index 86d237049..c850e2b33 100644 --- a/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp @@ -1 +1,69 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // bool // operator==(const duration& lhs, const duration& rhs); // template // bool // operator!=(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::seconds s1(3); std::chrono::seconds s2(3); assert(s1 == s2); assert(!(s1 != s2)); } { std::chrono::seconds s1(3); std::chrono::seconds s2(4); assert(!(s1 == s2)); assert(s1 != s2); } { std::chrono::milliseconds s1(3); std::chrono::microseconds s2(3000); assert(s1 == s2); assert(!(s1 != s2)); } { std::chrono::milliseconds s1(3); std::chrono::microseconds s2(4000); assert(!(s1 == s2)); assert(s1 != s2); } { std::chrono::duration > s1(9); std::chrono::duration > s2(10); assert(s1 == s2); assert(!(s1 != s2)); } { std::chrono::duration > s1(10); std::chrono::duration > s2(9); assert(!(s1 == s2)); assert(s1 != s2); } { std::chrono::duration > s1(9); std::chrono::duration > s2(10); assert(s1 == s2); assert(!(s1 != s2)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// bool +// operator==(const duration& lhs, const duration& rhs); + +// template +// bool +// operator!=(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(3); + assert(s1 == s2); + assert(!(s1 != s2)); + } + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(4); + assert(!(s1 == s2)); + assert(s1 != s2); + } + { + std::chrono::milliseconds s1(3); + std::chrono::microseconds s2(3000); + assert(s1 == s2); + assert(!(s1 != s2)); + } + { + std::chrono::milliseconds s1(3); + std::chrono::microseconds s2(4000); + assert(!(s1 == s2)); + assert(s1 != s2); + } + { + std::chrono::duration > s1(9); + std::chrono::duration > s2(10); + assert(s1 == s2); + assert(!(s1 != s2)); + } + { + std::chrono::duration > s1(10); + std::chrono::duration > s2(9); + assert(!(s1 == s2)); + assert(s1 != s2); + } + { + std::chrono::duration > s1(9); + std::chrono::duration > s2(10); + assert(s1 == s2); + assert(!(s1 != s2)); + } +} diff --git a/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp b/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp index 5d447115d..cfb86338b 100644 --- a/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp @@ -1 +1,91 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // bool // operator< (const duration& lhs, const duration& rhs); // template // bool // operator> (const duration& lhs, const duration& rhs); // template // bool // operator<=(const duration& lhs, const duration& rhs); // template // bool // operator>=(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::seconds s1(3); std::chrono::seconds s2(3); assert(!(s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert( (s1 >= s2)); } { std::chrono::seconds s1(3); std::chrono::seconds s2(4); assert( (s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert(!(s1 >= s2)); } { std::chrono::milliseconds s1(3); std::chrono::microseconds s2(3000); assert(!(s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert( (s1 >= s2)); } { std::chrono::milliseconds s1(3); std::chrono::microseconds s2(4000); assert( (s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert(!(s1 >= s2)); } { std::chrono::duration > s1(9); std::chrono::duration > s2(10); assert(!(s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert( (s1 >= s2)); } { std::chrono::duration > s1(10); std::chrono::duration > s2(9); assert(!(s1 < s2)); assert( (s1 > s2)); assert(!(s1 <= s2)); assert( (s1 >= s2)); } { std::chrono::duration > s1(9); std::chrono::duration > s2(10); assert(!(s1 < s2)); assert(!(s1 > s2)); assert( (s1 <= s2)); assert( (s1 >= s2)); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// bool +// operator< (const duration& lhs, const duration& rhs); + +// template +// bool +// operator> (const duration& lhs, const duration& rhs); + +// template +// bool +// operator<=(const duration& lhs, const duration& rhs); + +// template +// bool +// operator>=(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(3); + assert(!(s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert( (s1 >= s2)); + } + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(4); + assert( (s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert(!(s1 >= s2)); + } + { + std::chrono::milliseconds s1(3); + std::chrono::microseconds s2(3000); + assert(!(s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert( (s1 >= s2)); + } + { + std::chrono::milliseconds s1(3); + std::chrono::microseconds s2(4000); + assert( (s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert(!(s1 >= s2)); + } + { + std::chrono::duration > s1(9); + std::chrono::duration > s2(10); + assert(!(s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert( (s1 >= s2)); + } + { + std::chrono::duration > s1(10); + std::chrono::duration > s2(9); + assert(!(s1 < s2)); + assert( (s1 > s2)); + assert(!(s1 <= s2)); + assert( (s1 >= s2)); + } + { + std::chrono::duration > s1(9); + std::chrono::duration > s2(10); + assert(!(s1 < s2)); + assert(!(s1 > s2)); + assert( (s1 <= s2)); + assert( (s1 >= s2)); + } +} diff --git a/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp index 356fd1bd8..9639ad2b9 100644 --- a/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration(const duration& d); // exact conversions allowed for integral reps #include #include int main() { std::chrono::milliseconds ms(1); std::chrono::microseconds us = ms; assert(us.count() == 1000); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration(const duration& d); + +// exact conversions allowed for integral reps + +#include +#include + +int main() +{ + std::chrono::milliseconds ms(1); + std::chrono::microseconds us = ms; + assert(us.count() == 1000); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/convert_float_to_int.fail.cpp b/test/utilities/time/time.duration/time.duration.cons/convert_float_to_int.fail.cpp index 5d53a39d5..056096a66 100644 --- a/test/utilities/time/time.duration/time.duration.cons/convert_float_to_int.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/convert_float_to_int.fail.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration(const duration& d); // conversions from floating point to integral durations disallowed #include int main() { std::chrono::duration d; std::chrono::duration i = d; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration(const duration& d); + +// conversions from floating point to integral durations disallowed + +#include + +int main() +{ + std::chrono::duration d; + std::chrono::duration i = d; +} diff --git a/test/utilities/time/time.duration/time.duration.cons/convert_inexact.fail.cpp b/test/utilities/time/time.duration/time.duration.cons/convert_inexact.fail.cpp index 1e87931a0..692da3877 100644 --- a/test/utilities/time/time.duration/time.duration.cons/convert_inexact.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/convert_inexact.fail.cpp @@ -1 +1,25 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration(const duration& d); // inexact conversions disallowed for integral reps #include int main() { std::chrono::microseconds us(1); std::chrono::milliseconds ms = us; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration(const duration& d); + +// inexact conversions disallowed for integral reps + +#include + +int main() +{ + std::chrono::microseconds us(1); + std::chrono::milliseconds ms = us; +} diff --git a/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp index 1359be9c0..39f281a02 100644 --- a/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration(const duration& d); // inexact conversions allowed for floating point reps #include #include int main() { std::chrono::duration us(1); std::chrono::duration ms = us; assert(ms.count() == 1./1000); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration(const duration& d); + +// inexact conversions allowed for floating point reps + +#include +#include + +int main() +{ + std::chrono::duration us(1); + std::chrono::duration ms = us; + assert(ms.count() == 1./1000); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp index 32328cac8..a69c3543c 100644 --- a/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp @@ -1 +1,27 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration(const duration& d); // conversions from integral to floating point durations allowed #include #include int main() { std::chrono::duration i(3); std::chrono::duration d = i; assert(d.count() == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration(const duration& d); + +// conversions from integral to floating point durations allowed + +#include +#include + +int main() +{ + std::chrono::duration i(3); + std::chrono::duration d = i; + assert(d.count() == 3); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp index 1d86be2ec..917c4cc74 100644 --- a/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/default.pass.cpp @@ -1 +1,34 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // duration() = default; // Rep must be default initialized, not initialized with 0 #include #include #include "../../rep.h" template void test() { D d; assert(d.count() == typename D::rep()); } int main() { test >(); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// duration() = default; + +// Rep must be default initialized, not initialized with 0 + +#include +#include + +#include "../../rep.h" + +template +void +test() +{ + D d; + assert(d.count() == typename D::rep()); +} + +int main() +{ + test >(); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp index 7538605d0..59bbd6e19 100644 --- a/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/rep.pass.cpp @@ -1 +1,36 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // explicit duration(const Rep2& r); #include #include #include "../../rep.h" template void test(R r) { D d(r); assert(d.count() == r); } int main() { test >(5); test > >(5); test > >(Rep(3)); test > >(5.5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// explicit duration(const Rep2& r); + +#include +#include + +#include "../../rep.h" + +template +void +test(R r) +{ + D d(r); + assert(d.count() == r); +} + +int main() +{ + test >(5); + test > >(5); + test > >(Rep(3)); + test > >(5.5); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/rep01.fail.cpp b/test/utilities/time/time.duration/time.duration.cons/rep01.fail.cpp index da9d886c2..b0d20e1e1 100644 --- a/test/utilities/time/time.duration/time.duration.cons/rep01.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/rep01.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // explicit duration(const Rep2& r); // test for explicit #include #include "../../rep.h" int main() { std::chrono::duration d = 1; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// explicit duration(const Rep2& r); + +// test for explicit + +#include + +#include "../../rep.h" + +int main() +{ + std::chrono::duration d = 1; +} diff --git a/test/utilities/time/time.duration/time.duration.cons/rep02.fail.cpp b/test/utilities/time/time.duration/time.duration.cons/rep02.fail.cpp index 17d532cba..72bd76788 100644 --- a/test/utilities/time/time.duration/time.duration.cons/rep02.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/rep02.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // explicit duration(const Rep2& r); // Rep2 shall be implicitly convertible to rep #include #include "../../rep.h" int main() { std::chrono::duration d(1); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// explicit duration(const Rep2& r); + +// Rep2 shall be implicitly convertible to rep + +#include + +#include "../../rep.h" + +int main() +{ + std::chrono::duration d(1); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp b/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp index 38844c781..c25f04a96 100644 --- a/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // explicit duration(const Rep2& r); // construct double with int #include #include int main() { std::chrono::duration d(5); assert(d.count() == 5); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// explicit duration(const Rep2& r); + +// construct double with int + +#include +#include + +int main() +{ + std::chrono::duration d(5); + assert(d.count() == 5); +} diff --git a/test/utilities/time/time.duration/time.duration.cons/rep03.fail.cpp b/test/utilities/time/time.duration/time.duration.cons/rep03.fail.cpp index fb6c83a1d..9fa9bdeb8 100644 --- a/test/utilities/time/time.duration/time.duration.cons/rep03.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.cons/rep03.fail.cpp @@ -1 +1,24 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // explicit duration(const Rep2& r); // treat_as_floating_point::value shall be false #include int main() { std::chrono::duration d(1.); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// explicit duration(const Rep2& r); + +// treat_as_floating_point::value shall be false + +#include + +int main() +{ + std::chrono::duration d(1.); +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp index 168e7a043..94605b2d4 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // typename common_type, duration>::type // operator+(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::seconds s1(3); std::chrono::seconds s2(5); std::chrono::seconds r = s1 + s2; assert(r.count() == 8); } { std::chrono::seconds s1(3); std::chrono::microseconds s2(5); std::chrono::microseconds r = s1 + s2; assert(r.count() == 3000005); } { std::chrono::duration > s1(3); std::chrono::duration > s2(5); std::chrono::duration > r = s1 + s2; assert(r.count() == 75); } { std::chrono::duration > s1(3); std::chrono::duration > s2(5); std::chrono::duration > r = s1 + s2; assert(r.count() == 75); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// typename common_type, duration>::type +// operator+(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(5); + std::chrono::seconds r = s1 + s2; + assert(r.count() == 8); + } + { + std::chrono::seconds s1(3); + std::chrono::microseconds s2(5); + std::chrono::microseconds r = s1 + s2; + assert(r.count() == 3000005); + } + { + std::chrono::duration > s1(3); + std::chrono::duration > s2(5); + std::chrono::duration > r = s1 + s2; + assert(r.count() == 75); + } + { + std::chrono::duration > s1(3); + std::chrono::duration > s2(5); + std::chrono::duration > r = s1 + s2; + assert(r.count() == 75); + } +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp index 918f62d5d..56329ee0c 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp @@ -1 +1,47 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // typename common_type, duration>::type // operator-(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::seconds s1(3); std::chrono::seconds s2(5); std::chrono::seconds r = s1 - s2; assert(r.count() == -2); } { std::chrono::seconds s1(3); std::chrono::microseconds s2(5); std::chrono::microseconds r = s1 - s2; assert(r.count() == 2999995); } { std::chrono::duration > s1(3); std::chrono::duration > s2(5); std::chrono::duration > r = s1 - s2; assert(r.count() == -15); } { std::chrono::duration > s1(3); std::chrono::duration > s2(5); std::chrono::duration > r = s1 - s2; assert(r.count() == -15); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// typename common_type, duration>::type +// operator-(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::seconds s1(3); + std::chrono::seconds s2(5); + std::chrono::seconds r = s1 - s2; + assert(r.count() == -2); + } + { + std::chrono::seconds s1(3); + std::chrono::microseconds s2(5); + std::chrono::microseconds r = s1 - s2; + assert(r.count() == 2999995); + } + { + std::chrono::duration > s1(3); + std::chrono::duration > s2(5); + std::chrono::duration > r = s1 - s2; + assert(r.count() == -15); + } + { + std::chrono::duration > s1(3); + std::chrono::duration > s2(5); + std::chrono::duration > r = s1 - s2; + assert(r.count() == -15); + } +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp index 4ad5961fc..af50271e6 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp @@ -1 +1,43 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // typename common_type::type // operator/(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::nanoseconds ns1(15); std::chrono::nanoseconds ns2(5); assert(ns1 / ns2 == 3); } { std::chrono::microseconds us1(15); std::chrono::nanoseconds ns2(5); assert(us1 / ns2 == 3000); } { std::chrono::duration > s1(30); std::chrono::duration > s2(5); assert(s1 / s2 == 6); } { std::chrono::duration > s1(30); std::chrono::duration > s2(5); assert(s1 / s2 == 20./3); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// typename common_type::type +// operator/(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::nanoseconds ns1(15); + std::chrono::nanoseconds ns2(5); + assert(ns1 / ns2 == 3); + } + { + std::chrono::microseconds us1(15); + std::chrono::nanoseconds ns2(5); + assert(us1 / ns2 == 3000); + } + { + std::chrono::duration > s1(30); + std::chrono::duration > s2(5); + assert(s1 / s2 == 6); + } + { + std::chrono::duration > s1(30); + std::chrono::duration > s2(5); + assert(s1 / s2 == 20./3); + } +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.fail.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.fail.cpp index 244061fb2..993365288 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration::type, Period> // operator/(const duration& d, const Rep2& s); #include #include "../../rep.h" int main() { std::chrono::duration d(Rep(15)); d = d / 5; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration::type, Period> +// operator/(const duration& d, const Rep2& s); + +#include + +#include "../../rep.h" + +int main() +{ + std::chrono::duration d(Rep(15)); + d = d / 5; +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp index 81848a84f..cdd105b8f 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration::type, Period> // operator/(const duration& d, const Rep2& s); #include #include int main() { std::chrono::nanoseconds ns(15); ns = ns / 5; assert(ns.count() == 3); } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration::type, Period> +// operator/(const duration& d, const Rep2& s); + +#include +#include + +int main() +{ + std::chrono::nanoseconds ns(15); + ns = ns / 5; + assert(ns.count() == 3); +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp index 2e664d986..1d61cb3e7 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp @@ -1 +1,41 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // typename common_type, duration>::type // operator%(const duration& lhs, const duration& rhs); #include #include int main() { { std::chrono::nanoseconds ns1(15); std::chrono::nanoseconds ns2(6); std::chrono::nanoseconds r = ns1 % ns2; assert(r.count() == 3); } { std::chrono::microseconds us1(15); std::chrono::nanoseconds ns2(28); std::chrono::nanoseconds r = us1 % ns2; assert(r.count() == 20); } { std::chrono::duration > s1(6); std::chrono::duration > s2(3); std::chrono::duration > r = s1 % s2; assert(r.count() == 24); } } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// typename common_type, duration>::type +// operator%(const duration& lhs, const duration& rhs); + +#include +#include + +int main() +{ + { + std::chrono::nanoseconds ns1(15); + std::chrono::nanoseconds ns2(6); + std::chrono::nanoseconds r = ns1 % ns2; + assert(r.count() == 3); + } + { + std::chrono::microseconds us1(15); + std::chrono::nanoseconds ns2(28); + std::chrono::nanoseconds r = us1 % ns2; + assert(r.count() == 20); + } + { + std::chrono::duration > s1(6); + std::chrono::duration > s2(3); + std::chrono::duration > r = s1 % s2; + assert(r.count() == 24); + } +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.fail.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.fail.cpp index 9e82fdfc1..349c6e8a9 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.fail.cpp @@ -1 +1,26 @@ -//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // duration // template // duration::type, Period> // operator%(const duration& d, const Rep2& s) #include #include "../../rep.h" int main() { std::chrono::duration d(Rep(15)); d = d % 5; } \ No newline at end of file +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// + +// duration + +// template +// duration::type, Period> +// operator%(const duration& d, const Rep2& s) + +#include + +#include "../../rep.h" + +int main() +{ + std::chrono::duration d(Rep(15)); + d = d % 5; +} diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp index c27ac5c79..7d83d9db6 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp @@ -11,12 +11,12 @@ // duration -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const duration& d, const Rep2& s); -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const Rep1& s, const duration& d); #include diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep1.fail.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep1.fail.cpp index d6cdcbe05..dde038083 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep1.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep1.fail.cpp @@ -11,12 +11,12 @@ // duration -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const duration& d, const Rep2& s); -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const Rep1& s, const duration& d); #include diff --git a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep2.fail.cpp b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep2.fail.cpp index 0b1a38ab0..9dfb7385d 100644 --- a/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep2.fail.cpp +++ b/test/utilities/time/time.duration/time.duration.nonmember/op_times_rep2.fail.cpp @@ -11,12 +11,12 @@ // duration -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const duration& d, const Rep2& s); -// template -// duration::type, Period> +// template +// duration::type, Period> // operator*(const Rep1& s, const duration& d); #include diff --git a/test/utilities/time/time.duration/types.pass.cpp b/test/utilities/time/time.duration/types.pass.cpp index 5b6aa81c4..8ed179d45 100644 --- a/test/utilities/time/time.duration/types.pass.cpp +++ b/test/utilities/time/time.duration/types.pass.cpp @@ -13,8 +13,8 @@ // Test nested types -// typedef Rep rep; -// typedef Period period; +// typedef Rep rep; +// typedef Period period; #include #include diff --git a/test/utilities/time/time.point/default_duration.pass.cpp b/test/utilities/time/time.point/default_duration.pass.cpp index fe220d3e2..9135f915a 100644 --- a/test/utilities/time/time.point/default_duration.pass.cpp +++ b/test/utilities/time/time.point/default_duration.pass.cpp @@ -13,7 +13,7 @@ // Test default template arg: -// template +// template // class time_point; #include diff --git a/test/utilities/time/time.point/time.point.cast/time_point_cast.pass.cpp b/test/utilities/time/time.point/time.point.cast/time_point_cast.pass.cpp index d12c692bb..cd8081115 100644 --- a/test/utilities/time/time.point/time.point.cast/time_point_cast.pass.cpp +++ b/test/utilities/time/time.point/time.point.cast/time_point_cast.pass.cpp @@ -11,7 +11,7 @@ // time_point -// template +// template // time_point // time_point_cast(const time_point& t); diff --git a/test/utilities/time/time.point/time.point.cast/toduration.fail.cpp b/test/utilities/time/time.point/time.point.cast/toduration.fail.cpp index 412cc07af..d611212c4 100644 --- a/test/utilities/time/time.point/time.point.cast/toduration.fail.cpp +++ b/test/utilities/time/time.point/time.point.cast/toduration.fail.cpp @@ -11,7 +11,7 @@ // time_point -// template +// template // time_point // time_point_cast(const time_point& t); diff --git a/test/utilities/time/time.point/time.point.comparisons/op_equal.fail.cpp b/test/utilities/time/time.point/time.point.comparisons/op_equal.fail.cpp index 7122a8ba2..e6f34c558 100644 --- a/test/utilities/time/time.point/time.point.comparisons/op_equal.fail.cpp +++ b/test/utilities/time/time.point/time.point.comparisons/op_equal.fail.cpp @@ -11,11 +11,11 @@ // time_point -// template +// template // bool // operator==(const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator!=(const time_point& lhs, const time_point& rhs); diff --git a/test/utilities/time/time.point/time.point.comparisons/op_equal.pass.cpp b/test/utilities/time/time.point/time.point.comparisons/op_equal.pass.cpp index 6d1a0dcc7..8e2045028 100644 --- a/test/utilities/time/time.point/time.point.comparisons/op_equal.pass.cpp +++ b/test/utilities/time/time.point/time.point.comparisons/op_equal.pass.cpp @@ -11,11 +11,11 @@ // time_point -// template +// template // bool // operator==(const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator!=(const time_point& lhs, const time_point& rhs); diff --git a/test/utilities/time/time.point/time.point.comparisons/op_less.fail.cpp b/test/utilities/time/time.point/time.point.comparisons/op_less.fail.cpp index f98dca131..4e4fb1d65 100644 --- a/test/utilities/time/time.point/time.point.comparisons/op_less.fail.cpp +++ b/test/utilities/time/time.point/time.point.comparisons/op_less.fail.cpp @@ -11,19 +11,19 @@ // time_point -// template +// template // bool // operator< (const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator> (const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator<=(const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator>=(const time_point& lhs, const time_point& rhs); diff --git a/test/utilities/time/time.point/time.point.comparisons/op_less.pass.cpp b/test/utilities/time/time.point/time.point.comparisons/op_less.pass.cpp index abbb304d0..8acdc1cae 100644 --- a/test/utilities/time/time.point/time.point.comparisons/op_less.pass.cpp +++ b/test/utilities/time/time.point/time.point.comparisons/op_less.pass.cpp @@ -11,19 +11,19 @@ // time_point -// template +// template // bool // operator< (const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator> (const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator<=(const time_point& lhs, const time_point& rhs); -// template +// template // bool // operator>=(const time_point& lhs, const time_point& rhs); diff --git a/test/utilities/time/time.point/time.point.cons/convert.fail.cpp b/test/utilities/time/time.point/time.point.cons/convert.fail.cpp index 68fd0a0cb..58241a9f2 100644 --- a/test/utilities/time/time.point/time.point.cons/convert.fail.cpp +++ b/test/utilities/time/time.point/time.point.cons/convert.fail.cpp @@ -11,7 +11,7 @@ // time_point -// template +// template // time_point(const time_point& t); // Duration2 shall be implicitly convertible to duration. diff --git a/test/utilities/time/time.point/time.point.cons/convert.pass.cpp b/test/utilities/time/time.point/time.point.cons/convert.pass.cpp index 69547a4c1..bdd260eff 100644 --- a/test/utilities/time/time.point/time.point.cons/convert.pass.cpp +++ b/test/utilities/time/time.point/time.point.cons/convert.pass.cpp @@ -11,7 +11,7 @@ // time_point -// template +// template // time_point(const time_point& t); #include diff --git a/test/utilities/time/time.point/time.point.nonmember/op_+.pass.cpp b/test/utilities/time/time.point/time.point.nonmember/op_+.pass.cpp index ed31cece0..fc627e10e 100644 --- a/test/utilities/time/time.point/time.point.nonmember/op_+.pass.cpp +++ b/test/utilities/time/time.point/time.point.nonmember/op_+.pass.cpp @@ -11,12 +11,12 @@ // time_point -// template -// time_point>::type> +// template +// time_point>::type> // operator+(const time_point& lhs, const duration& rhs); -// template -// time_point, Duration2>::type> +// template +// time_point, Duration2>::type> // operator+(const duration& lhs, const time_point& rhs); #include diff --git a/test/utilities/time/time.point/time.point.nonmember/op_-duration.pass.cpp b/test/utilities/time/time.point/time.point.nonmember/op_-duration.pass.cpp index c3e0d62b6..c2bca8559 100644 --- a/test/utilities/time/time.point/time.point.nonmember/op_-duration.pass.cpp +++ b/test/utilities/time/time.point/time.point.nonmember/op_-duration.pass.cpp @@ -11,8 +11,8 @@ // time_point -// template -// time_point>::type> +// template +// time_point>::type> // operator-(const time_point& lhs, const duration& rhs); #include diff --git a/test/utilities/time/time.point/time.point.nonmember/op_-time_point.pass.cpp b/test/utilities/time/time.point/time.point.nonmember/op_-time_point.pass.cpp index f8ac80bde..0ea405f76 100644 --- a/test/utilities/time/time.point/time.point.nonmember/op_-time_point.pass.cpp +++ b/test/utilities/time/time.point/time.point.nonmember/op_-time_point.pass.cpp @@ -11,8 +11,8 @@ // time_point -// template -// typename common_type::type +// template +// typename common_type::type // operator-(const time_point& lhs, const time_point& rhs); #include diff --git a/test/utilities/time/time.traits/time.traits.specializations/duration.pass.cpp b/test/utilities/time/time.traits/time.traits.specializations/duration.pass.cpp index dfccbd5cb..f638f6309 100644 --- a/test/utilities/time/time.traits/time.traits.specializations/duration.pass.cpp +++ b/test/utilities/time/time.traits/time.traits.specializations/duration.pass.cpp @@ -9,10 +9,10 @@ // -// template +// template // struct common_type, chrono::duration> // { -// typedef chrono::duration::type, see below }> type; +// typedef chrono::duration::type, see below }> type; // }; #include diff --git a/test/utilities/time/time.traits/time.traits.specializations/time_point.pass.cpp b/test/utilities/time/time.traits/time.traits.specializations/time_point.pass.cpp index b0965e104..55d14e1b2 100644 --- a/test/utilities/time/time.traits/time.traits.specializations/time_point.pass.cpp +++ b/test/utilities/time/time.traits/time.traits.specializations/time_point.pass.cpp @@ -9,10 +9,10 @@ // -// template +// template // struct common_type, chrono::time_point> -// { -// typedef chrono::time_point::type> type; +// { +// typedef chrono::time_point::type> type; // }; #include diff --git a/test/utilities/tuple/tuple.tuple/DefaultOnly.h b/test/utilities/tuple/tuple.tuple/DefaultOnly.h index d40e9c134..bdcf46d19 100644 --- a/test/utilities/tuple/tuple.tuple/DefaultOnly.h +++ b/test/utilities/tuple/tuple.tuple/DefaultOnly.h @@ -23,4 +23,4 @@ public: int DefaultOnly::count = 0; -#endif +#endif // DEFAULTONLY_H diff --git a/test/utilities/tuple/tuple.tuple/MoveOnly.h b/test/utilities/tuple/tuple.tuple/MoveOnly.h index b7d62b713..c3468387e 100644 --- a/test/utilities/tuple/tuple.tuple/MoveOnly.h +++ b/test/utilities/tuple/tuple.tuple/MoveOnly.h @@ -21,8 +21,8 @@ public: int get() const {return data_;} - bool operator==(const MoveOnly& x) const {return data_ == x.data_;} - bool operator< (const MoveOnly& x) const {return data_ < x.data_;} + bool operator==(const MoveOnly& x) const {return data_ == x.data_;} + bool operator< (const MoveOnly& x) const {return data_ < x.data_;} }; namespace std { @@ -36,6 +36,6 @@ struct hash } -#endif +#endif // _LIBCPP_MOVE -#endif +#endif // MOVEONLY_H diff --git a/test/utilities/tuple/tuple.tuple/alloc_first.h b/test/utilities/tuple/tuple.tuple/alloc_first.h index 2b2183a45..948f2a499 100644 --- a/test/utilities/tuple/tuple.tuple/alloc_first.h +++ b/test/utilities/tuple/tuple.tuple/alloc_first.h @@ -46,4 +46,4 @@ struct alloc_first bool alloc_first::allocator_constructed = false; -#endif +#endif // ALLOC_FIRST_H diff --git a/test/utilities/tuple/tuple.tuple/alloc_last.h b/test/utilities/tuple/tuple.tuple/alloc_last.h index 7601c9d87..e87cb2118 100644 --- a/test/utilities/tuple/tuple.tuple/alloc_last.h +++ b/test/utilities/tuple/tuple.tuple/alloc_last.h @@ -46,4 +46,4 @@ struct alloc_last bool alloc_last::allocator_constructed = false; -#endif +#endif // ALLOC_LAST_H diff --git a/test/utilities/tuple/tuple.tuple/allocators.h b/test/utilities/tuple/tuple.tuple/allocators.h index 7075f85e2..0e4b7f329 100644 --- a/test/utilities/tuple/tuple.tuple/allocators.h +++ b/test/utilities/tuple/tuple.tuple/allocators.h @@ -150,8 +150,6 @@ public: A3 select_on_container_copy_construction() const {return A3(-1);} }; - - template bool A3::copy_called = false; template bool A3::move_called = false; template bool A3::constructed = false; @@ -171,6 +169,6 @@ bool operator!=(const A3& x, const A3& y) return !(x == y); } -#endif +#endif // _LIBCPP_MOVE -#endif +#endif // ALLOCATORS_H diff --git a/test/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp b/test/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp index 793cef9d2..7970a7044 100644 --- a/test/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp +++ b/test/utilities/tuple/tuple.tuple/tuple.assign/move_pair.pass.cpp @@ -34,7 +34,6 @@ struct D explicit D(int i) : B(i) {} }; - int main() { { diff --git a/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes.pass.cpp b/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes.pass.cpp index 262a4d6ed..a790bf742 100644 --- a/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes.pass.cpp +++ b/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_UTypes.pass.cpp @@ -35,7 +35,7 @@ int main() assert(std::get<1>(t) == 1); } { - std::tuple t(std::allocator_arg, A1(), + std::tuple t(std::allocator_arg, A1(), MoveOnly(0), 1, 2); assert(std::get<0>(t) == 0); @@ -55,14 +55,14 @@ int main() } // extensions { - std::tuple t(std::allocator_arg, A1(), + std::tuple t(std::allocator_arg, A1(), 0, 1); assert(std::get<0>(t) == 0); assert(std::get<1>(t) == 1); assert(std::get<2>(t) == MoveOnly()); } { - std::tuple t(std::allocator_arg, A1(), + std::tuple t(std::allocator_arg, A1(), 0); assert(std::get<0>(t) == 0); assert(std::get<1>(t) == MoveOnly()); diff --git a/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair.pass.cpp b/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair.pass.cpp index b0821dc30..562d07338 100644 --- a/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair.pass.cpp +++ b/test/utilities/tuple/tuple.tuple/tuple.cnstr/alloc_move_pair.pass.cpp @@ -38,7 +38,6 @@ struct D explicit D(int i) : B(i) {} }; - int main() { { diff --git a/test/utilities/tuple/tuple.tuple/tuple.cnstr/move_pair.pass.cpp b/test/utilities/tuple/tuple.tuple/tuple.cnstr/move_pair.pass.cpp index b06da1cb0..a005c65d5 100644 --- a/test/utilities/tuple/tuple.tuple/tuple.cnstr/move_pair.pass.cpp +++ b/test/utilities/tuple/tuple.tuple/tuple.cnstr/move_pair.pass.cpp @@ -33,7 +33,6 @@ struct D explicit D(int i) : B(i) {} }; - int main() { { diff --git a/test/utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple.pass.cpp b/test/utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple.pass.cpp index 4ea7d4ed1..10b76d2be 100644 --- a/test/utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple.pass.cpp +++ b/test/utilities/tuple/tuple.tuple/tuple.creation/forward_as_tuple.pass.cpp @@ -12,7 +12,6 @@ // template // tuple forward_as_tuple(Types&&... t); - #include #include diff --git a/test/utilities/utility/forward/forward.pass.cpp b/test/utilities/utility/forward/forward.pass.cpp index ebb1b518d..cfc800dc0 100644 --- a/test/utilities/utility/forward/forward.pass.cpp +++ b/test/utilities/utility/forward/forward.pass.cpp @@ -32,7 +32,7 @@ two test(const A&); four test(A&&); eight test(const A&&); -#endif +#endif // _LIBCPP_MOVE int main() { @@ -54,7 +54,7 @@ int main() static_assert(sizeof(test(std::forward(ca))) == 8, ""); static_assert(sizeof(test(std::forward(csource()))) == 8, ""); -#else +#else // _LIBCPP_MOVE static_assert(sizeof(test(std::forward(a))) == 1, ""); static_assert(sizeof(test(std::forward(a))) == 1, ""); @@ -69,5 +69,5 @@ int main() static_assert(sizeof(test(std::forward(csource()))) == 2, ""); static_assert(sizeof(test(std::forward(ca))) == 2, ""); static_assert(sizeof(test(std::forward(csource()))) == 2, ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/forward/move_copy.pass.cpp b/test/utilities/utility/forward/move_copy.pass.cpp index dd0281eab..6cc314891 100644 --- a/test/utilities/utility/forward/move_copy.pass.cpp +++ b/test/utilities/utility/forward/move_copy.pass.cpp @@ -29,13 +29,13 @@ public: A(A&&) {++move_ctor;} A& operator=(A&&); -#else +#else // _LIBCPP_MOVE A(const A&) {++copy_ctor;} A& operator=(A&); operator std::__rv () {return std::__rv(*this);} A(std::__rv) {++move_ctor;} -#endif +#endif // _LIBCPP_MOVE A() {} }; diff --git a/test/utilities/utility/forward/move_if_noexcept.pass.cpp b/test/utilities/utility/forward/move_if_noexcept.pass.cpp index 2e59f36e2..2c7718ae3 100644 --- a/test/utilities/utility/forward/move_if_noexcept.pass.cpp +++ b/test/utilities/utility/forward/move_if_noexcept.pass.cpp @@ -45,11 +45,11 @@ int main() static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#else +#else // _LIBCPP_MOVE static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/forward/move_only.pass.cpp b/test/utilities/utility/forward/move_only.pass.cpp index de12e3ff6..56cba6fa1 100644 --- a/test/utilities/utility/forward/move_only.pass.cpp +++ b/test/utilities/utility/forward/move_only.pass.cpp @@ -17,20 +17,20 @@ class move_only #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); -#else +#else // _LIBCPP_MOVE move_only(move_only&); move_only& operator=(move_only&); -#endif +#endif // _LIBCPP_MOVE public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {} move_only& operator=(move_only&&) {} -#else +#else // _LIBCPP_MOVE operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {} -#endif +#endif // _LIBCPP_MOVE move_only() {} }; diff --git a/test/utilities/utility/forward/move_only1.fail.cpp b/test/utilities/utility/forward/move_only1.fail.cpp index 5c577d695..a6dbc7898 100644 --- a/test/utilities/utility/forward/move_only1.fail.cpp +++ b/test/utilities/utility/forward/move_only1.fail.cpp @@ -20,20 +20,20 @@ class move_only #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); -#else +#else // _LIBCPP_MOVE move_only(move_only&); move_only& operator=(move_only&); -#endif +#endif // _LIBCPP_MOVE public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {} move_only& operator=(move_only&&) {} -#else +#else // _LIBCPP_MOVE operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {} -#endif +#endif // _LIBCPP_MOVE move_only() {} }; diff --git a/test/utilities/utility/forward/move_only2.fail.cpp b/test/utilities/utility/forward/move_only2.fail.cpp index 6c50b4cfc..2058d8481 100644 --- a/test/utilities/utility/forward/move_only2.fail.cpp +++ b/test/utilities/utility/forward/move_only2.fail.cpp @@ -20,20 +20,20 @@ class move_only #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); -#else +#else // _LIBCPP_MOVE move_only(move_only&); move_only& operator=(move_only&); -#endif +#endif // _LIBCPP_MOVE public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {} move_only& operator=(move_only&&) {} -#else +#else // _LIBCPP_MOVE operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {} -#endif +#endif // _LIBCPP_MOVE move_only() {} }; diff --git a/test/utilities/utility/forward/move_only3.fail.cpp b/test/utilities/utility/forward/move_only3.fail.cpp index 105c19178..331f59f8f 100644 --- a/test/utilities/utility/forward/move_only3.fail.cpp +++ b/test/utilities/utility/forward/move_only3.fail.cpp @@ -17,20 +17,20 @@ class move_only #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); -#else +#else // _LIBCPP_MOVE move_only(move_only&); move_only& operator=(move_only&); -#endif +#endif // _LIBCPP_MOVE public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {} move_only& operator=(move_only&&) {} -#else +#else // _LIBCPP_MOVE operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {} -#endif +#endif // _LIBCPP_MOVE move_only() {} }; diff --git a/test/utilities/utility/forward/move_only4.fail.cpp b/test/utilities/utility/forward/move_only4.fail.cpp index 10df3f57a..99135b704 100644 --- a/test/utilities/utility/forward/move_only4.fail.cpp +++ b/test/utilities/utility/forward/move_only4.fail.cpp @@ -20,20 +20,20 @@ class move_only #ifdef _LIBCPP_MOVE move_only(const move_only&); move_only& operator=(const move_only&); -#else +#else // _LIBCPP_MOVE move_only(move_only&); move_only& operator=(move_only&); -#endif +#endif // _LIBCPP_MOVE public: #ifdef _LIBCPP_MOVE move_only(move_only&&) {} move_only& operator=(move_only&&) {} -#else +#else // _LIBCPP_MOVE operator std::__rv () {return std::__rv(*this);} move_only(std::__rv) {} -#endif +#endif // _LIBCPP_MOVE move_only() {} }; diff --git a/test/utilities/utility/pairs/pairs.pair/U_V.pass.cpp b/test/utilities/utility/pairs/pairs.pair/U_V.pass.cpp index 6809c27cf..814313bc6 100644 --- a/test/utilities/utility/pairs/pairs.pair/U_V.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/U_V.pass.cpp @@ -26,5 +26,5 @@ int main() assert(*p.first == 3); assert(p.second == nullptr); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/pairs/pairs.pair/assign_rv_pair.pass.cpp b/test/utilities/utility/pairs/pairs.pair/assign_rv_pair.pass.cpp index bd82eb3fd..42ded4c56 100644 --- a/test/utilities/utility/pairs/pairs.pair/assign_rv_pair.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/assign_rv_pair.pass.cpp @@ -28,5 +28,5 @@ int main() assert(*p2.first == 3); assert(p2.second == 4); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp b/test/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp index c0708c79d..787f54b02 100644 --- a/test/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp @@ -39,5 +39,5 @@ int main() assert(p2.first == nullptr); assert(p2.second == 4); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/pairs/pairs.pair/make_pair.pass.cpp b/test/utilities/utility/pairs/pairs.pair/make_pair.pass.cpp index 5b19a5fd3..b38655d36 100644 --- a/test/utilities/utility/pairs/pairs.pair/make_pair.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/make_pair.pass.cpp @@ -36,5 +36,5 @@ int main() assert(p1.first == nullptr); assert(p1.second == 4); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp b/test/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp index 668516690..45ba68a6f 100644 --- a/test/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp @@ -31,5 +31,5 @@ int main() assert(p3.first == P1(3, nullptr)); assert(p3.second == P2(nullptr, 4)); } -#endif +#endif // _LIBCPP_HAS_NO_VARIADICS } diff --git a/test/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp b/test/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp index 13fbfe84b..f34fa9cb9 100644 --- a/test/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/rv_pair_U_V.pass.cpp @@ -38,5 +38,5 @@ int main() assert(p2.first == nullptr); assert(p2.second == 4); } -#endif +#endif // _LIBCPP_MOVE } diff --git a/test/utilities/utility/pairs/pairs.pair/types.pass.cpp b/test/utilities/utility/pairs/pairs.pair/types.pass.cpp index 8ed4d1b7a..deda5dbee 100644 --- a/test/utilities/utility/pairs/pairs.pair/types.pass.cpp +++ b/test/utilities/utility/pairs/pairs.pair/types.pass.cpp @@ -15,7 +15,6 @@ // typedef T1 first_type; // typedef T2 second_type; - #include #include diff --git a/test/utilities/utility/utility.swap/swap.pass.cpp b/test/utilities/utility/utility.swap/swap.pass.cpp index e4c0f388e..067fb1905 100644 --- a/test/utilities/utility/utility.swap/swap.pass.cpp +++ b/test/utilities/utility/utility.swap/swap.pass.cpp @@ -9,8 +9,8 @@ // -// template -// requires MoveAssignable && MoveConstructible +// template +// requires MoveAssignable && MoveConstructible // void // swap(T& a, T& b); @@ -42,7 +42,7 @@ test1() assert(*j == 1); } -#endif +#endif // _LIBCPP_MOVE int main() { diff --git a/test/utilities/utility/utility.swap/swap_array.pass.cpp b/test/utilities/utility/utility.swap/swap_array.pass.cpp index a8b351ebc..28d4dca7e 100644 --- a/test/utilities/utility/utility.swap/swap_array.pass.cpp +++ b/test/utilities/utility/utility.swap/swap_array.pass.cpp @@ -9,8 +9,8 @@ // -// template -// requires Swappable +// template +// requires Swappable // void // swap(T (&a)[N], T (&b)[N]); @@ -54,7 +54,7 @@ test1() assert(*j[2] == 3); } -#endif +#endif // _LIBCPP_MOVE int main() {