blob: 8deee8ef6172182a826589dd682244849c8af7ab [file] [log] [blame]
// SPDX-License-Identifier: LGPL-2.1-or-later
/*
* This file is part of libgpiod.
*
* Copyright (C) 2019 Bartosz Golaszewski <bgolaszewski@baylibre.com>
*/
#include <string.h>
#include "gpiod-test.h"
#define GPIOD_TEST_GROUP "iter"
GPIOD_TEST_CASE(chip_iter, 0, { 8, 8, 8 })
{
g_autoptr(gpiod_chip_iter_struct) iter = NULL;
struct gpiod_chip *chip;
gboolean A, B, C;
A = B = C = FALSE;
iter = gpiod_chip_iter_new();
g_assert_nonnull(iter);
gpiod_test_return_if_failed();
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;
}
g_assert_true(A);
g_assert_true(B);
g_assert_true(C);
}
GPIOD_TEST_CASE(chip_iter_no_close, 0, { 8, 8, 8 })
{
g_autoptr(gpiod_chip_iter_struct) iter = NULL;
g_autoptr(gpiod_chip_struct) chipA = NULL;
g_autoptr(gpiod_chip_struct) chipB = NULL;
g_autoptr(gpiod_chip_struct) chipC = NULL;
struct gpiod_chip *chip;
iter = gpiod_chip_iter_new();
g_assert_nonnull(iter);
gpiod_test_return_if_failed();
gpiod_foreach_chip_noclose(iter, chip) {
if (strcmp(gpiod_chip_label(chip), "gpio-mockup-A") == 0)
chipA = chip;
else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-B") == 0)
chipB = chip;
else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-C") == 0)
chipC = chip;
else
gpiod_chip_close(chip);
}
g_assert_nonnull(chipA);
g_assert_nonnull(chipB);
g_assert_nonnull(chipC);
gpiod_chip_iter_free_noclose(iter);
iter = NULL;
/* See if the chips are still open and usable. */
g_assert_cmpstr(gpiod_chip_label(chipA), ==, "gpio-mockup-A");
g_assert_cmpstr(gpiod_chip_label(chipB), ==, "gpio-mockup-B");
g_assert_cmpstr(gpiod_chip_label(chipC), ==, "gpio-mockup-C");
}
GPIOD_TEST_CASE(chip_iter_break, 0, { 8, 8, 8, 8, 8 })
{
g_autoptr(gpiod_chip_iter_struct) iter = NULL;
struct gpiod_chip *chip;
guint i = 0;
iter = gpiod_chip_iter_new();
g_assert_nonnull(iter);
gpiod_test_return_if_failed();
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;
g_assert_cmpuint(i, ==, 3);
}
GPIOD_TEST_CASE(line_iter, 0, { 8 })
{
g_autoptr(gpiod_line_iter_struct) iter = NULL;
g_autoptr(gpiod_chip_struct) chip = NULL;
struct gpiod_line *line;
guint i = 0;
chip = gpiod_chip_open(gpiod_test_chip_path(0));
g_assert_nonnull(chip);
gpiod_test_return_if_failed();
iter = gpiod_line_iter_new(chip);
g_assert_nonnull(iter);
gpiod_test_return_if_failed();
gpiod_foreach_line(iter, line) {
g_assert_cmpuint(i, ==, gpiod_line_offset(line));
i++;
}
g_assert_cmpuint(i, ==, 8);
}