blob: f4aff42b481d73a98d263c8c7d3757662ed84d7e [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
/*
* This file is part of libgpiod.
*
* Copyright (C) 2017-2018 Bartosz Golaszewski <bartekgola@gmail.com>
*/
/* Iterator test cases. */
#include "gpiod-test.h"
static void chip_iter(void)
{
TEST_CLEANUP(test_free_chip_iter) struct gpiod_chip_iter *iter = NULL;
struct gpiod_chip *chip;
bool A, B, C;
A = B = C = false;
iter = gpiod_chip_iter_new();
TEST_ASSERT_NOT_NULL(iter);
gpiod_foreach_chip(iter, chip) {
if (strcmp(gpiod_chip_label(chip), "gpio-mockup-A") == 0)
A = true;
else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-B") == 0)
B = true;
else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-C") == 0)
C = true;
}
TEST_ASSERT(A);
TEST_ASSERT(B);
TEST_ASSERT(C);
}
TEST_DEFINE(chip_iter,
"gpiod_chip_iter - simple loop",
0, { 8, 8, 8 });
static void chip_iter_noclose(void)
{
TEST_CLEANUP(test_free_chip_iter_noclose)
struct gpiod_chip_iter *iter = NULL;
TEST_CLEANUP_CHIP struct gpiod_chip *chipA = NULL;
TEST_CLEANUP_CHIP struct gpiod_chip *chipB = NULL;
TEST_CLEANUP_CHIP struct gpiod_chip *chipC = NULL;
struct gpiod_chip *chip;
bool A, B, C;
A = B = C = false;
iter = gpiod_chip_iter_new();
TEST_ASSERT_NOT_NULL(iter);
gpiod_foreach_chip_noclose(iter, chip) {
if (strcmp(gpiod_chip_label(chip), "gpio-mockup-A") == 0) {
A = true;
chipA = chip;
} else if (strcmp(gpiod_chip_label(chip),
"gpio-mockup-B") == 0) {
B = true;
chipB = chip;
} else if (strcmp(gpiod_chip_label(chip),
"gpio-mockup-C") == 0) {
C = true;
chipC = chip;
}
}
TEST_ASSERT(A);
TEST_ASSERT(B);
TEST_ASSERT(C);
gpiod_chip_iter_free_noclose(iter);
iter = NULL;
/* See if the chips are still open and usable. */
TEST_ASSERT_STR_EQ(gpiod_chip_label(chipA), "gpio-mockup-A");
TEST_ASSERT_STR_EQ(gpiod_chip_label(chipB), "gpio-mockup-B");
TEST_ASSERT_STR_EQ(gpiod_chip_label(chipC), "gpio-mockup-C");
}
TEST_DEFINE(chip_iter_noclose,
"gpiod_chip_iter - simple loop, noclose variant",
0, { 8, 8, 8 });
static void chip_iter_break(void)
{
TEST_CLEANUP(test_free_chip_iter) struct gpiod_chip_iter *iter = NULL;
struct gpiod_chip *chip;
int i = 0;
iter = gpiod_chip_iter_new();
TEST_ASSERT_NOT_NULL(iter);
gpiod_foreach_chip(iter, chip) {
if ((strcmp(gpiod_chip_label(chip), "gpio-mockup-A") == 0) ||
(strcmp(gpiod_chip_label(chip), "gpio-mockup-B") == 0) ||
(strcmp(gpiod_chip_label(chip), "gpio-mockup-C") == 0))
i++;
if (i == 3)
break;
}
gpiod_chip_iter_free(iter);
iter = NULL;
TEST_ASSERT_EQ(i, 3);
}
TEST_DEFINE(chip_iter_break,
"gpiod_chip_iter - break",
0, { 8, 8, 8, 8, 8 });
static void line_iter(void)
{
TEST_CLEANUP(test_free_line_iter) struct gpiod_line_iter *iter = NULL;
TEST_CLEANUP_CHIP struct gpiod_chip *chip = NULL;
struct gpiod_line *line;
unsigned int i = 0;
chip = gpiod_chip_open(test_chip_path(0));
TEST_ASSERT_NOT_NULL(chip);
iter = gpiod_line_iter_new(chip);
TEST_ASSERT_NOT_NULL(iter);
gpiod_foreach_line(iter, line) {
TEST_ASSERT_EQ(i, gpiod_line_offset(line));
i++;
}
TEST_ASSERT_EQ(8, i);
}
TEST_DEFINE(line_iter,
"gpiod_line_iter - simple loop, check offsets",
0, { 8 });