159d8c607SArgyrios Kyrtzidis //===- llvm/unittest/ADT/PackedVectorTest.cpp - PackedVector tests --------===//
259d8c607SArgyrios Kyrtzidis //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
659d8c607SArgyrios Kyrtzidis //
759d8c607SArgyrios Kyrtzidis //===----------------------------------------------------------------------===//
859d8c607SArgyrios Kyrtzidis 
959d8c607SArgyrios Kyrtzidis // BitVectorTest tests fail on PowerPC for unknown reasons, so disable this
1059d8c607SArgyrios Kyrtzidis // as well since it depends on a BitVector.
1105b5a46eSRafael Espindola #ifndef __ppc__
1259d8c607SArgyrios Kyrtzidis 
1359d8c607SArgyrios Kyrtzidis #include "llvm/ADT/PackedVector.h"
1459d8c607SArgyrios Kyrtzidis #include "gtest/gtest.h"
1559d8c607SArgyrios Kyrtzidis 
1659d8c607SArgyrios Kyrtzidis using namespace llvm;
1759d8c607SArgyrios Kyrtzidis 
1859d8c607SArgyrios Kyrtzidis namespace {
1959d8c607SArgyrios Kyrtzidis 
TEST(PackedVectorTest,Operation)2059d8c607SArgyrios Kyrtzidis TEST(PackedVectorTest, Operation) {
2159d8c607SArgyrios Kyrtzidis   PackedVector<unsigned, 2> Vec;
2259d8c607SArgyrios Kyrtzidis   EXPECT_EQ(0U, Vec.size());
2359d8c607SArgyrios Kyrtzidis   EXPECT_TRUE(Vec.empty());
2459d8c607SArgyrios Kyrtzidis 
2559d8c607SArgyrios Kyrtzidis   Vec.resize(5);
2659d8c607SArgyrios Kyrtzidis   EXPECT_EQ(5U, Vec.size());
2759d8c607SArgyrios Kyrtzidis   EXPECT_FALSE(Vec.empty());
2859d8c607SArgyrios Kyrtzidis 
2959d8c607SArgyrios Kyrtzidis   Vec.resize(11);
3059d8c607SArgyrios Kyrtzidis   EXPECT_EQ(11U, Vec.size());
3159d8c607SArgyrios Kyrtzidis   EXPECT_FALSE(Vec.empty());
3259d8c607SArgyrios Kyrtzidis 
3359d8c607SArgyrios Kyrtzidis   PackedVector<unsigned, 2> Vec2(3);
3459d8c607SArgyrios Kyrtzidis   EXPECT_EQ(3U, Vec2.size());
3559d8c607SArgyrios Kyrtzidis   EXPECT_FALSE(Vec2.empty());
3659d8c607SArgyrios Kyrtzidis 
3759d8c607SArgyrios Kyrtzidis   Vec.clear();
3859d8c607SArgyrios Kyrtzidis   EXPECT_EQ(0U, Vec.size());
3959d8c607SArgyrios Kyrtzidis   EXPECT_TRUE(Vec.empty());
4059d8c607SArgyrios Kyrtzidis 
4159d8c607SArgyrios Kyrtzidis   Vec.push_back(2);
4259d8c607SArgyrios Kyrtzidis   Vec.push_back(0);
4359d8c607SArgyrios Kyrtzidis   Vec.push_back(1);
4459d8c607SArgyrios Kyrtzidis   Vec.push_back(3);
4559d8c607SArgyrios Kyrtzidis 
4659d8c607SArgyrios Kyrtzidis   EXPECT_EQ(2U, Vec[0]);
4759d8c607SArgyrios Kyrtzidis   EXPECT_EQ(0U, Vec[1]);
4859d8c607SArgyrios Kyrtzidis   EXPECT_EQ(1U, Vec[2]);
4959d8c607SArgyrios Kyrtzidis   EXPECT_EQ(3U, Vec[3]);
5059d8c607SArgyrios Kyrtzidis 
5159d8c607SArgyrios Kyrtzidis   EXPECT_FALSE(Vec == Vec2);
5259d8c607SArgyrios Kyrtzidis   EXPECT_TRUE(Vec != Vec2);
5359d8c607SArgyrios Kyrtzidis 
5459d8c607SArgyrios Kyrtzidis   Vec = Vec2;
5559d8c607SArgyrios Kyrtzidis   EXPECT_TRUE(Vec == Vec2);
5659d8c607SArgyrios Kyrtzidis   EXPECT_FALSE(Vec != Vec2);
5759d8c607SArgyrios Kyrtzidis 
5859d8c607SArgyrios Kyrtzidis   Vec[1] = 1;
5959d8c607SArgyrios Kyrtzidis   Vec2[1] = 2;
6059d8c607SArgyrios Kyrtzidis   Vec |= Vec2;
6159d8c607SArgyrios Kyrtzidis   EXPECT_EQ(3U, Vec[1]);
6259d8c607SArgyrios Kyrtzidis }
6359d8c607SArgyrios Kyrtzidis 
645d525568SArgyrios Kyrtzidis #ifdef EXPECT_DEBUG_DEATH
655d525568SArgyrios Kyrtzidis 
TEST(PackedVectorTest,UnsignedValues)6659d8c607SArgyrios Kyrtzidis TEST(PackedVectorTest, UnsignedValues) {
6759d8c607SArgyrios Kyrtzidis   PackedVector<unsigned, 2> Vec(1);
6859d8c607SArgyrios Kyrtzidis   Vec[0] = 0;
6959d8c607SArgyrios Kyrtzidis   Vec[0] = 1;
7059d8c607SArgyrios Kyrtzidis   Vec[0] = 2;
7159d8c607SArgyrios Kyrtzidis   Vec[0] = 3;
7259d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = 4, "value is too big");
7359d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = -1, "value is too big");
7459d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = 0x100, "value is too big");
7559d8c607SArgyrios Kyrtzidis 
7659d8c607SArgyrios Kyrtzidis   PackedVector<unsigned, 3> Vec2(1);
7759d8c607SArgyrios Kyrtzidis   Vec2[0] = 0;
7859d8c607SArgyrios Kyrtzidis   Vec2[0] = 7;
7959d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = 8, "value is too big");
8059d8c607SArgyrios Kyrtzidis }
8159d8c607SArgyrios Kyrtzidis 
TEST(PackedVectorTest,SignedValues)8259d8c607SArgyrios Kyrtzidis TEST(PackedVectorTest, SignedValues) {
8359d8c607SArgyrios Kyrtzidis   PackedVector<signed, 2> Vec(1);
8459d8c607SArgyrios Kyrtzidis   Vec[0] = -2;
8559d8c607SArgyrios Kyrtzidis   Vec[0] = -1;
8659d8c607SArgyrios Kyrtzidis   Vec[0] = 0;
8759d8c607SArgyrios Kyrtzidis   Vec[0] = 1;
8859d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = -3, "value is too big");
8959d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = 2, "value is too big");
9059d8c607SArgyrios Kyrtzidis 
9159d8c607SArgyrios Kyrtzidis   PackedVector<signed, 3> Vec2(1);
9259d8c607SArgyrios Kyrtzidis   Vec2[0] = -4;
9359d8c607SArgyrios Kyrtzidis   Vec2[0] = 3;
9459d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = -5, "value is too big");
9559d8c607SArgyrios Kyrtzidis   EXPECT_DEBUG_DEATH(Vec[0] = 4, "value is too big");
9659d8c607SArgyrios Kyrtzidis }
9759d8c607SArgyrios Kyrtzidis 
985d525568SArgyrios Kyrtzidis #endif
995d525568SArgyrios Kyrtzidis 
10059d8c607SArgyrios Kyrtzidis }
10159d8c607SArgyrios Kyrtzidis 
10259d8c607SArgyrios Kyrtzidis #endif
103