This commit is contained in:
parent
df2a8e5a0b
commit
62b75c01a0
7 changed files with 89 additions and 20 deletions
|
@ -99,6 +99,8 @@ namespace CNORXZ
|
|||
private:
|
||||
Vector<UPos> mB;
|
||||
};
|
||||
|
||||
bool formatIsTrivial(const Vector<SizeT>& f, const Vector<SizeT>& s);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -186,11 +186,10 @@ namespace CNORXZ
|
|||
template <typename MetaT, SizeT S>
|
||||
SIndex<MetaT,S> SIndex<MetaT,S>::reformat(const Vector<SizeT>& f, const Vector<SizeT>& s) const
|
||||
{
|
||||
CXZ_ASSERT(f.size() == 1, "expected format of dimension 1, got " << toString(f));
|
||||
CXZ_ASSERT(s.size() == 1, "expected sizes of dimension 1, got " << toString(s));
|
||||
CXZ_ASSERT(f[0] == 1, "trivial format ([1]), got " << toString(f));
|
||||
CXZ_ASSERT(s[0] == lmax().val(), "expected size to be equal to index size (" <<
|
||||
lmax().val() << "), got " << s[0]);
|
||||
CXZ_ASSERT(f[0]*s[0] == lmax().val(), "got wrong extension: " << f[0]*s[0]
|
||||
<< " vs " << lmax().val());
|
||||
CXZ_ASSERT(CNORXZ::formatIsTrivial(f,s), "format is not trivial: f = " << toString(f)
|
||||
<< ", s = " << toString(s));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -172,16 +172,10 @@ namespace CNORXZ
|
|||
template <typename MetaT>
|
||||
UIndex<MetaT> UIndex<MetaT>::reformat(const Vector<SizeT>& f, const Vector<SizeT>& s) const
|
||||
{
|
||||
// can also get multi dim stuff, but:
|
||||
// * overall extension must match
|
||||
// * f must be trivial
|
||||
/*
|
||||
CXZ_ASSERT(f.size() == 1, "expected format of dimension 1, got " << toString(f));
|
||||
CXZ_ASSERT(s.size() == 1, "expected sizes of dimension 1, got " << toString(s));
|
||||
CXZ_ASSERT(f[0] == 1, "trivial format ([1]), got " << toString(f));
|
||||
CXZ_ASSERT(s[0] == lmax().val(), "expected size to be equal to index size (" <<
|
||||
lmax().val() << "), got " << s[0]);
|
||||
*/
|
||||
CXZ_ASSERT(f[0]*s[0] == lmax().val(), "got wrong extension: " << f[0]*s[0]
|
||||
<< " vs " << lmax().val());
|
||||
CXZ_ASSERT(CNORXZ::formatIsTrivial(f,s), "format is not trivial: f = " << toString(f)
|
||||
<< ", s = " << toString(s));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -146,11 +146,10 @@ namespace CNORXZ
|
|||
|
||||
CIndex CIndex::reformat(const Vector<SizeT>& f, const Vector<SizeT>& s) const
|
||||
{
|
||||
CXZ_ASSERT(f.size() == 1, "expected format of dimension 1, got " << toString(f));
|
||||
CXZ_ASSERT(s.size() == 1, "expected sizes of dimension 1, got " << toString(s));
|
||||
CXZ_ASSERT(f[0] == 1, "trivial format ([1]), got " << toString(f));
|
||||
CXZ_ASSERT(s[0] == lmax().val(), "expected size to be equal to index size (" <<
|
||||
lmax().val() << "), got " << s[0]);
|
||||
CXZ_ASSERT(f[0]*s[0] == lmax().val(), "got wrong extension: " << f[0]*s[0]
|
||||
<< " vs " << lmax().val());
|
||||
CXZ_ASSERT(CNORXZ::formatIsTrivial(f,s), "format is not trivial: f = " << toString(f)
|
||||
<< ", s = " << toString(s));
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,4 +27,18 @@ namespace CNORXZ
|
|||
return mB[i];
|
||||
}
|
||||
|
||||
bool formatIsTrivial(const Vector<SizeT>& f, const Vector<SizeT>& s)
|
||||
{
|
||||
CXZ_ASSERT(f.size() == s.size(), "got vectors with different size ("
|
||||
<< f.size() << " vs " << s.size() << ")");
|
||||
SizeT x = 1;
|
||||
for(SizeT i_ = f.size(); i_ != 0; --i_) {
|
||||
const SizeT i = i_-1;
|
||||
if(f[i] != x) {
|
||||
return false;
|
||||
}
|
||||
x *= s[i];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,11 @@ add_dependencies(rutest cnorxz)
|
|||
target_link_libraries(rutest ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} cnorxz test_lib)
|
||||
add_test(NAME rutest COMMAND rutest)
|
||||
|
||||
add_executable(iftest index_format_test.cc)
|
||||
add_dependencies(iftest cnorxz)
|
||||
target_link_libraries(iftest ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} cnorxz test_lib)
|
||||
add_test(NAME iftest COMMAND iftest)
|
||||
|
||||
add_executable(mautest marray_unit_test.cc)
|
||||
add_dependencies(mautest cnorxz)
|
||||
target_link_libraries(mautest ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} cnorxz test_lib)
|
||||
|
|
56
src/tests/index_format_test.cc
Normal file
56
src/tests/index_format_test.cc
Normal file
|
@ -0,0 +1,56 @@
|
|||
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
//#include "cnorxz.h"
|
||||
#include "ranges/ranges.h"
|
||||
#include "array/array.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
using namespace CNORXZ;
|
||||
|
||||
class Format_Test : public ::testing::Test
|
||||
{
|
||||
protected:
|
||||
|
||||
Format_Test()
|
||||
{
|
||||
mMeta7 = { "These", "are", "test", "strings", "foo", "bar", "baz" };
|
||||
auto sr2 = SRangeFactory<SizeT,2>(Arr<SizeT,2>{0,1}).create();
|
||||
auto ur3x = std::dynamic_pointer_cast<URange<Real>>
|
||||
(URangeFactory<Real>(Vector<Real>{3.141,1.6,2.7}).create());
|
||||
auto cr5x = std::dynamic_pointer_cast<CRange>(CRangeFactory(5).create());
|
||||
auto ur7x = std::dynamic_pointer_cast<URange<String>>
|
||||
(URangeFactory<String>(mMeta7).create());
|
||||
auto mr105 = mrange(ur3x,ur7x,cr5x);
|
||||
auto cr11 = CRangeFactory(11).create();
|
||||
auto cr13 = CRangeFactory(13).create();
|
||||
mRange = yrange({cr11,mr105,cr13,sr2});
|
||||
}
|
||||
|
||||
Vector<String> mMeta7;
|
||||
RangePtr mRange;
|
||||
};
|
||||
|
||||
TEST_F(Format_Test, RangeCheck)
|
||||
{
|
||||
EXPECT_EQ(mRange->size(), 2*105*11*13);
|
||||
auto yi = mRange->begin();
|
||||
EXPECT_EQ(yi.lmax().val(), mRange->size());
|
||||
EXPECT_EQ(yi.pmax().val(), mRange->size());
|
||||
}
|
||||
|
||||
TEST_F(Format_Test, CFormat)
|
||||
{
|
||||
CIndex ci(mRange);
|
||||
EXPECT_EQ(ci.lmax().val(), mRange->size());
|
||||
auto yi = mRange->begin();
|
||||
auto rfi = ci.reformat( yi.deepFormat(), yi.deepMax() );
|
||||
VCHECK(toString(yi.deepFormat()));
|
||||
VCHECK(toString(yi.deepMax()));
|
||||
EXPECT_EQ(rfi.lmax().val(), mRange->size());
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue