xref: /llvm-project/libc/test/src/__support/CPP/integer_sequence_test.cpp (revision b6bc9d72f65a5086f310f321e969d96e9a559e75)
162914546SAlex Brachet //===-- Unittests for IntegerSequence -------------------------------------===//
262914546SAlex Brachet //
362914546SAlex Brachet // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
462914546SAlex Brachet // See https://llvm.org/LICENSE.txt for license information.
562914546SAlex Brachet // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
662914546SAlex Brachet //
762914546SAlex Brachet //===----------------------------------------------------------------------===//
862914546SAlex Brachet 
949eb5806SGuillaume Chatelet #include "src/__support/CPP/utility.h"
10af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
1162914546SAlex Brachet 
12*b6bc9d72SGuillaume Chatelet using namespace LIBC_NAMESPACE::cpp;
1362914546SAlex Brachet 
TEST(LlvmLibcIntegerSequencetTest,Basic)1462914546SAlex Brachet TEST(LlvmLibcIntegerSequencetTest, Basic) {
1549eb5806SGuillaume Chatelet   EXPECT_TRUE(
1649eb5806SGuillaume Chatelet       (is_same_v<integer_sequence<int>, make_integer_sequence<int, 0>>));
1749eb5806SGuillaume Chatelet   using ISeq = integer_sequence<int, 0, 1, 2, 3>;
1849eb5806SGuillaume Chatelet   EXPECT_TRUE((is_same_v<ISeq, make_integer_sequence<int, 4>>));
1949eb5806SGuillaume Chatelet   using LSeq = integer_sequence<long, 0, 1, 2, 3>;
2049eb5806SGuillaume Chatelet   EXPECT_TRUE((is_same_v<LSeq, make_integer_sequence<long, 4>>));
2149eb5806SGuillaume Chatelet   using ULLSeq = integer_sequence<unsigned long long, 0ull, 1ull, 2ull, 3ull>;
2249eb5806SGuillaume Chatelet   EXPECT_TRUE(
2349eb5806SGuillaume Chatelet       (is_same_v<ULLSeq, make_integer_sequence<unsigned long long, 4>>));
2462914546SAlex Brachet }
2562914546SAlex Brachet 
checkArray(integer_sequence<T,Ts...> seq)2649eb5806SGuillaume Chatelet template <typename T, T... Ts> bool checkArray(integer_sequence<T, Ts...> seq) {
2762914546SAlex Brachet   T arr[sizeof...(Ts)]{Ts...};
2862914546SAlex Brachet 
2962914546SAlex Brachet   for (T i = 0; i < static_cast<T>(sizeof...(Ts)); i++)
3062914546SAlex Brachet     if (arr[i] != i)
3162914546SAlex Brachet       return false;
3262914546SAlex Brachet 
3362914546SAlex Brachet   return true;
3462914546SAlex Brachet }
3562914546SAlex Brachet 
TEST(LlvmLibcIntegerSequencetTest,Many)3662914546SAlex Brachet TEST(LlvmLibcIntegerSequencetTest, Many) {
3749eb5806SGuillaume Chatelet   EXPECT_TRUE(checkArray(make_integer_sequence<int, 100>{}));
3862914546SAlex Brachet }
39