ulfben icon

submatrix second version

ulfben | PRO | 02/05/23 11:18:20 AM UTC (Edited) | 0 ⭐ | 1762 👁️ | Never ⏰ | []
C++ |

1.96 KB

|

None

|

0 👍

/

0 👎

//submatrix second version
 
constexpr value_type operator[](size_type i) const noexcept {
    assert(i < size());
    return _data[i];
}
constexpr reference operator[](size_type i) noexcept {
    assert(i < size());
    return _data[i];
}
 
constexpr size_type index_to_column(size_type index) const noexcept {
    assert(index < size());
    return index % columns();
}
constexpr size_type index_to_row(size_type index) const noexcept {
    assert(index < size());
    return index / columns();
}
        
constexpr auto submatrix(size_type remove_row, size_type remove_column) const noexcept {
    assert(remove_row < rows() && remove_column < columns() && "submatrix: row and column to remove must be inside the original matrix.");
    Matrix<ROWS - 1, COLUMNS - 1> r;          
    uint8_t ri = 0;
    for (size_type i = 0; i < size(); i++) {
        if(index_to_row(i) != remove_row && index_to_column(i) != remove_column) {
            r[ri++] = _data[i];
        }
    }     
    return r;
}
 
TEST(Matrix, getRowFromIndex) {
    const Matrix3 a{
        1,5,0,
        -3,2,7,
        0,6,-3
    };    
    EXPECT_EQ(0, a.index_to_row(0)); 
    EXPECT_EQ(0, a.index_to_row(2)); 
    EXPECT_EQ(2, a.index_to_row(6)); 
    EXPECT_EQ(2, a.index_to_row(8));     
}
 
TEST(Matrix, getColumnFromIndex) {
    const Matrix3 a{
        1,5,0,
        -3,2,7,
        0,6,-3
    };    
    EXPECT_EQ(0, a.index_to_column(0)); 
    EXPECT_EQ(1, a.index_to_column(1)); 
    EXPECT_EQ(2, a.index_to_column(2)); 
    EXPECT_EQ(0, a.index_to_column(6)); 
    EXPECT_EQ(1, a.index_to_column(7)); 
    EXPECT_EQ(2, a.index_to_column(8)); 
}
 
TEST(Matrix, submatrixOf3x3is2x2) {
    const Matrix3 a{
        1,5,0,
        -3,2,7,
        0,6,-3
    };
    const Matrix2 truth{
        -3, 2,
        0, 6
    };
    const auto b = submatrix(a, 0, 2);
    const auto c = a.submatrix(0, 2);
    EXPECT_TRUE(b == truth);
    EXPECT_TRUE(c == truth);
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎