10f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//===- llvm/unittest/ADT/PackedVectorTest.cpp - PackedVector tests --------===//
20f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//
30f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//                     The LLVM Compiler Infrastructure
40f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//
50f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source
60f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis// License. See LICENSE.TXT for details.
70f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//
80f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
90f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
100f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis// BitVectorTest tests fail on PowerPC for unknown reasons, so disable this
110f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis// as well since it depends on a BitVector.
120f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis#ifndef __ppc__
130f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
140f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis#include "llvm/ADT/PackedVector.h"
150f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis#include "gtest/gtest.h"
160f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
170f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidisusing namespace llvm;
180f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
190f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidisnamespace {
200f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
210f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios KyrtzidisTEST(PackedVectorTest, Operation) {
220f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<unsigned, 2> Vec;
230f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec.size());
240f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_TRUE(Vec.empty());
250f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
260f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.resize(5);
270f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(5U, Vec.size());
280f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec.empty());
290f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
300f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.resize(11);
310f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(11U, Vec.size());
320f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec.empty());
330f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
340f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<unsigned, 2> Vec2(3);
350f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(3U, Vec2.size());
360f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec2.empty());
370f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
380f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.clear();
390f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec.size());
400f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_TRUE(Vec.empty());
410f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
420f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.push_back(2);
430f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.push_back(0);
440f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.push_back(1);
450f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec.push_back(3);
460f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
470f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(2U, Vec[0]);
480f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec[1]);
490f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(1U, Vec[2]);
500f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(3U, Vec[3]);
510f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
520f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec == Vec2);
530f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_TRUE(Vec != Vec2);
540f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
550f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2.swap(Vec);
560f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(3U, Vec.size());
570f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec.empty());
580f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec[0]);
590f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec[1]);
600f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec[2]);
610f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
620f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(2U, Vec2[0]);
630f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(0U, Vec2[1]);
640f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(1U, Vec2[2]);
650f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(3U, Vec2[3]);
660f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
670f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec = Vec2;
680f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_TRUE(Vec == Vec2);
690f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_FALSE(Vec != Vec2);
700f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
710f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[1] = 1;
720f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2[1] = 2;
730f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec |= Vec2;
740f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_EQ(3U, Vec[1]);
750f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis}
760f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
775cf34feb6775e6528c728e8d0c359aa68561a373Argyrios Kyrtzidis#ifdef EXPECT_DEBUG_DEATH
785cf34feb6775e6528c728e8d0c359aa68561a373Argyrios Kyrtzidis
790f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios KyrtzidisTEST(PackedVectorTest, UnsignedValues) {
800f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<unsigned, 2> Vec(1);
810f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 0;
820f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 1;
830f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 2;
840f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 3;
850f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = 4, "value is too big");
860f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = -1, "value is too big");
870f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = 0x100, "value is too big");
880f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
890f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<unsigned, 3> Vec2(1);
900f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2[0] = 0;
910f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2[0] = 7;
920f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = 8, "value is too big");
930f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis}
940f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
950f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios KyrtzidisTEST(PackedVectorTest, SignedValues) {
960f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<signed, 2> Vec(1);
970f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = -2;
980f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = -1;
990f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 0;
1000f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec[0] = 1;
1010f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = -3, "value is too big");
1020f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = 2, "value is too big");
1030f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
1040f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  PackedVector<signed, 3> Vec2(1);
1050f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2[0] = -4;
1060f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  Vec2[0] = 3;
1070f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = -5, "value is too big");
1080f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis  EXPECT_DEBUG_DEATH(Vec[0] = 4, "value is too big");
1090f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis}
1100f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
1115cf34feb6775e6528c728e8d0c359aa68561a373Argyrios Kyrtzidis#endif
1125cf34feb6775e6528c728e8d0c359aa68561a373Argyrios Kyrtzidis
1130f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis}
1140f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis
1150f5b687075181dbbb3ea2d177d0f66eb57df71c6Argyrios Kyrtzidis#endif
116