/** @file

    Unit tests for BufferWriter.h.

    @section license License

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
 */

#include "catch.hpp"

#include "DynamicStats.h"
#include "P_RecProcess.h"

#include <string_view>

TEST_CASE("DynamicStats", "[DynamicStats]")
{
  SECTION("set/get_sum")
  {
    DynamicStats stats;
    stats.init(10);
    REQUIRE(stats.is_allocated() == true);

    std::string_view name = "proxy.process.test.dynamic.stats";
    int id                = stats.create(RECT_PROCESS, name.data(), RECD_INT, RecRawStatSyncSum);
    REQUIRE(id == 0);
    CHECK(id == stats.find(name.data()));

    CHECK(stats.set_sum(id, 12345) == REC_ERR_OKAY);
    CHECK(stats.get_sum(id) == 12345);
  }
}
