Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  seq_buf_kunit.c

  Sprache: C
 

// SPDX-License-Identifier: GPL-2.0
/*
 * KUnit tests for the seq_buf API
 *
 * Copyright (C) 2025, Google LLC.
 */


#include <kunit/test.h>
#include <linux/seq_buf.h>

static void seq_buf_init_test(struct kunit *test)
{
 char buf[32];
 struct seq_buf s;

 seq_buf_init(&s, buf, sizeof(buf));

 KUNIT_EXPECT_EQ(test, s.size, 32);
 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_buffer_left(&s), 32);
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 0);
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_declare_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 24);

 KUNIT_EXPECT_EQ(test, s.size, 24);
 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_buffer_left(&s), 24);
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 0);
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_clear_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 128);

 seq_buf_puts(&s, "hello");
 KUNIT_EXPECT_EQ(test, s.len, 5);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello");

 seq_buf_clear(&s);

 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_puts_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 16);

 seq_buf_puts(&s, "hello");
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 5);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello");

 seq_buf_puts(&s, " world");
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 11);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello world");
}

static void seq_buf_puts_overflow_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 10);

 seq_buf_puts(&s, "123456789");
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 9);

 seq_buf_puts(&s, "0");
 KUNIT_EXPECT_TRUE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 10);
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "123456789");

 seq_buf_clear(&s);
 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_putc_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 4);

 seq_buf_putc(&s, 'a');
 seq_buf_putc(&s, 'b');
 seq_buf_putc(&s, 'c');

 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 3);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "abc");

 seq_buf_putc(&s, 'd');
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 4);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "abc");

 seq_buf_putc(&s, 'e');
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 4);
 KUNIT_EXPECT_TRUE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "abc");

 seq_buf_clear(&s);
 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_printf_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 32);

 seq_buf_printf(&s, "hello %s""world");
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 11);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello world");

 seq_buf_printf(&s, " %d"123);
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 15);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello world 123");
}

static void seq_buf_printf_overflow_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 16);

 seq_buf_printf(&s, "%lu"1234567890UL);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 10);
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "1234567890");

 seq_buf_printf(&s, "%s""abcdefghij");
 KUNIT_EXPECT_TRUE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 16);
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "1234567890abcde");

 seq_buf_clear(&s);
 KUNIT_EXPECT_EQ(test, s.len, 0);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "");
}

static void seq_buf_get_buf_commit_test(struct kunit *test)
{
 DECLARE_SEQ_BUF(s, 16);
 char *buf;
 size_t len;

 len = seq_buf_get_buf(&s, &buf);
 KUNIT_EXPECT_EQ(test, len, 16);
 KUNIT_EXPECT_PTR_NE(test, buf, NULL);

 memcpy(buf, "hello"5);
 seq_buf_commit(&s, 5);

 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 5);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello");

 len = seq_buf_get_buf(&s, &buf);
 KUNIT_EXPECT_EQ(test, len, 11);
 KUNIT_EXPECT_PTR_NE(test, buf, NULL);

 memcpy(buf, " worlds!"8);
 seq_buf_commit(&s, 6);

 KUNIT_EXPECT_EQ(test, seq_buf_used(&s), 11);
 KUNIT_EXPECT_FALSE(test, seq_buf_has_overflowed(&s));
 KUNIT_EXPECT_STREQ(test, seq_buf_str(&s), "hello world");

 len = seq_buf_get_buf(&s, &buf);
 KUNIT_EXPECT_EQ(test, len, 5);
 KUNIT_EXPECT_PTR_NE(test, buf, NULL);

 seq_buf_commit(&s, -1);
 KUNIT_EXPECT_TRUE(test, seq_buf_has_overflowed(&s));
}

static struct kunit_case seq_buf_test_cases[] = {
 KUNIT_CASE(seq_buf_init_test),
 KUNIT_CASE(seq_buf_declare_test),
 KUNIT_CASE(seq_buf_clear_test),
 KUNIT_CASE(seq_buf_puts_test),
 KUNIT_CASE(seq_buf_puts_overflow_test),
 KUNIT_CASE(seq_buf_putc_test),
 KUNIT_CASE(seq_buf_printf_test),
 KUNIT_CASE(seq_buf_printf_overflow_test),
 KUNIT_CASE(seq_buf_get_buf_commit_test),
 {}
};

static struct kunit_suite seq_buf_test_suite = {
 .name = "seq_buf",
 .test_cases = seq_buf_test_cases,
};

kunit_test_suite(seq_buf_test_suite);

MODULE_DESCRIPTION("Runtime test cases for seq_buf string API");
MODULE_LICENSE("GPL");

Messung V0.5 in Prozent
C=95 H=92 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-06-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik