// Copyright by Contributors #include #include "../helpers.h" TEST(Metric, RMSE) { xgboost::Metric * metric = xgboost::Metric::Create("rmse"); ASSERT_STREQ(metric->Name(), "rmse"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.9f, 0.1f, 0.9f}, { 0, 0, 1, 1}), 0.6403f, 0.001f); delete metric; } TEST(Metric, MAE) { xgboost::Metric * metric = xgboost::Metric::Create("mae"); ASSERT_STREQ(metric->Name(), "mae"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.9f, 0.1f, 0.9f}, { 0, 0, 1, 1}), 0.5f, 0.001f); delete metric; } TEST(Metric, LogLoss) { xgboost::Metric * metric = xgboost::Metric::Create("logloss"); ASSERT_STREQ(metric->Name(), "logloss"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.9f, 0.1f, 0.9f}, { 0, 0, 1, 1}), 1.2039f, 0.001f); delete metric; } TEST(Metric, Error) { xgboost::Metric * metric = xgboost::Metric::Create("error"); ASSERT_STREQ(metric->Name(), "error"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.9f, 0.1f, 0.9f}, { 0, 0, 1, 1}), 0.5f, 0.001f); EXPECT_ANY_THROW(xgboost::Metric::Create("error@abc")); delete metric; metric = xgboost::Metric::Create("error@0.5f"); EXPECT_STREQ(metric->Name(), "error"); delete metric; metric = xgboost::Metric::Create("error@0.1"); ASSERT_STREQ(metric->Name(), "error@0.1"); EXPECT_STREQ(metric->Name(), "error@0.1"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.2f, 0.1f, 0.2f}, { 0, 0, 1, 1}), 0.5f, 0.001f); delete metric; } TEST(Metric, PoissionNegLogLik) { xgboost::Metric * metric = xgboost::Metric::Create("poisson-nloglik"); ASSERT_STREQ(metric->Name(), "poisson-nloglik"); EXPECT_NEAR(GetMetricEval(metric, {0, 1}, {0, 1}), 0.5f, 1e-10); EXPECT_NEAR(GetMetricEval(metric, {0.1f, 0.2f, 0.1f, 0.2f}, { 0, 0, 1, 1}), 1.1280f, 0.001f); delete metric; }