33
44#include < Verify.h>
55
6+ #include < cstdint>
67#include < limits>
78#include < map>
89#include < ostream>
@@ -24,6 +25,7 @@ struct HLSLBool_t {
2425 HLSLBool_t () : Val(0 ) {}
2526 HLSLBool_t (int32_t Val) : Val(Val) {}
2627 HLSLBool_t (bool Val) : Val(Val) {}
28+ explicit HLSLBool_t (float Val) : Val(Val) {}
2729
2830 bool operator ==(const HLSLBool_t &Other) const {
2931 return static_cast <bool >(Val) == static_cast <bool >(Other.Val );
@@ -238,12 +240,15 @@ enum class InputSet {
238240#include " LongVectorOps.def"
239241};
240242
241- template <typename T> const std::vector<T> &getInputSet (InputSet InputSet) {
243+ template <typename T>
244+ const std::vector<T> &getInputSet (InputSet InputSet, size_t SizeToTest) {
242245 static_assert (false , " No InputSet for this type" );
243246}
244247
245248#define BEGIN_INPUT_SETS (TYPE ) \
246- template <> const std::vector<TYPE> &getInputSet<TYPE>(InputSet InputSet) { \
249+ template <> \
250+ const std::vector<TYPE> &getInputSet<TYPE>(InputSet InputSet, \
251+ size_t SizeToTest) { \
247252 using T = TYPE; \
248253 switch (InputSet) {
249254
@@ -285,6 +290,9 @@ INPUT_SET(InputSet::Bitwise, std::numeric_limits<int16_t>::min(), -1, 0, 1, 3,
285290 6 , 9 , 0x5555 , static_cast <int16_t >(0xAAAA ),
286291 std::numeric_limits<int16_t >::max());
287292INPUT_SET (InputSet::SelectCond, 0 , 1 );
293+ INPUT_SET (InputSet::DynamicIndexes, 0 , (int16_t )(SizeToTest - 1 ), 1,
294+ (int16_t )(SizeToTest - 2 ), (int16_t )(SizeToTest / 2 ),
295+ (int16_t )(SizeToTest / 2 + 1 ));
288296END_INPUT_SETS ()
289297
290298BEGIN_INPUT_SETS(int32_t )
@@ -298,6 +306,10 @@ INPUT_SET(InputSet::Bitwise, std::numeric_limits<int32_t>::min(), -1, 0, 1, 3,
298306 6, 9, 0x55555555, static_cast<int32_t>(0xAAAAAAAA ),
299307 std::numeric_limits<int32_t>::max());
300308INPUT_SET (InputSet::SelectCond, 0 , 1 );
309+ // {0, VectorSize - 1, 1, VectorSize - 2, VectorSize / 2, VectorSize / 2 + 1};
310+ INPUT_SET (InputSet::DynamicIndexes, 0 , (int32_t )(SizeToTest - 1 ), 1,
311+ (int32_t )(SizeToTest - 2 ), (int32_t )(SizeToTest / 2 ),
312+ (int32_t )(SizeToTest / 2 + 1 ));
301313END_INPUT_SETS ()
302314
303315BEGIN_INPUT_SETS(int64_t )
@@ -311,6 +323,9 @@ INPUT_SET(InputSet::Bitwise, std::numeric_limits<int64_t>::min(), -1, 0, 1, 3,
311323 6, 9, 0x5555555555555555LL, 0xAAAAAAAAAAAAAAAALL,
312324 std::numeric_limits<int64_t>::max());
313325INPUT_SET (InputSet::SelectCond, 0 , 1 );
326+ INPUT_SET (InputSet::DynamicIndexes, 0 , (int64_t )(SizeToTest - 1 ), 1,
327+ (int64_t )(SizeToTest - 2 ), (int64_t )(SizeToTest / 2 ),
328+ (int64_t )(SizeToTest / 2 + 1 ));
314329END_INPUT_SETS ()
315330
316331BEGIN_INPUT_SETS(uint16_t )
@@ -321,6 +336,9 @@ INPUT_SET(InputSet::BitShiftRhs, 1, 6, 3, 0, 9, 3, 12, 13, 14, 15);
321336INPUT_SET (InputSet::Bitwise, 0 , 1 , 3 , 6 , 9 , 0x5555 , 0xAAAA , 0x8000 , 127 ,
322337 std::numeric_limits<uint16_t >::max());
323338INPUT_SET (InputSet::SelectCond, 0 , 1 );
339+ INPUT_SET (InputSet::DynamicIndexes, 0 , (uint16_t )(SizeToTest - 1 ), 1,
340+ (uint16_t )(SizeToTest - 2 ), (uint16_t )(SizeToTest / 2 ),
341+ (uint16_t )(SizeToTest / 2 + 1 ));
324342END_INPUT_SETS ()
325343
326344BEGIN_INPUT_SETS(uint32_t )
@@ -331,6 +349,9 @@ INPUT_SET(InputSet::BitShiftRhs, 1, 6, 3, 0, 9, 3, 30, 31, 32);
331349INPUT_SET (InputSet::Bitwise, 0 , 1 , 3 , 6 , 9 , 0x55555555 , 0xAAAAAAAA , 0x80000000 ,
332350 127 , std::numeric_limits<uint32_t >::max());
333351INPUT_SET (InputSet::SelectCond, 0 , 1 );
352+ INPUT_SET (InputSet::DynamicIndexes, 0 , (uint32_t )(SizeToTest - 1 ), 1,
353+ (uint32_t )(SizeToTest - 2 ), (uint32_t )(SizeToTest / 2 ),
354+ (uint32_t )(SizeToTest / 2 + 1 ));
334355END_INPUT_SETS ()
335356
336357BEGIN_INPUT_SETS(uint64_t )
@@ -342,6 +363,9 @@ INPUT_SET(InputSet::Bitwise, 0, 1, 3, 6, 9, 0x5555555555555555,
342363 0xAAAAAAAAAAAAAAAA , 0x8000000000000000 , 127 ,
343364 std::numeric_limits<uint64_t >::max());
344365INPUT_SET (InputSet::SelectCond, 0 , 1 );
366+ INPUT_SET (InputSet::DynamicIndexes, 0 , (uint64_t )(SizeToTest - 1 ), 1,
367+ (uint64_t )(SizeToTest - 2 ), (uint64_t )(SizeToTest / 2 ),
368+ (uint64_t )(SizeToTest / 2 + 1 ));
345369END_INPUT_SETS ()
346370
347371BEGIN_INPUT_SETS(HLSLHalf_t)
@@ -372,6 +396,9 @@ INPUT_SET(InputSet::FloatSpecial, std::numeric_limits<float>::infinity(),
372396 -std::numeric_limits<float>::max(),
373397 std::numeric_limits<float>::denorm_min(),
374398 std::numeric_limits<float>::denorm_min() * 10.0, 1.0 / 3.0);
399+ INPUT_SET (InputSet::DynamicIndexes, 0.0 , (float )(SizeToTest - 1 ), 1.0,
400+ (float )(SizeToTest - 2 ), (float )(SizeToTest / 2 ),
401+ (float )(SizeToTest / 2 + 1 ));
375402END_INPUT_SETS ()
376403
377404BEGIN_INPUT_SETS(float )
@@ -399,6 +426,9 @@ INPUT_SET(InputSet::FloatSpecial, std::numeric_limits<float>::infinity(),
399426 -std::numeric_limits<float>::max(),
400427 std::numeric_limits<float>::denorm_min(),
401428 std::numeric_limits<float>::denorm_min() * 10.0f, 1.0f / 3.0f);
429+ INPUT_SET (InputSet::DynamicIndexes, 0.0 , (float )(SizeToTest - 1 ), 1.0,
430+ (float )(SizeToTest - 2 ), (float )(SizeToTest / 2 ),
431+ (float )(SizeToTest / 2 + 1 ));
402432END_INPUT_SETS ()
403433
404434BEGIN_INPUT_SETS(double )
@@ -417,6 +447,9 @@ INPUT_SET(InputSet::SplitDouble, 0.0, -1.0, 1.0, -1.0, 12345678.87654321, -1.0,
417447INPUT_SET (InputSet::Positive, 1.0 , 1.0 , 65535.0 , 0.01 , 5531.0 , 0.01 , 1.0 , 0.01 ,
418448 331.2330 , 3250.01 );
419449INPUT_SET (InputSet::SelectCond, 0.0 , 1.0 );
450+ INPUT_SET (InputSet::DynamicIndexes, 0.0 , (double )(SizeToTest - 1 ), 1.0,
451+ (double )(SizeToTest - 2 ), (double )(SizeToTest / 2 ),
452+ (double )(SizeToTest / 2 + 1 ));
420453END_INPUT_SETS ()
421454
422455#undef BEGIN_INPUT_SETS
0 commit comments