summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/hana/test/ext
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/hana/test/ext
parentInitial commit. (diff)
downloadceph-upstream/16.2.11+ds.tar.xz
ceph-upstream/16.2.11+ds.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/hana/test/ext')
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/_specs.hpp18
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/intersperse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/permutations.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/deque/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/_specs.hpp18
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/intersperse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/permutations.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/list/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/_specs.hpp19
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/intersperse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/permutations.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/_specs.hpp19
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/intersperse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/permutations.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/fusion/vector/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/arithmetic.cpp30
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/comparable.cpp26
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/constant.cpp32
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/interop.cpp23
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/logical.cpp66
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/orderable.cpp24
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/integral_c/tag.cpp52
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/comparable.cpp28
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/foldable.cpp57
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/iterable.cpp95
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/searchable.cpp30
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/tag.cpp62
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/list/to.cpp49
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/comparable.cpp28
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/foldable.cpp57
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/iterable.cpp95
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/searchable.cpp30
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/tag.cpp62
-rw-r--r--src/boost/libs/hana/test/ext/boost/mpl/vector/to.cpp49
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/_specs.hpp18
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/intersperse.broken.cpp10
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/permutations.broken.cpp10
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/take_front.broken.cpp10
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/iterable.cpp36
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/monad.cpp52
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/monad_plus.cpp42
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/orderable.cpp47
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/searchable.cpp54
-rw-r--r--src/boost/libs/hana/test/ext/boost/tuple/tag_of.cpp63
-rw-r--r--src/boost/libs/hana/test/ext/std/array/at.cpp43
-rw-r--r--src/boost/libs/hana/test/ext/std/array/comparable.cpp29
-rw-r--r--src/boost/libs/hana/test/ext/std/array/foldable.cpp29
-rw-r--r--src/boost/libs/hana/test/ext/std/array/issue_304.cpp21
-rw-r--r--src/boost/libs/hana/test/ext/std/array/iterable.cpp83
-rw-r--r--src/boost/libs/hana/test/ext/std/array/orderable.cpp29
-rw-r--r--src/boost/libs/hana/test/ext/std/array/searchable.cpp31
-rw-r--r--src/boost/libs/hana/test/ext/std/bugs/libcxx_19616.cpp21
-rw-r--r--src/boost/libs/hana/test/ext/std/bugs/libcxx_22806.cpp21
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/drop_front_exactly.cpp44
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/equal.cpp52
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/find_if.cpp101
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/front.cpp31
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/is_empty.cpp18
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/laws.cpp37
-rw-r--r--src/boost/libs/hana/test/ext/std/integer_sequence/unpack.cpp47
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp31
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp27
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp33
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp22
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp63
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp25
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp53
-rw-r--r--src/boost/libs/hana/test/ext/std/pair/first_second.cpp30
-rw-r--r--src/boost/libs/hana/test/ext/std/pair/issue_90.cpp44
-rw-r--r--src/boost/libs/hana/test/ext/std/pair/laws.cpp41
-rw-r--r--src/boost/libs/hana/test/ext/std/pair/make.cpp26
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/div.cpp24
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/equal.cpp34
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/laws.cpp37
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/less.cpp29
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/minus.cpp19
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/mod.cpp24
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/mult.cpp19
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/one.cpp24
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/plus.cpp19
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/to.cpp36
-rw-r--r--src/boost/libs/hana/test/ext/std/ratio/zero.cpp24
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/_specs.hpp17
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/all_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/any_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/ap.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/cartesian_product.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/drop_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/drop_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/drop_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/for_each.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/group.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/index_if.cpp9
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/insert.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/insert_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/intersperse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/is_empty.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/length.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/lexicographical_compare.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/make.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/none_of.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/partition.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/permutations.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/remove_at.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/remove_range.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/reverse.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/scans.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/sequence.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/slice.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/sort.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/span.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/take_back.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/take_front.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/take_while.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/transform.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/unfolds.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/unique.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/auto/zips.cpp8
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/issue_90.cpp73
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/laws.cpp43
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/laws.functor.cpp55
-rw-r--r--src/boost/libs/hana/test/ext/std/tuple/laws.searchable.cpp38
-rw-r--r--src/boost/libs/hana/test/ext/std/vector.cpp44
290 files changed, 4612 insertions, 0 deletions
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/_specs.hpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/_specs.hpp
new file mode 100644
index 000000000..6734967af
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/_specs.hpp
@@ -0,0 +1,18 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_BOOST_FUSION_DEQUE_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_BOOST_FUSION_DEQUE_AUTO_SPECS_HPP
+
+#include <boost/hana/ext/boost/fusion/deque.hpp>
+
+#include <boost/fusion/container/deque.hpp>
+#include <boost/fusion/container/generation/make_deque.hpp>
+
+
+#define MAKE_TUPLE(...) ::boost::fusion::make_deque(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::boost::fusion::deque<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::boost::fusion::deque_tag
+
+#endif // !BOOST_HANA_TEST_EXT_BOOST_FUSION_DEQUE_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/all_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/any_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/ap.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/for_each.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/group.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/index_if.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/intersperse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/intersperse.cpp
new file mode 100644
index 000000000..185c814a9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/intersperse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/length.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/make.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/none_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/partition.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/permutations.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/permutations.cpp
new file mode 100644
index 000000000..3c1a6e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/permutations.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/reverse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/scans.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sequence.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/slice.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sort.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/span.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_front.cpp
new file mode 100644
index 000000000..9a48d2b8c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/transform.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unique.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/zips.cpp b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/deque/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/_specs.hpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/_specs.hpp
new file mode 100644
index 000000000..1bc300cf6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/_specs.hpp
@@ -0,0 +1,18 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_BOOST_FUSION_LIST_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_BOOST_FUSION_LIST_AUTO_SPECS_HPP
+
+#include <boost/hana/ext/boost/fusion/list.hpp>
+
+#include <boost/fusion/container/generation/make_list.hpp>
+#include <boost/fusion/container/list.hpp>
+
+
+#define MAKE_TUPLE(...) ::boost::fusion::make_list(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::boost::fusion::list<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::boost::fusion::list_tag
+
+#endif // !BOOST_HANA_TEST_EXT_BOOST_FUSION_LIST_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/all_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/any_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/ap.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/for_each.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/group.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/index_if.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/intersperse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/intersperse.cpp
new file mode 100644
index 000000000..185c814a9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/intersperse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/length.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/make.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/none_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/partition.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/permutations.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/permutations.cpp
new file mode 100644
index 000000000..3c1a6e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/permutations.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/reverse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/scans.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sequence.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/slice.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sort.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/span.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_front.cpp
new file mode 100644
index 000000000..9a48d2b8c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/transform.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unique.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/list/auto/zips.cpp b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/list/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/_specs.hpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/_specs.hpp
new file mode 100644
index 000000000..5024efc4c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/_specs.hpp
@@ -0,0 +1,19 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_BOOST_FUSION_TUPLE_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_BOOST_FUSION_TUPLE_AUTO_SPECS_HPP
+
+#define FUSION_MAX_VECTOR_SIZE 50
+#include <boost/hana/ext/boost/fusion/tuple.hpp>
+
+#include <boost/fusion/tuple.hpp>
+
+
+#define MAKE_TUPLE(...) ::boost::fusion::make_tuple(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::boost::fusion::tuple<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::boost::fusion::tuple_tag
+#define MAKE_TUPLE_NO_CONSTEXPR
+
+#endif // !BOOST_HANA_TEST_EXT_BOOST_FUSION_TUPLE_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/all_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/any_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/ap.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/for_each.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/group.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/index_if.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/intersperse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/intersperse.cpp
new file mode 100644
index 000000000..185c814a9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/intersperse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/length.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/make.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/none_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/partition.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/permutations.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/permutations.cpp
new file mode 100644
index 000000000..3c1a6e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/permutations.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/reverse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/scans.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sequence.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/slice.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sort.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/span.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_front.cpp
new file mode 100644
index 000000000..9a48d2b8c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/transform.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unique.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/zips.cpp b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/tuple/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/_specs.hpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/_specs.hpp
new file mode 100644
index 000000000..3b87a1d8e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/_specs.hpp
@@ -0,0 +1,19 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_BOOST_FUSION_VECTOR_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_BOOST_FUSION_VECTOR_AUTO_SPECS_HPP
+
+#define FUSION_MAX_VECTOR_SIZE 50
+#include <boost/hana/ext/boost/fusion/vector.hpp>
+
+#include <boost/fusion/container/generation/make_vector.hpp>
+#include <boost/fusion/container/vector.hpp>
+
+#define MAKE_TUPLE(...) ::boost::fusion::make_vector(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::boost::fusion::vector<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::boost::fusion::vector_tag
+#define MAKE_TUPLE_NO_CONSTEXPR
+
+#endif // !BOOST_HANA_TEST_EXT_BOOST_FUSION_VECTOR_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/all_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/any_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/ap.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/for_each.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/group.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/index_if.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/intersperse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/intersperse.cpp
new file mode 100644
index 000000000..185c814a9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/intersperse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/length.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/make.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/none_of.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/partition.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/permutations.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/permutations.cpp
new file mode 100644
index 000000000..3c1a6e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/permutations.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/reverse.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/scans.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sequence.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/slice.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sort.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/span.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_back.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_front.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_front.cpp
new file mode 100644
index 000000000..9a48d2b8c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_while.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/transform.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unique.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/zips.cpp b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/fusion/vector/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/arithmetic.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/arithmetic.cpp
new file mode 100644
index 000000000..0dfef3713
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/arithmetic.cpp
@@ -0,0 +1,30 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/euclidean_ring.hpp>
+#include <laws/group.hpp>
+#include <laws/monoid.hpp>
+#include <laws/ring.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ mpl::int_<-10>{}, mpl::int_<-2>{}, mpl::integral_c<int, 0>{},
+ mpl::integral_c<int, 1>{}, mpl::integral_c<int, 3>{}
+ );
+
+ hana::test::TestMonoid<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+ hana::test::TestGroup<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+ hana::test::TestRing<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+ hana::test::TestEuclideanRing<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/comparable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/comparable.cpp
new file mode 100644
index 000000000..60a0e5be5
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/comparable.cpp
@@ -0,0 +1,26 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/hashable.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ mpl::int_<-10>{}, mpl::int_<-2>{}, mpl::integral_c<int, 0>{},
+ mpl::integral_c<int, 1>{}, mpl::integral_c<int, 3>{}
+ );
+
+ hana::test::TestComparable<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+ hana::test::TestHashable<hana::ext::boost::mpl::integral_c_tag<void>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/constant.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/constant.cpp
new file mode 100644
index 000000000..6831d6cf9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/constant.cpp
@@ -0,0 +1,32 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/tuple.hpp>
+#include <boost/hana/value.hpp>
+
+#include <laws/constant.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ // value
+ static_assert(hana::value(mpl::integral_c<int, 0>{}) == 0, "");
+ static_assert(hana::value(mpl::integral_c<int, 1>{}) == 1, "");
+ static_assert(hana::value(mpl::integral_c<int, 3>{}) == 3, "");
+
+ // laws
+ hana::test::TestConstant<hana::ext::boost::mpl::integral_c_tag<int>>{
+ hana::make_tuple(
+ mpl::int_<-10>{}, mpl::int_<-2>{}, mpl::integral_c<int, 0>{},
+ mpl::integral_c<int, 1>{}, mpl::integral_c<int, 3>{}
+ ),
+ hana::tuple_t<int, long, long long>
+ };
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/interop.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/interop.cpp
new file mode 100644
index 000000000..949e477d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/interop.cpp
@@ -0,0 +1,23 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/not_equal.hpp>
+
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ // Interoperation with hana::integral_constant
+ BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 1>{} == hana::int_c<1>);
+ BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 1>{} == hana::long_c<1>);
+
+ BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 2>{} != hana::int_c<3>);
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/logical.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/logical.cpp
new file mode 100644
index 000000000..10c0e19a1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/logical.cpp
@@ -0,0 +1,66 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/eval_if.hpp>
+#include <boost/hana/functional/always.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/logical.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ // eval_if
+ {
+ auto t = hana::test::ct_eq<3>{};
+ auto e = hana::test::ct_eq<4>{};
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(mpl::true_{}, hana::always(t), hana::always(e)),
+ t
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(mpl::false_{}, hana::always(t), hana::always(e)),
+ e
+ ));
+ }
+
+ // not_
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(mpl::true_{}),
+ mpl::false_{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(mpl::false_{}),
+ mpl::true_{}
+ ));
+ }
+
+ // laws
+ hana::test::TestLogical<hana::ext::boost::mpl::integral_c_tag<int>>{
+ hana::make_tuple(
+ mpl::int_<-2>{}, mpl::integral_c<int, 0>{}, mpl::integral_c<int, 3>{}
+ )
+ };
+
+ hana::test::TestLogical<hana::ext::boost::mpl::integral_c_tag<bool>>{
+ hana::make_tuple(
+ mpl::true_{}, mpl::false_{},
+ mpl::integral_c<bool, true>{}, mpl::integral_c<bool, false>{}
+ )
+ };
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/orderable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/orderable.cpp
new file mode 100644
index 000000000..24ee5b752
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/orderable.cpp
@@ -0,0 +1,24 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/orderable.hpp>
+
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ mpl::int_<-10>{}, mpl::int_<-2>{}, mpl::integral_c<int, 0>{},
+ mpl::integral_c<int, 1>{}, mpl::integral_c<int, 3>{}
+ );
+
+ hana::test::TestOrderable<hana::ext::boost::mpl::integral_c_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/integral_c/tag.cpp b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/tag.cpp
new file mode 100644
index 000000000..55b33a8c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/integral_c/tag.cpp
@@ -0,0 +1,52 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/integral_c.hpp>
+
+#include <boost/hana/core/tag_of.hpp>
+
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/char.hpp>
+#include <boost/mpl/int.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/size_t.hpp>
+
+#include <cstddef>
+#include <type_traits>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::bool_<true>>,
+ hana::ext::boost::mpl::integral_c_tag<bool>
+>::value, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::int_<0>>,
+ hana::ext::boost::mpl::integral_c_tag<int>
+>::value, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::long_<0>>,
+ hana::ext::boost::mpl::integral_c_tag<long>
+>::value, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::size_t<0>>,
+ hana::ext::boost::mpl::integral_c_tag<std::size_t>
+>::value, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::integral_c<int, 0>>,
+ hana::ext::boost::mpl::integral_c_tag<int>
+>::value, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::char_<0>>,
+ hana::ext::boost::mpl::integral_c_tag<char>
+>::value, "");
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/comparable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/comparable.cpp
new file mode 100644
index 000000000..fd13b5309
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/comparable.cpp
@@ -0,0 +1,28 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+
+#include <boost/mpl/list.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ auto lists = hana::make_tuple(
+ mpl::list<>{}
+ , mpl::list<t1>{}
+ , mpl::list<t1, t2>{}
+ , mpl::list<t1, t2, t3>{}
+ , mpl::list<t1, t2, t3, t4>{}
+ );
+
+ hana::test::TestComparable<hana::ext::boost::mpl::list_tag>{lists};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/foldable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/foldable.cpp
new file mode 100644
index 000000000..1c4697771
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/foldable.cpp
@@ -0,0 +1,57 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/unpack.hpp>
+#include <boost/hana/type.hpp>
+
+#include <laws/base.hpp>
+#include <laws/foldable.hpp>
+
+#include <boost/mpl/list.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // unpack
+ {
+ hana::test::_injection<0> f{};
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::list<>{}, f),
+ f()
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::list<t1>{}, f),
+ f(hana::type_c<t1>)
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::list<t1, t2>{}, f),
+ f(hana::type_c<t1>, hana::type_c<t2>)
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::list<t1, t2, t3>{}, f),
+ f(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>)
+ ));
+ }
+
+ // laws
+ auto lists = hana::make_tuple(
+ mpl::list<>{}
+ , mpl::list<t1>{}
+ , mpl::list<t1, t2>{}
+ , mpl::list<t1, t2, t3>{}
+ , mpl::list<t1, t2, t3, t4>{}
+ );
+
+ hana::test::TestFoldable<hana::ext::boost::mpl::list_tag>{lists};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/iterable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/iterable.cpp
new file mode 100644
index 000000000..68a900ee1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/iterable.cpp
@@ -0,0 +1,95 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/drop_front_exactly.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/front.hpp>
+#include <boost/hana/is_empty.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+#include <boost/hana/type.hpp>
+
+#include <laws/iterable.hpp>
+
+#include <boost/mpl/list.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // front
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::list<t1>{}),
+ hana::type_c<t1>
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::list<t1, t2>{}),
+ hana::type_c<t1>
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::list<t1, t2, t3>{}),
+ hana::type_c<t1>
+ ));
+ }
+
+ // drop_front_exactly
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1>{}),
+ mpl::list<>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1, t2>{}),
+ mpl::list<t2>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1, t2, t3>{}),
+ mpl::list<t2, t3>{}
+ ));
+
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1, t2, t3>{}, hana::size_c<2>),
+ mpl::list<t3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1, t2, t3, t4>{}, hana::size_c<2>),
+ mpl::list<t3, t4>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::list<t1, t2, t3, t4>{}, hana::size_c<3>),
+ mpl::list<t4>{}
+ ));
+ }
+
+ // is_empty
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::list<>{}));
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::list0<>{}));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::list<t1>{})));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::list1<t1>{})));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::list<t1, t2>{})));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::list2<t1, t2>{})));
+ }
+
+ // laws
+ auto lists = hana::make_tuple(
+ mpl::list<>{}
+ , mpl::list<t1>{}
+ , mpl::list<t1, t2>{}
+ , mpl::list<t1, t2, t3>{}
+ , mpl::list<t1, t2, t3, t4>{}
+ );
+ hana::test::TestIterable<hana::ext::boost::mpl::list_tag>{lists};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/searchable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/searchable.cpp
new file mode 100644
index 000000000..50b3a15e1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/searchable.cpp
@@ -0,0 +1,30 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/searchable.hpp>
+
+#include <boost/mpl/list.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ auto lists = hana::make_tuple(
+ mpl::list<>{}
+ , mpl::list<t1>{}
+ , mpl::list<t1, t2>{}
+ , mpl::list<t1, t2, t3>{}
+ , mpl::list<t1, t2, t3, t4>{}
+ );
+
+ auto keys = hana::tuple_t<t1, t2, void>;
+
+ hana::test::TestSearchable<hana::ext::boost::mpl::list_tag>{lists, keys};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/tag.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/tag.cpp
new file mode 100644
index 000000000..3cfc26ae8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/tag.cpp
@@ -0,0 +1,62 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/core/tag_of.hpp>
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/list.hpp>
+#include <boost/mpl/quote.hpp>
+#include <boost/mpl/transform.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+using mpl_id = mpl::quote1<mpl::identity>;
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<>>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::list<>, mpl_id>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<t1>>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<t1>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::list<t1>, mpl_id>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<t1, t2>>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::list<t1, t2>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::list<t1, t2>, mpl_id>::type>,
+ hana::ext::boost::mpl::list_tag
+>{}, "");
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/list/to.cpp b/src/boost/libs/hana/test/ext/boost/mpl/list/to.cpp
new file mode 100644
index 000000000..bd8808af4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/list/to.cpp
@@ -0,0 +1,49 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/list.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/core/to.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/type.hpp>
+
+#include <support/seq.hpp>
+
+#include <boost/mpl/list.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // Conversion from any `Foldable` containing `type`s
+ auto foldable = ::seq;
+ auto to_list = hana::to<hana::ext::boost::mpl::list_tag>;
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_list(foldable()),
+ mpl::list<>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_list(foldable(hana::type_c<t1>)),
+ mpl::list<t1>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_list(foldable(hana::type_c<t1>, hana::type_c<t2>)),
+ mpl::list<t1, t2>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_list(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>)),
+ mpl::list<t1, t2, t3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_list(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>, hana::type_c<t4>)),
+ mpl::list<t1, t2, t3, t4>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/comparable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/comparable.cpp
new file mode 100644
index 000000000..55557f31b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/comparable.cpp
@@ -0,0 +1,28 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+
+#include <boost/mpl/vector.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ auto vectors = hana::make_tuple(
+ mpl::vector<>{}
+ , mpl::vector<t1>{}
+ , mpl::vector<t1, t2>{}
+ , mpl::vector<t1, t2, t3>{}
+ , mpl::vector<t1, t2, t3, t4>{}
+ );
+
+ hana::test::TestComparable<hana::ext::boost::mpl::vector_tag>{vectors};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/foldable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/foldable.cpp
new file mode 100644
index 000000000..4143cd58c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/foldable.cpp
@@ -0,0 +1,57 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/unpack.hpp>
+#include <boost/hana/type.hpp>
+
+#include <laws/base.hpp>
+#include <laws/foldable.hpp>
+
+#include <boost/mpl/vector.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // unpack
+ {
+ hana::test::_injection<0> f{};
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::vector<>{}, f),
+ f()
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::vector<t1>{}, f),
+ f(hana::type_c<t1>)
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::vector<t1, t2>{}, f),
+ f(hana::type_c<t1>, hana::type_c<t2>)
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(mpl::vector<t1, t2, t3>{}, f),
+ f(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>)
+ ));
+ }
+
+ // laws
+ auto vectors = hana::make_tuple(
+ mpl::vector<>{}
+ , mpl::vector<t1>{}
+ , mpl::vector<t1, t2>{}
+ , mpl::vector<t1, t2, t3>{}
+ , mpl::vector<t1, t2, t3, t4>{}
+ );
+
+ hana::test::TestFoldable<hana::ext::boost::mpl::vector_tag>{vectors};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/iterable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/iterable.cpp
new file mode 100644
index 000000000..08090af7b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/iterable.cpp
@@ -0,0 +1,95 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/drop_front_exactly.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/front.hpp>
+#include <boost/hana/is_empty.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+#include <boost/hana/type.hpp>
+
+#include <laws/iterable.hpp>
+
+#include <boost/mpl/vector.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // front
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::vector<t1>{}),
+ hana::type_c<t1>
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::vector<t1, t2>{}),
+ hana::type_c<t1>
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(mpl::vector<t1, t2, t3>{}),
+ hana::type_c<t1>
+ ));
+ }
+
+ // drop_front_exactly
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1>{}),
+ mpl::vector<>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1, t2>{}),
+ mpl::vector<t2>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1, t2, t3>{}),
+ mpl::vector<t2, t3>{}
+ ));
+
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1, t2, t3>{}, hana::size_c<2>),
+ mpl::vector<t3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1, t2, t3, t4>{}, hana::size_c<2>),
+ mpl::vector<t3, t4>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(mpl::vector<t1, t2, t3, t4>{}, hana::size_c<3>),
+ mpl::vector<t4>{}
+ ));
+ }
+
+ // is_empty
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::vector<>{}));
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(mpl::vector0<>{}));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector<t1>{})));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector1<t1>{})));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector<t1, t2>{})));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(mpl::vector2<t1, t2>{})));
+ }
+
+ // laws
+ auto vectors = hana::make_tuple(
+ mpl::vector<>{}
+ , mpl::vector<t1>{}
+ , mpl::vector<t1, t2>{}
+ , mpl::vector<t1, t2, t3>{}
+ , mpl::vector<t1, t2, t3, t4>{}
+ );
+ hana::test::TestIterable<hana::ext::boost::mpl::vector_tag>{vectors};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/searchable.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/searchable.cpp
new file mode 100644
index 000000000..58a0dd068
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/searchable.cpp
@@ -0,0 +1,30 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/searchable.hpp>
+
+#include <boost/mpl/vector.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ auto vectors = hana::make_tuple(
+ mpl::vector<>{}
+ , mpl::vector<t1>{}
+ , mpl::vector<t1, t2>{}
+ , mpl::vector<t1, t2, t3>{}
+ , mpl::vector<t1, t2, t3, t4>{}
+ );
+
+ auto keys = hana::tuple_t<t1, t2, void>;
+
+ hana::test::TestSearchable<hana::ext::boost::mpl::vector_tag>{vectors, keys};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/tag.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/tag.cpp
new file mode 100644
index 000000000..892f119b2
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/tag.cpp
@@ -0,0 +1,62 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/core/tag_of.hpp>
+
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/vector.hpp>
+#include <boost/mpl/quote.hpp>
+#include <boost/mpl/transform.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+using mpl_id = mpl::quote1<mpl::identity>;
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<>>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::vector<>, mpl_id>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<t1>>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<t1>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::vector<t1>, mpl_id>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<t1, t2>>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::vector<t1, t2>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<mpl::transform<mpl::vector<t1, t2>, mpl_id>::type>,
+ hana::ext::boost::mpl::vector_tag
+>{}, "");
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/mpl/vector/to.cpp b/src/boost/libs/hana/test/ext/boost/mpl/vector/to.cpp
new file mode 100644
index 000000000..0ebb6d47c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/mpl/vector/to.cpp
@@ -0,0 +1,49 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/mpl/vector.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/core/to.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/type.hpp>
+
+#include <support/seq.hpp>
+
+#include <boost/mpl/vector.hpp>
+namespace hana = boost::hana;
+namespace mpl = boost::mpl;
+
+
+struct t1; struct t2; struct t3; struct t4;
+
+int main() {
+ // Conversion from any `Foldable` containing `type`s
+ auto foldable = ::seq;
+ auto to_vector = hana::to<hana::ext::boost::mpl::vector_tag>;
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_vector(foldable()),
+ mpl::vector<>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_vector(foldable(hana::type_c<t1>)),
+ mpl::vector<t1>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_vector(foldable(hana::type_c<t1>, hana::type_c<t2>)),
+ mpl::vector<t1, t2>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_vector(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>)),
+ mpl::vector<t1, t2, t3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ to_vector(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>, hana::type_c<t4>)),
+ mpl::vector<t1, t2, t3, t4>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/_specs.hpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/_specs.hpp
new file mode 100644
index 000000000..3d1ff41ab
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/_specs.hpp
@@ -0,0 +1,18 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_BOOST_TUPLE_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_BOOST_TUPLE_AUTO_SPECS_HPP
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/tuple/tuple.hpp>
+
+
+#define MAKE_TUPLE(...) ::boost::make_tuple(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::boost::tuple<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::boost::tuple_tag
+#define MAKE_TUPLE_NO_CONSTEXPR
+
+#endif // !BOOST_HANA_TEST_EXT_BOOST_TUPLE_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/all_of.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/any_of.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/ap.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/at.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/for_each.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/group.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/index_if.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/insert.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/intersperse.broken.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/intersperse.broken.cpp
new file mode 100644
index 000000000..88d5d356e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/intersperse.broken.cpp
@@ -0,0 +1,10 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#if 0
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+#endif
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/length.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/make.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/none_of.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/partition.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/permutations.broken.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/permutations.broken.cpp
new file mode 100644
index 000000000..0b505bf33
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/permutations.broken.cpp
@@ -0,0 +1,10 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#if 0
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+#endif
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/reverse.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/scans.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/sequence.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/slice.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/sort.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/span.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/take_back.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/take_front.broken.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_front.broken.cpp
new file mode 100644
index 000000000..f155b3865
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_front.broken.cpp
@@ -0,0 +1,10 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#if 0
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+#endif
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/take_while.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/transform.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/unique.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/auto/zips.cpp b/src/boost/libs/hana/test/ext/boost/tuple/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/iterable.cpp b/src/boost/libs/hana/test/ext/boost/tuple/iterable.cpp
new file mode 100644
index 000000000..d74a355dd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/iterable.cpp
@@ -0,0 +1,36 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/foldable.hpp>
+#include <laws/iterable.hpp>
+
+#include <boost/tuple/tuple.hpp>
+namespace hana = boost::hana;
+
+
+template <int i>
+using eq = hana::test::ct_eq<i>;
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // Setup for the laws below
+ //////////////////////////////////////////////////////////////////////////
+ auto eq_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(eq<0>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{}, eq<2>{})
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // Foldable, Iterable
+ //////////////////////////////////////////////////////////////////////////
+ hana::test::TestFoldable<hana::ext::boost::tuple_tag>{eq_tuples};
+ hana::test::TestIterable<hana::ext::boost::tuple_tag>{eq_tuples};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/monad.cpp b/src/boost/libs/hana/test/ext/boost/tuple/monad.cpp
new file mode 100644
index 000000000..b7af39136
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/monad.cpp
@@ -0,0 +1,52 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/applicative.hpp>
+#include <laws/base.hpp>
+#include <laws/functor.hpp>
+#include <laws/monad.hpp>
+
+#include <boost/tuple/tuple.hpp>
+namespace hana = boost::hana;
+
+
+template <int i>
+using eq = hana::test::ct_eq<i>;
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // Setup for the laws below
+ //////////////////////////////////////////////////////////////////////////
+ auto eq_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(eq<0>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{})
+ );
+
+ auto eq_values = hana::make_tuple(eq<0>{}, eq<2>{});
+
+ auto eq_tuples_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(
+ ::boost::make_tuple(eq<0>{}))
+ , ::boost::make_tuple(
+ ::boost::make_tuple(eq<0>{}),
+ ::boost::make_tuple(eq<1>{}, eq<2>{}))
+ , ::boost::make_tuple(
+ ::boost::make_tuple(eq<0>{}),
+ ::boost::make_tuple(eq<1>{}, eq<2>{}),
+ ::boost::make_tuple(eq<3>{}, eq<4>{}))
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // Functor up to Monad
+ //////////////////////////////////////////////////////////////////////////
+ hana::test::TestFunctor<hana::ext::boost::tuple_tag>{eq_tuples, eq_values};
+ hana::test::TestApplicative<hana::ext::boost::tuple_tag>{eq_tuples};
+ hana::test::TestMonad<hana::ext::boost::tuple_tag>{eq_tuples, eq_tuples_tuples};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/monad_plus.cpp b/src/boost/libs/hana/test/ext/boost/tuple/monad_plus.cpp
new file mode 100644
index 000000000..ca6b51589
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/monad_plus.cpp
@@ -0,0 +1,42 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/hana/bool.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/functional/always.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/monad_plus.hpp>
+
+#include <boost/tuple/tuple.hpp>
+namespace hana = boost::hana;
+
+
+template <int i>
+using eq = hana::test::ct_eq<i>;
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // Setup for the laws below
+ //////////////////////////////////////////////////////////////////////////
+ auto eq_tuples = hana::make_tuple(
+ ::boost::make_tuple(eq<0>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{}, eq<2>{})
+ );
+
+ auto eq_values = hana::make_tuple(eq<0>{}, eq<1>{}, eq<2>{});
+ auto predicates = hana::make_tuple(
+ hana::equal.to(eq<0>{}), hana::equal.to(eq<1>{}), hana::equal.to(eq<2>{}),
+ hana::always(hana::false_c), hana::always(hana::true_c)
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // MonadPlus
+ //////////////////////////////////////////////////////////////////////////
+ hana::test::TestMonadPlus<hana::ext::boost::tuple_tag>{eq_tuples, predicates, eq_values};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/orderable.cpp b/src/boost/libs/hana/test/ext/boost/tuple/orderable.cpp
new file mode 100644
index 000000000..661fad13b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/orderable.cpp
@@ -0,0 +1,47 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/orderable.hpp>
+
+#include <boost/tuple/tuple.hpp>
+namespace hana = boost::hana;
+
+
+template <int i>
+using eq = hana::test::ct_eq<i>;
+
+template <int i>
+using ord = hana::test::ct_ord<i>;
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // Setup for the laws below
+ //////////////////////////////////////////////////////////////////////////
+ auto eq_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(eq<0>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{}, eq<2>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{}, eq<2>{}, eq<3>{}, eq<4>{})
+ );
+
+ auto ord_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(ord<0>{})
+ , ::boost::make_tuple(ord<0>{}, ord<1>{})
+ , ::boost::make_tuple(ord<0>{}, ord<1>{}, ord<2>{})
+ , ::boost::make_tuple(ord<0>{}, ord<1>{}, ord<2>{}, ord<3>{}, ord<4>{})
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // Comparable and Orderable
+ //////////////////////////////////////////////////////////////////////////
+ hana::test::TestComparable<hana::ext::boost::tuple_tag>{eq_tuples};
+ hana::test::TestOrderable<hana::ext::boost::tuple_tag>{ord_tuples};
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/searchable.cpp b/src/boost/libs/hana/test/ext/boost/tuple/searchable.cpp
new file mode 100644
index 000000000..08b4b78d1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/searchable.cpp
@@ -0,0 +1,54 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/hana/bool.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/searchable.hpp>
+
+#include <boost/tuple/tuple.hpp>
+namespace hana = boost::hana;
+
+
+template <int i>
+using eq = hana::test::ct_eq<i>;
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // Setup for the laws below
+ //////////////////////////////////////////////////////////////////////////
+ auto eq_tuples = hana::make_tuple(
+ ::boost::make_tuple()
+ , ::boost::make_tuple(eq<0>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{})
+ , ::boost::make_tuple(eq<0>{}, eq<1>{}, eq<2>{})
+ );
+
+ auto eq_tuple_keys = hana::make_tuple(
+ eq<3>{}, eq<5>{}, eq<7>{}
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // Searchable
+ //////////////////////////////////////////////////////////////////////////
+ {
+ hana::test::TestSearchable<hana::ext::boost::tuple_tag>{eq_tuples, eq_tuple_keys};
+
+ auto bools = hana::make_tuple(
+ ::boost::make_tuple(hana::true_c)
+ , ::boost::make_tuple(hana::false_c)
+ , ::boost::make_tuple(hana::true_c, hana::true_c)
+ , ::boost::make_tuple(hana::true_c, hana::false_c)
+ , ::boost::make_tuple(hana::false_c, hana::true_c)
+ , ::boost::make_tuple(hana::false_c, hana::false_c)
+ );
+ hana::test::TestSearchable<hana::ext::boost::tuple_tag>{
+ bools,
+ hana::make_tuple(hana::true_c, hana::false_c)
+ };
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/boost/tuple/tag_of.cpp b/src/boost/libs/hana/test/ext/boost/tuple/tag_of.cpp
new file mode 100644
index 000000000..831bb8a7c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/boost/tuple/tag_of.cpp
@@ -0,0 +1,63 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/core/tag_of.hpp>
+#include <boost/hana/ext/boost/tuple.hpp>
+
+#include <boost/tuple/tuple.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ //////////////////////////////////////////////////////////////////////////
+ // make sure the tag is correct
+ //////////////////////////////////////////////////////////////////////////
+ {
+ auto make_cons = [](auto x, auto xs) {
+ return boost::tuples::cons<decltype(x), decltype(xs)>{x, xs};
+ };
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(boost::make_tuple())>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(boost::make_tuple(1))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(boost::make_tuple(1, '2'))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(boost::make_tuple(1, '2', 3.3))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(make_cons(1, boost::tuples::null_type{}))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(make_cons(1, make_cons('2', boost::tuples::null_type{})))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<decltype(make_cons(1, boost::make_tuple('2', 3.3)))>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+
+ static_assert(std::is_same<
+ hana::tag_of_t<boost::tuples::null_type>,
+ hana::ext::boost::tuple_tag
+ >::value, "");
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/at.cpp b/src/boost/libs/hana/test/ext/std/array/at.cpp
new file mode 100644
index 000000000..90ed1f5b7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/at.cpp
@@ -0,0 +1,43 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/at.hpp>
+
+#include <laws/base.hpp> // for move_only
+
+#include <array>
+namespace hana = boost::hana;
+
+
+int main() {
+ // Check non-const lvalue reference
+ {
+ std::array<int, 2> arr = {{999, 888}};
+ int& i = hana::at_c<0>(arr);
+ BOOST_HANA_RUNTIME_CHECK(i == 999);
+ arr[0] = 333;
+ BOOST_HANA_RUNTIME_CHECK(i == 333);
+ i = 444;
+ BOOST_HANA_RUNTIME_CHECK(arr[0] == 444);
+ }
+
+ // Check const lvalue reference
+ {
+ std::array<int, 2> arr = {{999, 888}};
+ int const& i = hana::at_c<0>(static_cast<std::array<int, 2> const&>(arr));
+ BOOST_HANA_RUNTIME_CHECK(i == 999);
+ arr[0] = 333;
+ BOOST_HANA_RUNTIME_CHECK(i == 333);
+ }
+
+ // Check move-only types
+ {
+ std::array<hana::test::move_only, 2> arr{};
+ hana::test::move_only m = hana::at_c<0>(std::move(arr));
+ (void)m;
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/comparable.cpp b/src/boost/libs/hana/test/ext/std/array/comparable.cpp
new file mode 100644
index 000000000..d0596fa6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/comparable.cpp
@@ -0,0 +1,29 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+
+#include <array>
+namespace hana = boost::hana;
+
+
+template <int ...i>
+constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
+
+int main() {
+ auto int_arrays = hana::make_tuple(
+ array<>()
+ , array<0>()
+ , array<0, 1>()
+ , array<0, 1, 2>()
+ , array<0, 1, 2, 3>()
+ , array<0, 1, 2, 3, 4>()
+ );
+
+ hana::test::TestComparable<hana::ext::std::array_tag>{int_arrays};
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/foldable.cpp b/src/boost/libs/hana/test/ext/std/array/foldable.cpp
new file mode 100644
index 000000000..b36e9521f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/foldable.cpp
@@ -0,0 +1,29 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/foldable.hpp>
+
+#include <array>
+namespace hana = boost::hana;
+
+
+template <int ...i>
+constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
+
+int main() {
+ auto int_arrays = hana::make_tuple(
+ array<>()
+ , array<0>()
+ , array<0, 1>()
+ , array<0, 1, 2>()
+ , array<0, 1, 2, 3>()
+ , array<0, 1, 2, 3, 4>()
+ );
+
+ hana::test::TestFoldable<hana::ext::std::array_tag>{int_arrays};
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/issue_304.cpp b/src/boost/libs/hana/test/ext/std/array/issue_304.cpp
new file mode 100644
index 000000000..321f18f27
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/issue_304.cpp
@@ -0,0 +1,21 @@
+// Copyright Jason Rice 2016
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+// modified from https://github.com/boostorg/hana/issues/304
+
+#include <boost/hana/ext/std/array.hpp>
+#include <boost/hana/tuple.hpp>
+
+namespace hana = boost::hana;
+
+struct Foo
+{
+ Foo() = default;
+ Foo(Foo const&) = delete;
+ Foo(Foo &&) = default;
+};
+
+using bar = decltype(hana::to_tuple(std::array<Foo, 2>()));
+
+int main()
+{ }
diff --git a/src/boost/libs/hana/test/ext/std/array/iterable.cpp b/src/boost/libs/hana/test/ext/std/array/iterable.cpp
new file mode 100644
index 000000000..38bd7731d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/iterable.cpp
@@ -0,0 +1,83 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/drop_front_exactly.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/front.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/is_empty.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/iterable.hpp>
+
+#include <array>
+namespace hana = boost::hana;
+
+
+template <int ...i>
+constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
+
+int main() {
+ // is_empty
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(array<>()));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(array<0>())));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(array<0, 1>())));
+ }
+
+ // front
+ {
+ BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0>()) == 0);
+ BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0, 1>()) == 0);
+ BOOST_HANA_CONSTEXPR_CHECK(hana::front(array<0, 1, 2>()) == 0);
+ }
+
+ // drop_front_exactly
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0>()),
+ array<>()
+ ));
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0, 1>()),
+ array<1>()
+ ));
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0, 1, 2>()),
+ array<1, 2>()
+ ));
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0, 1, 2, 3>()),
+ array<1, 2, 3>()
+ ));
+
+
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0, 1, 2, 3>(), hana::size_c<2>),
+ array<2, 3>()
+ ));
+
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::drop_front_exactly(array<0, 1, 2, 3>(), hana::size_c<3>),
+ array<3>()
+ ));
+ }
+
+ // laws
+ auto int_arrays = hana::make_tuple(
+ array<>()
+ , array<0>()
+ , array<0, 1>()
+ , array<0, 1, 2>()
+ , array<0, 1, 2, 3>()
+ , array<0, 1, 2, 3, 4>()
+ );
+
+ hana::test::TestIterable<hana::ext::std::array_tag>{int_arrays};
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/orderable.cpp b/src/boost/libs/hana/test/ext/std/array/orderable.cpp
new file mode 100644
index 000000000..ced9ab6b4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/orderable.cpp
@@ -0,0 +1,29 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/orderable.hpp>
+
+#include <array>
+namespace hana = boost::hana;
+
+
+template <int ...i>
+constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
+
+int main() {
+ auto int_arrays = hana::make_tuple(
+ array<>()
+ , array<0>()
+ , array<0, 1>()
+ , array<0, 1, 2>()
+ , array<0, 1, 2, 3>()
+ , array<0, 1, 2, 3, 4>()
+ );
+
+ hana::test::TestOrderable<hana::ext::std::array_tag>{int_arrays};
+}
diff --git a/src/boost/libs/hana/test/ext/std/array/searchable.cpp b/src/boost/libs/hana/test/ext/std/array/searchable.cpp
new file mode 100644
index 000000000..1ba584fde
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/array/searchable.cpp
@@ -0,0 +1,31 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/array.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/searchable.hpp>
+
+#include <array>
+namespace hana = boost::hana;
+
+
+template <int ...i>
+constexpr auto array() { return std::array<int, sizeof...(i)>{{i...}}; }
+
+int main() {
+ auto eq_arrays = hana::make_tuple(
+ std::array<hana::test::ct_eq<0>, 0>{}
+ , std::array<hana::test::ct_eq<0>, 1>{}
+ , std::array<hana::test::ct_eq<0>, 2>{}
+ , std::array<hana::test::ct_eq<0>, 3>{}
+ , std::array<hana::test::ct_eq<0>, 4>{}
+ );
+
+ auto eq_keys = hana::make_tuple(hana::test::ct_eq<0>{});
+
+ hana::test::TestSearchable<hana::ext::std::array_tag>{eq_arrays, eq_keys};
+}
diff --git a/src/boost/libs/hana/test/ext/std/bugs/libcxx_19616.cpp b/src/boost/libs/hana/test/ext/std/bugs/libcxx_19616.cpp
new file mode 100644
index 000000000..2b91f88ad
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/bugs/libcxx_19616.cpp
@@ -0,0 +1,21 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/lift.hpp>
+
+#include <tuple>
+namespace hana = boost::hana;
+
+
+int main() {
+ // Make sure we workaround the bug at:
+ // http://llvm.org/bugs/show_bug.cgi?id=19616
+ BOOST_HANA_CONSTEXPR_CHECK(hana::equal(
+ hana::lift<hana::ext::std::tuple_tag>(std::make_tuple(1)),
+ std::make_tuple(std::make_tuple(1))
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/bugs/libcxx_22806.cpp b/src/boost/libs/hana/test/ext/std/bugs/libcxx_22806.cpp
new file mode 100644
index 000000000..281481086
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/bugs/libcxx_22806.cpp
@@ -0,0 +1,21 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/chain.hpp>
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/functional/compose.hpp>
+#include <boost/hana/lift.hpp>
+
+#include <laws/base.hpp>
+
+#include <tuple>
+namespace hana = boost::hana;
+
+
+int main() {
+ using M = hana::ext::std::tuple_tag;
+ auto m = std::make_tuple(hana::test::ct_eq<0>{});
+ auto f = hana::compose(hana::lift<M>, hana::test::_injection<0>{});
+ hana::chain(m, hana::compose(hana::lift<M>, f));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/drop_front_exactly.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/drop_front_exactly.cpp
new file mode 100644
index 000000000..a9556ccb7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/drop_front_exactly.cpp
@@ -0,0 +1,44 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/drop_front_exactly.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/integral_constant.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0>{}),
+ std::index_sequence<>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0, 1>{}),
+ std::index_sequence<1>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0, 1, 2>{}),
+ std::index_sequence<1, 2>{}
+ ));
+
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0, 1, 2>{}, hana::size_c<2>),
+ std::index_sequence<2>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0, 1, 2, 3>{}, hana::size_c<2>),
+ std::index_sequence<2, 3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::drop_front_exactly(std::index_sequence<0, 1, 2, 3>{}, hana::size_c<3>),
+ std::index_sequence<3>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/equal.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/equal.cpp
new file mode 100644
index 000000000..7249d234d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/equal.cpp
@@ -0,0 +1,52 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/not.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+
+
+using T = int;
+using U = long long;
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::integer_sequence<T>{},
+ std::integer_sequence<U>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::integer_sequence<T, 0>{},
+ std::integer_sequence<U>{}
+ )));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::integer_sequence<T>{},
+ std::integer_sequence<U, 0>{}
+ )));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::integer_sequence<T, 0>{},
+ std::integer_sequence<U, 0>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::integer_sequence<T, 0>{},
+ std::integer_sequence<U, 0, 1>{}
+ )));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::integer_sequence<T, 0, 2>{},
+ std::integer_sequence<U, 0, 1>{}
+ )));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::integer_sequence<T, 0, 1, 2, 3>{},
+ std::integer_sequence<U, 0, 1, 2, 3>{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::integer_sequence<T, 0, 1, 2, 3, 5>{},
+ std::integer_sequence<U, 0, 1, 2, 3>{}
+ )));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/find_if.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/find_if.cpp
new file mode 100644
index 000000000..4c904ed65
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/find_if.cpp
@@ -0,0 +1,101 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/ext/std/integral_constant.hpp>
+#include <boost/hana/find_if.hpp>
+#include <boost/hana/optional.hpp>
+
+#include <cstddef>
+#include <type_traits>
+#include <utility>
+namespace hana = boost::hana;
+
+
+struct undefined { };
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<>{},
+ hana::equal.to(undefined{})),
+ hana::nothing
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0>{},
+ hana::equal.to(std::integral_constant<std::size_t, 0>{})),
+ hana::just(std::integral_constant<std::size_t, 0>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0>{},
+ hana::equal.to(std::integral_constant<std::size_t, 1>{})),
+ hana::nothing
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1>{},
+ hana::equal.to(std::integral_constant<std::size_t, 0>{})),
+ hana::just(std::integral_constant<std::size_t, 0>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1>{},
+ hana::equal.to(std::integral_constant<std::size_t, 1>{})),
+ hana::just(std::integral_constant<std::size_t, 1>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1>{},
+ hana::equal.to(std::integral_constant<std::size_t, 2>{})),
+ hana::nothing
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2>{},
+ hana::equal.to(std::integral_constant<std::size_t, 0>{})),
+ hana::just(std::integral_constant<std::size_t, 0>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2>{},
+ hana::equal.to(std::integral_constant<std::size_t, 1>{})),
+ hana::just(std::integral_constant<std::size_t, 1>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2>{},
+ hana::equal.to(std::integral_constant<std::size_t, 2>{})),
+ hana::just(std::integral_constant<std::size_t, 2>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2>{},
+ hana::equal.to(std::integral_constant<std::size_t, 3>{})),
+ hana::nothing
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2, 3>{},
+ hana::equal.to(std::integral_constant<std::size_t, 0>{})),
+ hana::just(std::integral_constant<std::size_t, 0>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2, 3>{},
+ hana::equal.to(std::integral_constant<std::size_t, 1>{})),
+ hana::just(std::integral_constant<std::size_t, 1>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2, 3>{},
+ hana::equal.to(std::integral_constant<std::size_t, 2>{})),
+ hana::just(std::integral_constant<std::size_t, 2>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2, 3>{},
+ hana::equal.to(std::integral_constant<std::size_t, 3>{})),
+ hana::just(std::integral_constant<std::size_t, 3>{})
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::find_if(std::index_sequence<0, 1, 2, 3>{},
+ hana::equal.to(std::integral_constant<std::size_t, 4>{})),
+ hana::nothing
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/front.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/front.cpp
new file mode 100644
index 000000000..69372c99b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/front.cpp
@@ -0,0 +1,31 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/ext/std/integral_constant.hpp>
+#include <boost/hana/front.hpp>
+
+#include <type_traits>
+#include <utility>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(std::index_sequence<0>{}),
+ std::integral_constant<std::size_t, 0>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(std::index_sequence<0, 1>{}),
+ std::integral_constant<std::size_t, 0>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::front(std::integer_sequence<int, -3, 1, 2, 3, 4>{}),
+ std::integral_constant<int, -3>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/is_empty.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/is_empty.cpp
new file mode 100644
index 000000000..b6c79c755
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/is_empty.cpp
@@ -0,0 +1,18 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/is_empty.hpp>
+#include <boost/hana/not.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::is_empty(std::index_sequence<>{}));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(std::index_sequence<0>{})));
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(std::index_sequence<1>{})));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/laws.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/laws.cpp
new file mode 100644
index 000000000..8cc7fcc43
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/laws.cpp
@@ -0,0 +1,37 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/ext/std/integral_constant.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/foldable.hpp>
+#include <laws/iterable.hpp>
+#include <laws/searchable.hpp>
+
+#include <type_traits>
+#include <utility>
+namespace hana = boost::hana;
+
+
+auto sequences = hana::make_tuple(
+ std::integer_sequence<int>{},
+ std::integer_sequence<int, 2>{},
+ std::integer_sequence<int, 3>{},
+ std::integer_sequence<int, 3, 4>{},
+ std::integer_sequence<int, 3, 4, 5>{}
+);
+
+auto keys = hana::make_tuple(
+ std::integral_constant<int, 3>{}, std::integral_constant<long long, 4>{}
+);
+
+int main() {
+ hana::test::TestComparable<hana::ext::std::integer_sequence_tag>{sequences};
+ hana::test::TestFoldable<hana::ext::std::integer_sequence_tag>{sequences};
+ hana::test::TestIterable<hana::ext::std::integer_sequence_tag>{sequences};
+ hana::test::TestSearchable<hana::ext::std::integer_sequence_tag>{sequences, keys};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integer_sequence/unpack.cpp b/src/boost/libs/hana/test/ext/std/integer_sequence/unpack.cpp
new file mode 100644
index 000000000..5ef9320c8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integer_sequence/unpack.cpp
@@ -0,0 +1,47 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/integer_sequence.hpp>
+#include <boost/hana/ext/std/integral_constant.hpp>
+#include <boost/hana/unpack.hpp>
+
+#include <laws/base.hpp>
+
+#include <type_traits>
+#include <utility>
+namespace hana = boost::hana;
+
+
+int main() {
+ hana::test::_injection<0> f{};
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(std::integer_sequence<int>{}, f),
+ f()
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(std::integer_sequence<int, 0>{}, f),
+ f(std::integral_constant<int, 0>{})
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(std::integer_sequence<int, 0, 1>{}, f),
+ f(std::integral_constant<int, 0>{}, std::integral_constant<int, 1>{})
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(std::integer_sequence<int, 0, 1, 2>{}, f),
+ f(std::integral_constant<int, 0>{}, std::integral_constant<int, 1>{},
+ std::integral_constant<int, 2>{})
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::unpack(std::integer_sequence<int, 0, 1, 2, 3>{}, f),
+ f(std::integral_constant<int, 0>{}, std::integral_constant<int, 1>{},
+ std::integral_constant<int, 2>{}, std::integral_constant<int, 3>{})
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp
new file mode 100644
index 000000000..25372ddd5
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp
@@ -0,0 +1,31 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/euclidean_ring.hpp>
+#include <laws/group.hpp>
+#include <laws/monoid.hpp>
+#include <laws/ring.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestMonoid<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestGroup<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestRing<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestEuclideanRing<hana::ext::std::integral_constant_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp
new file mode 100644
index 000000000..d17b6d810
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp
@@ -0,0 +1,27 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/hashable.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestComparable<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestHashable<hana::ext::std::integral_constant_tag<void>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp
new file mode 100644
index 000000000..f15fb8e80
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp
@@ -0,0 +1,33 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+#include <boost/hana/value.hpp>
+
+#include <laws/constant.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // value
+ static_assert(hana::value(std::integral_constant<int, 0>{}) == 0, "");
+ static_assert(hana::value(std::integral_constant<int, 1>{}) == 1, "");
+ static_assert(hana::value(std::integral_constant<int, 3>{}) == 3, "");
+
+ // laws
+ hana::test::TestConstant<hana::ext::std::integral_constant_tag<int>>{
+ hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ ),
+ hana::tuple_t<int, long, long long>
+ };
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp
new file mode 100644
index 000000000..9b445f01b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp
@@ -0,0 +1,22 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/not_equal.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // Interoperation with hana::integral_constant
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 1>{} == hana::int_c<1>);
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 1>{} == hana::long_c<1>);
+
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 2>{} != hana::int_c<3>);
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp
new file mode 100644
index 000000000..38d8091c2
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp
@@ -0,0 +1,63 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/eval_if.hpp>
+#include <boost/hana/functional/always.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/logical.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // eval_if
+ {
+ auto t = hana::test::ct_eq<3>{};
+ auto e = hana::test::ct_eq<4>{};
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(std::true_type{}, hana::always(t), hana::always(e)),
+ t
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(std::false_type{}, hana::always(t), hana::always(e)),
+ e
+ ));
+ }
+
+ // not_
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(std::true_type{}),
+ std::false_type{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(std::false_type{}),
+ std::true_type{}
+ ));
+ }
+
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ auto bools = hana::make_tuple(std::true_type{}, std::false_type{});
+
+ // laws
+ hana::test::TestLogical<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestLogical<hana::ext::std::integral_constant_tag<bool>>{bools};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp
new file mode 100644
index 000000000..6a14ad147
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp
@@ -0,0 +1,25 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/orderable.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestOrderable<hana::ext::std::integral_constant_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp
new file mode 100644
index 000000000..8a747e441
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp
@@ -0,0 +1,53 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/core/tag_of.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+struct inherit_simple : std::integral_constant<int, 3> { };
+struct inherit_no_default : std::integral_constant<int, 3> {
+ inherit_no_default() = delete;
+};
+
+struct incomplete;
+struct empty_type { };
+struct non_pod { virtual ~non_pod() { } };
+
+
+static_assert(std::is_same<
+ hana::tag_of_t<inherit_simple>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<inherit_no_default>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<std::is_pointer<int*>>,
+ hana::ext::std::integral_constant_tag<bool>
+>{}, "");
+
+static_assert(!std::is_same<
+ hana::tag_of_t<incomplete>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<empty_type>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<non_pod>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<void>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/pair/first_second.cpp b/src/boost/libs/hana/test/ext/std/pair/first_second.cpp
new file mode 100644
index 000000000..a44ed1cc3
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/pair/first_second.cpp
@@ -0,0 +1,30 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/pair.hpp>
+#include <boost/hana/first.hpp>
+#include <boost/hana/second.hpp>
+
+#include <laws/base.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+
+
+int main() {
+ // first
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::first(std::make_pair(ct_eq<0>{}, ct_eq<1>{})),
+ ct_eq<0>{}
+ ));
+
+ // second
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::second(std::make_pair(ct_eq<0>{}, ct_eq<1>{})),
+ ct_eq<1>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/pair/issue_90.cpp b/src/boost/libs/hana/test/ext/std/pair/issue_90.cpp
new file mode 100644
index 000000000..d8f70c56e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/pair/issue_90.cpp
@@ -0,0 +1,44 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/pair.hpp>
+#include <boost/hana/first.hpp>
+#include <boost/hana/second.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+
+
+template <typename T>
+T const& cref(T& t) { return t; }
+
+// a non-movable, non-copyable type
+template <int i>
+struct RefOnly {
+ RefOnly() = default;
+ RefOnly(RefOnly const&) = delete;
+ RefOnly(RefOnly&&) = delete;
+};
+
+int main() {
+ // This test makes sure that we return the proper reference types from
+ // `first` and `second`.
+ std::pair<RefOnly<0>, RefOnly<1>> p;
+
+ {
+ RefOnly<0>&& r1 = hana::first(std::move(p));
+ RefOnly<0>& r2 = hana::first(p);
+ RefOnly<0> const& r3 = hana::first(cref(p));
+
+ (void)r1; (void)r2; (void)r3;
+ }
+
+ {
+ RefOnly<1>&& r1 = hana::second(std::move(p));
+ RefOnly<1>& r2 = hana::second(p);
+ RefOnly<1> const& r3 = hana::second(cref(p));
+
+ (void)r1; (void)r2; (void)r3;
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/std/pair/laws.cpp b/src/boost/libs/hana/test/ext/std/pair/laws.cpp
new file mode 100644
index 000000000..869001ab6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/pair/laws.cpp
@@ -0,0 +1,41 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/pair.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/comparable.hpp>
+#include <laws/foldable.hpp>
+#include <laws/orderable.hpp>
+#include <laws/product.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+using hana::test::ct_ord;
+
+
+int main() {
+ auto eq_elems = hana::make_tuple(ct_eq<3>{}, ct_eq<4>{});
+
+ auto eqs = hana::make_tuple(
+ std::make_pair(ct_eq<3>{}, ct_eq<3>{})
+ , std::make_pair(ct_eq<3>{}, ct_eq<4>{})
+ , std::make_pair(ct_eq<4>{}, ct_eq<3>{})
+ , std::make_pair(ct_eq<4>{}, ct_eq<4>{})
+ );
+
+ auto ords = hana::make_tuple(
+ std::make_pair(ct_ord<3>{}, ct_ord<3>{})
+ , std::make_pair(ct_ord<3>{}, ct_ord<4>{})
+ , std::make_pair(ct_ord<4>{}, ct_ord<3>{})
+ , std::make_pair(ct_ord<4>{}, ct_ord<4>{})
+ );
+
+ hana::test::TestComparable<hana::ext::std::pair_tag>{eqs};
+ hana::test::TestOrderable<hana::ext::std::pair_tag>{ords};
+ hana::test::TestFoldable<hana::ext::std::pair_tag>{eqs};
+ hana::test::TestProduct<hana::ext::std::pair_tag>{eq_elems};
+}
diff --git a/src/boost/libs/hana/test/ext/std/pair/make.cpp b/src/boost/libs/hana/test/ext/std/pair/make.cpp
new file mode 100644
index 000000000..f0cb9d297
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/pair/make.cpp
@@ -0,0 +1,26 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/pair.hpp>
+
+#include <laws/base.hpp>
+
+#include <utility>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::make<hana::ext::std::pair_tag>(ct_eq<0>{}, ct_eq<1>{}),
+ std::make_pair(ct_eq<0>{}, ct_eq<1>{})
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::make<hana::ext::std::pair_tag>(ct_eq<3>{}, ct_eq<4>{}),
+ std::make_pair(ct_eq<3>{}, ct_eq<4>{})
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/div.cpp b/src/boost/libs/hana/test/ext/std/ratio/div.cpp
new file mode 100644
index 000000000..327717fcb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/div.cpp
@@ -0,0 +1,24 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/div.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::div(std::ratio<6>{}, std::ratio<4>{}),
+ std::ratio<6, 4>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::div(std::ratio<3, 4>{}, std::ratio<5, 10>{}),
+ std::ratio<3*10, 4*5>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/equal.cpp b/src/boost/libs/hana/test/ext/std/ratio/equal.cpp
new file mode 100644
index 000000000..f72ec8980
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/equal.cpp
@@ -0,0 +1,34 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/not.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::ratio<0>{},
+ std::ratio<0>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::ratio<3>{},
+ std::ratio<3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ std::ratio<3, 5>{},
+ std::ratio<6, 10>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::equal(
+ std::ratio<4, 5>{},
+ std::ratio<6, 10>{}
+ )));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/laws.cpp b/src/boost/libs/hana/test/ext/std/ratio/laws.cpp
new file mode 100644
index 000000000..460fe3c81
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/laws.cpp
@@ -0,0 +1,37 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/euclidean_ring.hpp>
+#include <laws/group.hpp>
+#include <laws/monoid.hpp>
+#include <laws/orderable.hpp>
+#include <laws/ring.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ratios = hana::make_tuple(
+ std::ratio<0>{}
+ , std::ratio<1, 3>{}
+ , std::ratio<1, 2>{}
+ , std::ratio<2, 6>{}
+ , std::ratio<3, 1>{}
+ , std::ratio<7, 8>{}
+ , std::ratio<3, 5>{}
+ , std::ratio<2, 1>{}
+ );
+
+ hana::test::TestComparable<hana::ext::std::ratio_tag>{ratios};
+ hana::test::TestOrderable<hana::ext::std::ratio_tag>{ratios};
+ hana::test::TestMonoid<hana::ext::std::ratio_tag>{ratios};
+ hana::test::TestGroup<hana::ext::std::ratio_tag>{ratios};
+ hana::test::TestRing<hana::ext::std::ratio_tag>{ratios};
+ hana::test::TestEuclideanRing<hana::ext::std::ratio_tag>{ratios};
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/less.cpp b/src/boost/libs/hana/test/ext/std/ratio/less.cpp
new file mode 100644
index 000000000..79e8dbc42
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/less.cpp
@@ -0,0 +1,29 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/less.hpp>
+#include <boost/hana/not.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::less(
+ std::ratio<1>{},
+ std::ratio<3>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::less(
+ std::ratio<4, 10>{},
+ std::ratio<3, 5>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::less(
+ std::ratio<3, 5>{},
+ std::ratio<4, 10>{}
+ )));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/minus.cpp b/src/boost/libs/hana/test/ext/std/ratio/minus.cpp
new file mode 100644
index 000000000..9a6bc4199
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/minus.cpp
@@ -0,0 +1,19 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/minus.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::minus(std::ratio<3, 4>{}, std::ratio<5, 10>{}),
+ std::ratio<3*10 - 5*4, 4*10>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/mod.cpp b/src/boost/libs/hana/test/ext/std/ratio/mod.cpp
new file mode 100644
index 000000000..24c748eb3
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/mod.cpp
@@ -0,0 +1,24 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/mod.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::mod(std::ratio<6>{}, std::ratio<4>{}),
+ std::ratio<0>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::mod(std::ratio<3, 4>{}, std::ratio<5, 10>{}),
+ std::ratio<0>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/mult.cpp b/src/boost/libs/hana/test/ext/std/ratio/mult.cpp
new file mode 100644
index 000000000..5f345bf2f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/mult.cpp
@@ -0,0 +1,19 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/mult.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::mult(std::ratio<3, 4>{}, std::ratio<5, 10>{}),
+ std::ratio<3*5, 4*10>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/one.cpp b/src/boost/libs/hana/test/ext/std/ratio/one.cpp
new file mode 100644
index 000000000..a05ac1be1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/one.cpp
@@ -0,0 +1,24 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/one.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::one<hana::ext::std::ratio_tag>(),
+ std::ratio<1, 1>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::one<hana::ext::std::ratio_tag>(),
+ std::ratio<2, 2>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/plus.cpp b/src/boost/libs/hana/test/ext/std/ratio/plus.cpp
new file mode 100644
index 000000000..33a47bd9d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/plus.cpp
@@ -0,0 +1,19 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/plus.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::plus(std::ratio<3, 4>{}, std::ratio<5, 10>{}),
+ std::ratio<3*10 + 5*4, 4*10>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/to.cpp b/src/boost/libs/hana/test/ext/std/ratio/to.cpp
new file mode 100644
index 000000000..2795c990a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/to.cpp
@@ -0,0 +1,36 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/core/to.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+
+#include <laws/base.hpp>
+#include <support/cnumeric.hpp>
+
+#include <ratio>
+#include <utility>
+namespace hana = boost::hana;
+
+
+int main() {
+ // Conversion from a Constant to a std::ratio
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::to<hana::ext::std::ratio_tag>(cnumeric<int, 0>),
+ std::ratio<0>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::to<hana::ext::std::ratio_tag>(cnumeric<int, 1>),
+ std::ratio<1>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::to<hana::ext::std::ratio_tag>(cnumeric<int, 3>),
+ std::ratio<3>{}
+ ));
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/std/ratio/zero.cpp b/src/boost/libs/hana/test/ext/std/ratio/zero.cpp
new file mode 100644
index 000000000..af0fa1711
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/ratio/zero.cpp
@@ -0,0 +1,24 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/ratio.hpp>
+#include <boost/hana/zero.hpp>
+
+#include <ratio>
+namespace hana = boost::hana;
+
+
+int main() {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::zero<hana::ext::std::ratio_tag>(),
+ std::ratio<0, 1>{}
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::zero<hana::ext::std::ratio_tag>(),
+ std::ratio<0, 2>{}
+ ));
+}
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/_specs.hpp b/src/boost/libs/hana/test/ext/std/tuple/auto/_specs.hpp
new file mode 100644
index 000000000..c165d4214
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/_specs.hpp
@@ -0,0 +1,17 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_HANA_TEST_EXT_STD_TUPLE_AUTO_SPECS_HPP
+#define BOOST_HANA_TEST_EXT_STD_TUPLE_AUTO_SPECS_HPP
+
+#include <boost/hana/ext/std/tuple.hpp>
+
+#include <tuple>
+
+
+#define MAKE_TUPLE(...) ::std::make_tuple(__VA_ARGS__)
+#define TUPLE_TYPE(...) ::std::tuple<__VA_ARGS__>
+#define TUPLE_TAG ::boost::hana::ext::std::tuple_tag
+
+#endif // !BOOST_HANA_TEST_EXT_STD_TUPLE_AUTO_SPECS_HPP
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/all_of.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/all_of.cpp
new file mode 100644
index 000000000..f3e974ffd
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/all_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/all_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/any_of.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/any_of.cpp
new file mode 100644
index 000000000..3065d0175
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/any_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/any_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/ap.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/ap.cpp
new file mode 100644
index 000000000..59c9cb757
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/ap.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/ap.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/at.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/at.cpp
new file mode 100644
index 000000000..605265331
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/cartesian_product.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/cartesian_product.cpp
new file mode 100644
index 000000000..b0795e8d7
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/cartesian_product.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/cartesian_product.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/drop_back.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_back.cpp
new file mode 100644
index 000000000..b283844d6
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/drop_front.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_front.cpp
new file mode 100644
index 000000000..a39d6f450
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/drop_while.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_while.cpp
new file mode 100644
index 000000000..18907f033
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/drop_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/drop_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/for_each.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/for_each.cpp
new file mode 100644
index 000000000..714fe03c0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/for_each.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/for_each.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/group.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/group.cpp
new file mode 100644
index 000000000..0669b496f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/group.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/group.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/index_if.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/index_if.cpp
new file mode 100644
index 000000000..ef37fe65a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/index_if.cpp
@@ -0,0 +1,9 @@
+// Copyright Louis Dionne 2013-2017
+// Copyright Jason Rice 2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/index_if.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/insert.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/insert.cpp
new file mode 100644
index 000000000..e8efc6dc1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/insert.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/insert_range.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/insert_range.cpp
new file mode 100644
index 000000000..05ac5774e
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/insert_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/insert_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/intersperse.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/intersperse.cpp
new file mode 100644
index 000000000..185c814a9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/intersperse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/intersperse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/is_empty.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/is_empty.cpp
new file mode 100644
index 000000000..f175f7ddb
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/is_empty.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/is_empty.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/length.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/length.cpp
new file mode 100644
index 000000000..55111dd60
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/length.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/length.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/lexicographical_compare.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/lexicographical_compare.cpp
new file mode 100644
index 000000000..4d2f3edf4
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/lexicographical_compare.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/lexicographical_compare.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/make.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/make.cpp
new file mode 100644
index 000000000..f90514f16
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/make.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/make.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/none_of.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/none_of.cpp
new file mode 100644
index 000000000..b56a27b47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/none_of.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/none_of.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/partition.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/partition.cpp
new file mode 100644
index 000000000..ba9621a6c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/partition.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/partition.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/permutations.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/permutations.cpp
new file mode 100644
index 000000000..3c1a6e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/permutations.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/permutations.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/remove_at.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/remove_at.cpp
new file mode 100644
index 000000000..5b7c5af47
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/remove_at.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_at.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/remove_range.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/remove_range.cpp
new file mode 100644
index 000000000..6d7c6e090
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/remove_range.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/remove_range.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/reverse.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/reverse.cpp
new file mode 100644
index 000000000..342278df8
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/reverse.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/reverse.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/scans.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/scans.cpp
new file mode 100644
index 000000000..36dd32437
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/scans.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/scans.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/sequence.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/sequence.cpp
new file mode 100644
index 000000000..4ed01e852
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/sequence.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sequence.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/slice.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/slice.cpp
new file mode 100644
index 000000000..3e20df95f
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/slice.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/slice.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/sort.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/sort.cpp
new file mode 100644
index 000000000..f639ddeb0
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/sort.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/sort.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/span.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/span.cpp
new file mode 100644
index 000000000..297b7f174
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/span.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/span.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/take_back.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/take_back.cpp
new file mode 100644
index 000000000..2a91d7d4d
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/take_back.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_back.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/take_front.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/take_front.cpp
new file mode 100644
index 000000000..9a48d2b8c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/take_front.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_front.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/take_while.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/take_while.cpp
new file mode 100644
index 000000000..e58c99aca
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/take_while.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/take_while.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/transform.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/transform.cpp
new file mode 100644
index 000000000..306c1bc3c
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/transform.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/transform.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/unfolds.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/unfolds.cpp
new file mode 100644
index 000000000..f8bac9ddc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/unfolds.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unfolds.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/unique.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/unique.cpp
new file mode 100644
index 000000000..9c1dc7155
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/unique.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/unique.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/auto/zips.cpp b/src/boost/libs/hana/test/ext/std/tuple/auto/zips.cpp
new file mode 100644
index 000000000..32ec5cc8a
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/auto/zips.cpp
@@ -0,0 +1,8 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include "_specs.hpp"
+#include <auto/zips.hpp>
+
+int main() { }
diff --git a/src/boost/libs/hana/test/ext/std/tuple/issue_90.cpp b/src/boost/libs/hana/test/ext/std/tuple/issue_90.cpp
new file mode 100644
index 000000000..dfbb4a7fc
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/issue_90.cpp
@@ -0,0 +1,73 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/at.hpp>
+#include <boost/hana/at_key.hpp>
+#include <boost/hana/back.hpp>
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/front.hpp>
+#include <boost/hana/integral_constant.hpp>
+
+#include <tuple>
+#include <utility>
+namespace hana = boost::hana;
+
+
+template <typename T>
+T const& cref(T& t) { return t; }
+
+// a non-movable, non-copyable type
+struct RefOnly {
+ RefOnly() = default;
+ RefOnly(RefOnly const&) = delete;
+ RefOnly(RefOnly&&) = delete;
+};
+
+template <int i>
+struct RefOnly_i : hana::int_<i> {
+ RefOnly_i() = default;
+ RefOnly_i(RefOnly_i const&) = delete;
+ RefOnly_i(RefOnly_i&&) = delete;
+};
+
+int main() {
+ std::tuple<RefOnly> t;
+
+ // Make sure that we return the proper reference types from `at`.
+ {
+ RefOnly&& r1 = hana::at_c<0>(std::move(t));
+ RefOnly& r2 = hana::at_c<0>(t);
+ RefOnly const& r3 = hana::at_c<0>(cref(t));
+
+ (void)r1; (void)r2; (void)r3;
+ }
+
+ // Make sure we return the proper reference types from `front`.
+ {
+ RefOnly&& r1 = hana::front(std::move(t));
+ RefOnly& r2 = hana::front(t);
+ RefOnly const& r3 = hana::front(cref(t));
+
+ (void)r1; (void)r2; (void)r3;
+ }
+
+ // Make sure we return the proper reference types from `back`.
+ {
+ RefOnly&& r1 = hana::back(std::move(t));
+ RefOnly& r2 = hana::back(t);
+ RefOnly const& r3 = hana::back(cref(t));
+
+ (void)r1; (void)r2; (void)r3;
+ }
+
+ // Make sure we return the proper reference types from `at_key`.
+ {
+ std::tuple<RefOnly_i<3>> t{};
+ RefOnly_i<3>& r1 = hana::at_key(t, RefOnly_i<3>{});
+ RefOnly_i<3> const& r2 = hana::at_key(cref(t), RefOnly_i<3>{});
+ RefOnly_i<3>&& r3 = hana::at_key(std::move(t), RefOnly_i<3>{});
+
+ (void)r1; (void)r2; (void)r3;
+ }
+}
diff --git a/src/boost/libs/hana/test/ext/std/tuple/laws.cpp b/src/boost/libs/hana/test/ext/std/tuple/laws.cpp
new file mode 100644
index 000000000..4c56bc8ee
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/laws.cpp
@@ -0,0 +1,43 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/comparable.hpp>
+#include <laws/foldable.hpp>
+#include <laws/iterable.hpp>
+#include <laws/orderable.hpp>
+#include <laws/sequence.hpp>
+
+#include <tuple>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+using hana::test::ct_ord;
+
+
+int main() {
+ auto eq_tuples = hana::make_tuple(
+ std::make_tuple()
+ , std::make_tuple(ct_eq<0>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{})
+ );
+
+ auto ord_tuples = hana::make_tuple(
+ std::make_tuple()
+ , std::make_tuple(ct_ord<0>{})
+ , std::make_tuple(ct_ord<0>{}, ct_ord<1>{})
+ , std::make_tuple(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{})
+ , std::make_tuple(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, ct_ord<3>{}, ct_ord<4>{})
+ );
+
+ hana::test::TestComparable<hana::ext::std::tuple_tag>{eq_tuples};
+ hana::test::TestOrderable<hana::ext::std::tuple_tag>{ord_tuples};
+ hana::test::TestFoldable<hana::ext::std::tuple_tag>{eq_tuples};
+ hana::test::TestIterable<hana::ext::std::tuple_tag>{eq_tuples};
+ hana::test::TestSequence<hana::ext::std::tuple_tag>{};
+}
diff --git a/src/boost/libs/hana/test/ext/std/tuple/laws.functor.cpp b/src/boost/libs/hana/test/ext/std/tuple/laws.functor.cpp
new file mode 100644
index 000000000..874d01f9b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/laws.functor.cpp
@@ -0,0 +1,55 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/bool.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/functional/always.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/applicative.hpp>
+#include <laws/base.hpp>
+#include <laws/functor.hpp>
+#include <laws/monad.hpp>
+#include <laws/monad_plus.hpp>
+
+#include <tuple>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+
+
+int main() {
+ auto tuples = hana::make_tuple(
+ std::make_tuple()
+ , std::make_tuple(ct_eq<0>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{})
+ );
+
+ auto values = hana::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{});
+
+ auto nested_tuples = hana::make_tuple(
+ std::make_tuple()
+ , std::make_tuple(
+ std::make_tuple(ct_eq<0>{}))
+ , std::make_tuple(
+ std::make_tuple(ct_eq<0>{}),
+ std::make_tuple(ct_eq<1>{}, ct_eq<2>{}))
+ , std::make_tuple(
+ std::make_tuple(ct_eq<0>{}),
+ std::make_tuple(ct_eq<1>{}, ct_eq<2>{}),
+ std::make_tuple(ct_eq<3>{}, ct_eq<4>{}))
+ );
+
+ auto predicates = hana::make_tuple(
+ hana::equal.to(ct_eq<0>{}), hana::equal.to(ct_eq<1>{}), hana::equal.to(ct_eq<2>{}),
+ hana::always(hana::false_c), hana::always(hana::true_c)
+ );
+
+ hana::test::TestFunctor<hana::ext::std::tuple_tag>{tuples, values};
+ hana::test::TestApplicative<hana::ext::std::tuple_tag>{tuples};
+ hana::test::TestMonad<hana::ext::std::tuple_tag>{tuples, nested_tuples};
+ hana::test::TestMonadPlus<hana::ext::std::tuple_tag>{tuples, predicates, values};
+}
diff --git a/src/boost/libs/hana/test/ext/std/tuple/laws.searchable.cpp b/src/boost/libs/hana/test/ext/std/tuple/laws.searchable.cpp
new file mode 100644
index 000000000..7eb6b42b9
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/tuple/laws.searchable.cpp
@@ -0,0 +1,38 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/bool.hpp>
+#include <boost/hana/ext/std/tuple.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/searchable.hpp>
+
+#include <tuple>
+namespace hana = boost::hana;
+using hana::test::ct_eq;
+
+
+int main() {
+ auto tuples = hana::make_tuple(
+ std::make_tuple()
+ , std::make_tuple(ct_eq<0>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{})
+ , std::make_tuple(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
+ );
+ auto keys = hana::make_tuple(ct_eq<3>{}, ct_eq<5>{}, ct_eq<7>{});
+
+ auto bool_tuples = hana::make_tuple(
+ std::make_tuple(hana::true_c)
+ , std::make_tuple(hana::false_c)
+ , std::make_tuple(hana::true_c, hana::true_c)
+ , std::make_tuple(hana::true_c, hana::false_c)
+ , std::make_tuple(hana::false_c, hana::true_c)
+ , std::make_tuple(hana::false_c, hana::false_c)
+ );
+ auto bool_keys = hana::make_tuple(hana::true_c, hana::false_c);
+
+ hana::test::TestSearchable<hana::ext::std::tuple_tag>{tuples, keys};
+ hana::test::TestSearchable<hana::ext::std::tuple_tag>{bool_tuples, bool_keys};
+}
diff --git a/src/boost/libs/hana/test/ext/std/vector.cpp b/src/boost/libs/hana/test/ext/std/vector.cpp
new file mode 100644
index 000000000..1e9e7cde1
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/vector.cpp
@@ -0,0 +1,44 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/vector.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/comparable.hpp>
+// #include <laws/functor.hpp>
+#include <laws/orderable.hpp>
+
+#include <vector>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto eqs = hana::make_tuple(
+ std::vector<hana::test::eq<0>>{0}
+ , std::vector<hana::test::eq<0>>{1}
+ , std::vector<hana::test::eq<0>>{2}
+ , std::vector<hana::test::eq<0>>{3}
+ , std::vector<hana::test::eq<0>>{4}
+ );
+
+ // auto eq_values = hana::make_tuple(hana::test::eq<0>{}, hana::test::eq<2>{});
+
+ auto ords = hana::make_tuple(
+ std::vector<hana::test::ord<0>>{0}
+ , std::vector<hana::test::ord<0>>{1}
+ , std::vector<hana::test::ord<0>>{2}
+ , std::vector<hana::test::ord<0>>{3}
+ , std::vector<hana::test::ord<0>>{4}
+ );
+
+ //////////////////////////////////////////////////////////////////////////
+ // Comparable, Orderable, Functor
+ //////////////////////////////////////////////////////////////////////////
+ hana::test::TestComparable<hana::ext::std::vector_tag>{eqs};
+ hana::test::TestOrderable<hana::ext::std::vector_tag>{ords};
+ // hana::test::TestFunctor<hana::ext::std::vector_tag>{eqs, eq_values};
+}