brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · bd1b953 Raw
106 lines · cpp
1//===-- flang/unittests/Common/FastIntSetTest.cpp ---------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "gtest/gtest.h"10#include "flang/Common/fast-int-set.h"11#include <optional>12 13TEST(FastIntSetTests, Sanity) {14  static constexpr int N{100};15  Fortran::common::FastIntSet<N> set;16 17  ASSERT_FALSE(set.IsValidValue(-1));18  ASSERT_TRUE(set.IsValidValue(0));19  ASSERT_TRUE(set.IsValidValue(N - 1));20  ASSERT_FALSE(set.IsValidValue(N));21  ASSERT_TRUE(set.IsEmpty());22  ASSERT_EQ(set.size(), 0);23  ASSERT_FALSE(set.Contains(0));24  ASSERT_FALSE(set.Contains(N - 1));25 26  ASSERT_TRUE(set.Add(0));27  ASSERT_FALSE(set.IsEmpty());28  ASSERT_EQ(set.size(), 1);29  ASSERT_TRUE(set.Contains(0));30 31  ASSERT_TRUE(set.Add(0)); // duplicate32  ASSERT_EQ(set.size(), 1);33  ASSERT_TRUE(set.Contains(0));34 35  ASSERT_TRUE(set.Remove(0));36  ASSERT_TRUE(set.IsEmpty());37  ASSERT_EQ(set.size(), 0);38  ASSERT_FALSE(set.Contains(0));39 40  ASSERT_FALSE(set.Add(N));41  ASSERT_TRUE(set.IsEmpty());42  ASSERT_EQ(set.size(), 0);43  ASSERT_FALSE(set.Contains(N));44 45  ASSERT_TRUE(set.Add(N - 1));46  ASSERT_FALSE(set.IsEmpty());47  ASSERT_EQ(set.size(), 1);48  ASSERT_TRUE(set.Contains(N - 1));49 50  std::optional<int> x;51  x = set.PopValue();52  ASSERT_TRUE(x.has_value());53  ASSERT_EQ(*x, N - 1);54  ASSERT_TRUE(set.IsEmpty());55  ASSERT_EQ(set.size(), 0);56 57  x = set.PopValue();58  ASSERT_FALSE(x.has_value());59 60  for (int j{0}; j < N; ++j) {61    ASSERT_TRUE(set.Add(j)) << j;62  }63  ASSERT_FALSE(set.IsEmpty());64  ASSERT_EQ(set.size(), N);65  for (int j{0}; j < N; ++j) {66    ASSERT_TRUE(set.Contains(j)) << j;67  }68 69  for (int j{0}; j < N; ++j) {70    ASSERT_TRUE(set.Remove(j)) << j;71    ASSERT_EQ(set.size(), N - j - 1) << j;72    ASSERT_FALSE(set.Contains(j)) << j;73  }74 75  ASSERT_TRUE(set.IsEmpty());76  ASSERT_EQ(set.size(), 0);77 78  for (int j{N - 1}; j >= 0; --j) {79    ASSERT_TRUE(set.Add(j)) << j;80  }81  for (int j{0}; j < N; j++) {82    x = set.PopValue();83    ASSERT_TRUE(x.has_value());84    ASSERT_EQ(*x, j) << j;85  }86  ASSERT_TRUE(set.IsEmpty());87  ASSERT_EQ(set.size(), 0);88 89  for (int j{0}; j < N; j++) {90    ASSERT_TRUE(set.Add(j)) << j;91  }92  ASSERT_FALSE(set.IsEmpty());93  ASSERT_EQ(set.size(), N);94  for (int j{0}; j < N; j += 2) {95    ASSERT_TRUE(set.Remove(j)) << j;96  }97  ASSERT_FALSE(set.IsEmpty());98  ASSERT_EQ(set.size(), N / 2);99  for (int j{0}; j < N; j++) {100    ASSERT_EQ(set.Contains(j), (j & 1) == 1);101  }102 103  set.Clear();104  ASSERT_TRUE(set.IsEmpty());105}106