Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 1a00262e authored by hhakim's avatar hhakim
Browse files

Fix faust_butterfly/perm_mat tests which were not compatible with real matrices because of FFT.

parent 0b1e8d03
Branches
Tags
No related merge requests found
......@@ -290,6 +290,41 @@ void testCloneTranspConj(MatButterfly<FPP, Cpu>& butterflyMat, const MatSparse<
delete clone;
}
template<typename T>
void butterfly_faust(TransformHelper<T, Cpu>*& F, int log2size);
template<>
void butterfly_faust(TransformHelper<complex<double>, Cpu>*& F, int log2size)
{
F = TransformHelper<complex<double>, Cpu>::fourierFaust(log2size, false);
}
template<>
void butterfly_faust(TransformHelper<complex<float>, Cpu>*& F, int log2size)
{
F = TransformHelper<complex<float>, Cpu>::fourierFaust(log2size, false);
}
template<>
void butterfly_faust(TransformHelper<double, Cpu>*& F, int log2size)
{
auto cF = TransformHelper<complex<double>, Cpu>::fourierFaust(log2size, false);
F = cF->real<double>();
delete cF;
}
template<>
void butterfly_faust(TransformHelper<float, Cpu>*& F, int log2size)
{
auto cF = TransformHelper<complex<float>, Cpu>::fourierFaust(log2size, false);
F = cF->real<float>();
delete cF;
}
int main(int argc, char** argv)
{
int log2size = 4;
......@@ -298,7 +333,10 @@ int main(int argc, char** argv)
std::cout << "log2size: " << log2size << std::endl;
int size = 1 << log2size;
auto F = TransformHelper<FPP, Cpu>::fourierFaust(log2size, false);
TransformHelper<FPP, Cpu> *F;
butterfly_faust(F, log2size);
auto dsButterflyMat = F->get_fact(0);
MatSparse<FPP, Cpu> spButterflyMat(dsButterflyMat);
MatButterfly<FPP, Cpu> butterflyMat(spButterflyMat, /* level */ 0);
......@@ -363,5 +401,6 @@ int main(int argc, char** argv)
testNorm1(butterflyMat, spButterflyMat);
testGemm(butterflyMat, spButterflyMat);
testCloneTranspConj(butterflyMat, spButterflyMat);
delete F;
return EXIT_SUCCESS;
}
......@@ -263,6 +263,42 @@ void testGemm(const MatPerm<FPP, Cpu>& permMat, const MatSparse<FPP, Cpu>& spPe
std::cout << "MatPerm::testGemm OK" << std::endl;
}
template<typename T>
void butterfly_faust(TransformHelper<T, Cpu>*& F, int log2size);
template<>
void butterfly_faust(TransformHelper<complex<double>, Cpu>*& F, int log2size)
{
F = TransformHelper<complex<double>, Cpu>::fourierFaust(log2size, false);
}
template<>
void butterfly_faust(TransformHelper<complex<float>, Cpu>*& F, int log2size)
{
F = TransformHelper<complex<float>, Cpu>::fourierFaust(log2size, false);
}
template<>
void butterfly_faust(TransformHelper<double, Cpu>*& F, int log2size)
{
auto cF = TransformHelper<complex<double>, Cpu>::fourierFaust(log2size, false);
F = cF->real<double>();
delete cF;
}
template<>
void butterfly_faust(TransformHelper<float, Cpu>*& F, int log2size)
{
auto cF = TransformHelper<complex<float>, Cpu>::fourierFaust(log2size, false);
F = cF->real<float>();
delete cF;
}
int main(int argc, char** argv)
{
int log2size = 4;
......@@ -271,7 +307,9 @@ int main(int argc, char** argv)
std::cout << "log2size: " << log2size << std::endl;
int size = 1 << log2size;
auto F = TransformHelper<FPP, Cpu>::fourierFaust(log2size, false);
TransformHelper<FPP, Cpu> *F;
butterfly_faust(F, log2size);
//TODO: use a random permutation matrix
auto dsPermMat = F->get_fact(F->size()-1);
MatSparse<FPP, Cpu> spPermMat(dsPermMat);
......@@ -336,5 +374,6 @@ int main(int argc, char** argv)
testNZinds(permMat, spPermMat);
testNorm1(permMat, spPermMat);
testGemm(permMat, spPermMat);
delete F;
return EXIT_SUCCESS;
}
......@@ -124,6 +124,7 @@ namespace Faust
friend void wht_factors<>(unsigned int n, std::vector<MatGeneric<FPP,Cpu>*>& factors, const bool, const bool);
friend class MatDense<FPP,Cpu>;
friend class MatSparse<std::complex<double>, Cpu>;
friend class MatSparse<std::complex<float>, Cpu>;
friend class MatSparse<double, Cpu>;
friend class MatSparse<float, Cpu>;
//friend void MatDense<FPP,Cpu>::operator+=(const MatSparse<FPP,Cpu>& S);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment