#include <gtest/gtest.h>
#include "sensors.h"

// スタブの定義
static float get_sensor_A_value()
{
    return 154.25f;
}
static float get_sensor_B_value()
{
    return 567.80f;
}
static float get_sensor_C_value()
{
    return 3555.08f;
}

TEST(SensorsTest, SamplePattern)
{
    const sensor_config_t sensors[] = {
        {{"A", get_sensor_A_value}, 1},
        {{"B", get_sensor_B_value}, 2},
        {{"C", get_sensor_C_value}, 4},
    };
    const size_t max = 3;
    const sensor_t* target_sensors[max];
    // iteration 1 (A)
    size_t num_target_sensors = get_target_sensors(
        sensors, max, 1, target_sensors);
    EXPECT_EQ(1, num_target_sensors);
    EXPECT_EQ(&sensors[0].sensor,
              target_sensors[0]);
    // iteration 2 (A, B)
    num_target_sensors = get_target_sensors(
        sensors, max, 2, target_sensors);
    EXPECT_EQ(2, num_target_sensors);
    EXPECT_EQ(&sensors[0].sensor,
              target_sensors[0]);
    EXPECT_EQ(&sensors[1].sensor,
              target_sensors[1]);
    // iteration 3 (A)
    num_target_sensors = get_target_sensors(
        sensors, max, 3, target_sensors);
    EXPECT_EQ(1, num_target_sensors);
    EXPECT_EQ(&sensors[0].sensor,
              target_sensors[0]);
    // iteration 4 (A, B, C)
    num_target_sensors = get_target_sensors(
        sensors, max, 4, target_sensors);
    EXPECT_EQ(3, num_target_sensors);
    EXPECT_EQ(&sensors[0].sensor,
              target_sensors[0]);
    EXPECT_EQ(&sensors[1].sensor,
              target_sensors[1]);
    EXPECT_EQ(&sensors[2].sensor,
              target_sensors[2]);
}
