Add max and min to function2D

This commit is contained in:
kradchen
2023-12-04 14:53:46 +08:00
parent 3438121b0c
commit 09d9e52eb0
7 changed files with 1134 additions and 67 deletions

View File

@@ -73,13 +73,16 @@ TEST_F(Function2D_Test, std){
}
TEST_F(Function2D_Test, min) {
float *dataA = new float[3]{1, 2, 3};
float *dataA = new float[3]{1, 2,-9};
float *dataB = new float[9]{2, 3, 3, 2, 2, -1, 3, 3, 3};
float *dataC = new float[1]{1.5};
float *dataE = new float[12]{2, 3, 3, 2, 2, -1, 3, 3, 3,1,-5,7};
auto A = Aurora::Matrix::fromRawData(dataA, 3, 1);
auto B = Aurora::Matrix::fromRawData(dataB, 3, 3);
auto C = Aurora::Matrix::fromRawData(dataC, 1);
auto D = Aurora::Matrix::copyFromRawData(dataA, 1, 3);
auto E = Aurora::Matrix::copyFromRawData(dataE, 4, 3);
Aurora::Matrix ret = Aurora::min(B);
EXPECT_EQ(1, ret.getDimSize(0));
EXPECT_EQ(3, ret.getDimSize(1));
@@ -99,32 +102,64 @@ TEST_F(Function2D_Test, min) {
long r,c;
ret = Aurora::min(A, Aurora::Column,r,c);
EXPECT_FLOAT_EQ(1, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_EQ(0, r);
EXPECT_FLOAT_EQ(-9, ret.getData()[0]);
EXPECT_EQ(2, r);
EXPECT_EQ(0, c);
ret = Aurora::min(D);
EXPECT_EQ(1, ret.getDimSize(0));
EXPECT_EQ(1, ret.getDimSize(1));
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(-9, ret.getData()[0]);
ret = Aurora::min(A, C);
EXPECT_FLOAT_EQ(3, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(1.5, ret.getData()[1]);
EXPECT_FLOAT_EQ(1.5, ret.getData()[2]);
EXPECT_FLOAT_EQ(-9, ret.getData()[2]);
// mat x row-vec
ret = Aurora::min(B,D);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(1, ret.getData()[1]);
EXPECT_FLOAT_EQ(1, ret.getData()[2]);
EXPECT_FLOAT_EQ(-1, ret.getData()[5]);
EXPECT_FLOAT_EQ(-9, ret.getData()[8]);
// row-vec x mat
ret = Aurora::min(D,E);
EXPECT_FLOAT_EQ(12, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(1, ret.getData()[1]);
EXPECT_FLOAT_EQ(-1, ret.getData()[5]);
EXPECT_FLOAT_EQ(-9, ret.getData()[8]);
D.forceReshape(3,1,1);
ret = Aurora::min(D,B);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(2, ret.getData()[1]);
EXPECT_FLOAT_EQ(-9, ret.getData()[5]);
EXPECT_FLOAT_EQ(-9, ret.getData()[8]);
D.forceReshape(3,1,1);
//col-vec x mat
ret = Aurora::min(D,B);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(1, ret.getData()[0]);
EXPECT_FLOAT_EQ(2, ret.getData()[1]);
EXPECT_FLOAT_EQ(-9, ret.getData()[5]);
//mat x col-vec
ret = Aurora::min(E,D);
EXPECT_FLOAT_EQ(0, ret.getDataSize());
}
TEST_F(Function2D_Test, max) {
float *dataA = new float[3]{1, 2, 3};
float *dataC = new float[3]{1, 2, 4};
float *dataB = new float[9]{2, 3, 3, 2, 2, 1, 3, 3, 3};
TEST_F(Function2D_Test, max)
{
float *dataA = new float[3]{1, 2,-9};
float *dataB = new float[9]{2, 3, 3, 2, 2, -1, 3, 3, 3};
float *dataC = new float[1]{1.5};
float *dataE = new float[12]{2, 3, 3, 2, 2, -1, 3, 3, 3,1,-5,7};
auto A = Aurora::Matrix::fromRawData(dataA, 3, 1);
auto B = Aurora::Matrix::fromRawData(dataB, 3, 3);
auto C = Aurora::Matrix::fromRawData(dataC, 3, 1);
auto C = Aurora::Matrix::fromRawData(dataC, 1);
auto D = Aurora::Matrix::copyFromRawData(dataA, 1, 3);
auto E = Aurora::Matrix::copyFromRawData(dataE, 4, 3);
Aurora::Matrix ret = Aurora::max(B);
EXPECT_EQ(1, ret.getDimSize(0));
@@ -145,17 +180,51 @@ TEST_F(Function2D_Test, max) {
long r,c;
ret = Aurora::max(A, Aurora::Column,r,c);
EXPECT_FLOAT_EQ(1, ret.getDataSize());
EXPECT_FLOAT_EQ(3, ret.getData()[0]);
EXPECT_EQ(2, r);
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
EXPECT_EQ(1, r);
EXPECT_EQ(0, c);
auto D = Aurora::Matrix::copyFromRawData(dataA, 1, 3);
ret = Aurora::max(D);
EXPECT_EQ(1, ret.getDimSize(0));
EXPECT_EQ(1, ret.getDimSize(1));
EXPECT_FLOAT_EQ(3, ret.getData()[0]);
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
ret = Aurora::max(A, C);
EXPECT_FLOAT_EQ(3, ret.getDataSize());
EXPECT_FLOAT_EQ(1.5, ret.getData()[0]);
EXPECT_FLOAT_EQ(2, ret.getData()[1]);
EXPECT_FLOAT_EQ(1.5, ret.getData()[2]);
// mat x row-vec
ret = Aurora::max(B,D);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
EXPECT_FLOAT_EQ(3, ret.getData()[1]);
EXPECT_FLOAT_EQ(2, ret.getData()[5]);
EXPECT_FLOAT_EQ(3, ret.getData()[8]);
// row-vec x mat
ret = Aurora::max(D,E);
EXPECT_FLOAT_EQ(12, ret.getDataSize());
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
EXPECT_FLOAT_EQ(3, ret.getData()[1]);
EXPECT_FLOAT_EQ(2, ret.getData()[5]);
EXPECT_FLOAT_EQ(3, ret.getData()[8]);
D.forceReshape(3,1,1);
ret = Aurora::max(D,B);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
EXPECT_FLOAT_EQ(3, ret.getData()[1]);
EXPECT_FLOAT_EQ(-1, ret.getData()[5]);
EXPECT_FLOAT_EQ(3, ret.getData()[8]);
D.forceReshape(3,1,1);
//col-vec x mat
ret = Aurora::max(D,B);
EXPECT_FLOAT_EQ(9, ret.getDataSize());
EXPECT_FLOAT_EQ(2, ret.getData()[0]);
EXPECT_FLOAT_EQ(3, ret.getData()[1]);
EXPECT_FLOAT_EQ(-1, ret.getData()[5]);
//mat x col-vec
ret = Aurora::max(E,D);
EXPECT_FLOAT_EQ(0, ret.getDataSize());
ret = Aurora::max(A,C);
EXPECT_FLOAT_EQ(4, ret.getData()[2]);
}
TEST_F(Function2D_Test, sum) {