From e83cea1b48e91a04febf708a5d6ee044c4a8ed26 Mon Sep 17 00:00:00 2001 From: conrad Date: Tue, 12 Nov 2024 17:07:20 +1000 Subject: [PATCH] update to .index_min() --- tests2/fn_min.cpp | 162 ++++++++++++++++++++++++---------------------- 1 file changed, 83 insertions(+), 79 deletions(-) diff --git a/tests2/fn_min.cpp b/tests2/fn_min.cpp index a948fd4f..15673499 100644 --- a/tests2/fn_min.cpp +++ b/tests2/fn_min.cpp @@ -23,42 +23,40 @@ using namespace arma; TEST_CASE("fn_min_weird_operation") { - mat a(10, 10); - mat b(25, 10); - a.randn(); - b.randn(); + mat a(10, 10, fill::randn); + mat b(25, 10, fill::randn); mat output = a * b.t(); - uword real_min; - uword operation_min; + uword real_min = output.index_min(); + uword operation_min = (a * b.t()).index_min(); - const double mval = output.min(real_min); - const double other_mval = (a * b.t()).min(operation_min); + const double mval = output.min(); + const double other_mval = (a * b.t()).min(); - REQUIRE( real_min == operation_min ); - REQUIRE( mval == Approx(other_mval) ); + REQUIRE( real_min == operation_min ); + REQUIRE( mval == Approx(other_mval) ); + REQUIRE( mval == Approx(output(real_min)) ); } TEST_CASE("fn_min_weird_sparse_operation") { - sp_mat a(10, 10); - sp_mat b(25, 10); - a.sprandn(10, 10, 0.3); - b.sprandn(25, 10, 0.3); + sp_mat a; a.sprandn(10, 10, 0.3); + sp_mat b; b.sprandn(25, 10, 0.3); sp_mat output = a * b.t(); - uword real_min; - uword operation_min; + uword real_min = output.index_min(); + uword operation_min = (a * b.t()).index_min(); - const double mval = output.min(real_min); - const double other_mval = (a * b.t()).min(operation_min); + const double mval = output.min(); + const double other_mval = (a * b.t()).min(); - REQUIRE( real_min == operation_min ); - REQUIRE( mval == Approx(other_mval) ); + REQUIRE( real_min == operation_min ); + REQUIRE( mval == Approx(other_mval) ); + REQUIRE( mval == Approx(output(real_min)) ); } @@ -73,15 +71,15 @@ TEST_CASE("fn_min_sp_subview_test") sp_mat x; x.sprandn(r, r, 0.3); - uword x_min; - uword x_subview_min1; - uword x_subview_min2; - uword x_subview_min3; + uword x_min = x.index_min(); + uword x_subview_min1 = x.submat(0, 0, r - 1, r - 1).index_min(); + uword x_subview_min2 = x.cols(0, r - 1).index_min(); + uword x_subview_min3 = x.rows(0, r - 1).index_min(); - const double mval = x.min(x_min); - const double mval1 = x.submat(0, 0, r - 1, r - 1).min(x_subview_min1); - const double mval2 = x.cols(0, r - 1).min(x_subview_min2); - const double mval3 = x.rows(0, r - 1).min(x_subview_min3); + const double mval = x.min(); + const double mval1 = x.submat(0, 0, r - 1, r - 1).min(); + const double mval2 = x.cols(0, r - 1).min(); + const double mval3 = x.rows(0, r - 1).min(); if (mval != 0.0) { @@ -92,6 +90,8 @@ TEST_CASE("fn_min_sp_subview_test") REQUIRE( mval == Approx(mval1) ); REQUIRE( mval == Approx(mval2) ); REQUIRE( mval == Approx(mval3) ); + + REQUIRE( mval == Approx(x(x_min)) ); } } } @@ -105,13 +105,13 @@ TEST_CASE("fn_min_spsubview_col_test") sp_vec x; x.sprandn(r, 1, 0.3); - uword x_min; - uword x_subview_min1; - uword x_subview_min2; + uword x_min = x.index_min(); + uword x_subview_min1 = x.submat(0, 0, r - 1, 0).index_min(); + uword x_subview_min2 = x.rows(0, r - 1).index_min(); - const double mval = x.min(x_min); - const double mval1 = x.submat(0, 0, r - 1, 0).min(x_subview_min1); - const double mval2 = x.rows(0, r - 1).min(x_subview_min2); + const double mval = x.min(); + const double mval1 = x.submat(0, 0, r - 1, 0).min(); + const double mval2 = x.rows(0, r - 1).min(); if (mval != 0.0) { @@ -120,6 +120,8 @@ TEST_CASE("fn_min_spsubview_col_test") REQUIRE( mval == Approx(mval1) ); REQUIRE( mval == Approx(mval2) ); + + REQUIRE( mval == Approx(x(x_min)) ); } } } @@ -133,13 +135,13 @@ TEST_CASE("fn_min_spsubview_row_min_test") sp_rowvec x; x.sprandn(1, r, 0.3); - uword x_min; - uword x_subview_min1; - uword x_subview_min2; + uword x_min = x.index_min(); + uword x_subview_min1 = x.submat(0, 0, 0, r - 1).index_min(); + uword x_subview_min2 = x.cols(0, r - 1).index_min(); - const double mval = x.min(x_min); - const double mval1 = x.submat(0, 0, 0, r - 1).min(x_subview_min1); - const double mval2 = x.cols(0, r - 1).min(x_subview_min2); + const double mval = x.min(); + const double mval1 = x.submat(0, 0, 0, r - 1).min(); + const double mval2 = x.cols(0, r - 1).min(); if (mval != 0.0) { @@ -148,51 +150,53 @@ TEST_CASE("fn_min_spsubview_row_min_test") REQUIRE( mval == Approx(mval1) ); REQUIRE( mval == Approx(mval2) ); + + REQUIRE( mval == Approx(x(x_min))); } } } -TEST_CASE("fn_min_spincompletesubview_min_test") - { - for (size_t r = 50; r < 150; ++r) - { - sp_mat x; - x.sprandn(r, r, 0.3); - - uword x_min; - uword x_subview_min1; - uword x_subview_min2; - uword x_subview_min3; - - const double mval = x.min(x_min); - const double mval1 = x.submat(1, 1, r - 2, r - 2).min(x_subview_min1); - const double mval2 = x.cols(1, r - 2).min(x_subview_min2); - const double mval3 = x.rows(1, r - 2).min(x_subview_min3); - - uword row, col; - x.min(row, col); - - if (row != 0 && row != r - 1 && col != 0 && col != r - 1 && mval != 0.0) - { - uword srow, scol; - - srow = x_subview_min1 % (r - 2); - scol = x_subview_min1 / (r - 2); - REQUIRE( x_min == (srow + 1) + r * (scol + 1) ); - REQUIRE( x_min == x_subview_min2 + r ); - - srow = x_subview_min3 % (r - 2); - scol = x_subview_min3 / (r - 2); - REQUIRE( x_min == (srow + 1) + r * scol ); - - REQUIRE( mval == Approx(mval1) ); - REQUIRE( mval == Approx(mval2) ); - REQUIRE( mval == Approx(mval3) ); - } - } - } +// TEST_CASE("fn_min_spincompletesubview_min_test") +// { +// for (size_t r = 50; r < 150; ++r) +// { +// sp_mat x; +// x.sprandn(r, r, 0.3); +// +// uword x_min; +// uword x_subview_min1; +// uword x_subview_min2; +// uword x_subview_min3; +// +// const double mval = x.min(x_min); +// const double mval1 = x.submat(1, 1, r - 2, r - 2).min(x_subview_min1); +// const double mval2 = x.cols(1, r - 2).min(x_subview_min2); +// const double mval3 = x.rows(1, r - 2).min(x_subview_min3); +// +// uword row, col; +// x.min(row, col); +// +// if (row != 0 && row != r - 1 && col != 0 && col != r - 1 && mval != 0.0) +// { +// uword srow, scol; +// +// srow = x_subview_min1 % (r - 2); +// scol = x_subview_min1 / (r - 2); +// REQUIRE( x_min == (srow + 1) + r * (scol + 1) ); +// REQUIRE( x_min == x_subview_min2 + r ); +// +// srow = x_subview_min3 % (r - 2); +// scol = x_subview_min3 / (r - 2); +// REQUIRE( x_min == (srow + 1) + r * scol ); +// +// REQUIRE( mval == Approx(mval1) ); +// REQUIRE( mval == Approx(mval2) ); +// REQUIRE( mval == Approx(mval3) ); +// } +// } +// }