Schreiben Sie einen C-Sprach-Unit-Test in Python

So schreiben Sie einen Unit-Test für den C-Sprachtest mit dem Python-Unit-Test. Die Motivation ist, die Anzahl der Zusammenstellungen so weit wie möglich zu reduzieren. Dieser Ansatz macht eine Kompilierung beim Schreiben von Tests überflüssig (obwohl ich nicht weiß, ob es schnell geht oder ob der Rückgabewert komplex ist).

Erstens lautet der C-Sprachcode wie folgt.

//main.c
#include<stdio.h>
int add(int a, int b);
struct Pair {
  int l;
  int r;
};
int
main(void) {
  printf("%d + %d = %d\n", 3, 4, add(3, 4));
  return (0);
}
int add(int a, int b) {
  return a + b;
}
struct Pair  make_pair(int l, int r) {
  struct Pair p;
  p.l = l;
  p.r = r;
  return p;
}

Als nächstes sieht der Python-Code, der von gdb aufgerufen werden soll, folgendermaßen aus:

#debug.py
import unittest

class Test(unittest.TestCase):
  def assertEqual_(self, a, expr):
    self.assertEqual(a, gdb.parse_and_eval(expr))
  def test_aaaa(self):
    self.assertEqual_(42, 'add(30, 12)')
  def test_bbb(self):
    self.assertEqual_(0, 'add(0, 0)')
  def test_ccc(self):
    p = gdb.parse_and_eval("make_pair(3, 4)")
    self.assertEqual("{l = 3, r = 4}", str(p))


gdb.execute('break main')
gdb.execute('run')
unittest.main()

So testen Sie Ihren C-Code mit diesem Python-Code:

$ gcc -g3 main.c
$ gdb -q -x ./debug.py a.out

Die Standardausgabe sieht folgendermaßen aus: Jetzt können Sie in C in Python geschriebene Tests hinzufügen und ändern, ohne sie neu zu kompilieren.

Reading symbols from a.out...done.
Breakpoint 1 at 0x804841c: file main.c, line 9.

Breakpoint 1, main () at main.c:9
9	  printf("%d + %d = %d\n", 3, 4, add(3, 4));
...
----------------------------------------------------------------------
Ran 3 tests in 0.003s

OK

Wie eingangs erwähnt, ist es meiner Meinung nach möglich, die Struktur besser zu handhaben, wenn der Rückgabewert der Funktion kompliziert ist. In der Sprache C kann es realistisch sein, eine Funktion vorzubereiten, die den Inhalt eines Objekts in eine Zeichenfolge konvertiert.

Über die Version

Recommended Posts

Schreiben Sie einen C-Sprach-Unit-Test in Python
Python-Unit-Test
Schreiben Sie die O_SYNC-Datei in C und Python
Schreiben Sie Python in MySQL
Weiter Python in C-Sprache
C-API in Python 3
Erweitern Sie Python in C ++ (Boost.NumPy)
Schreiben Sie Pandec-Filter in Python
Schreiben Sie die Beta-Distribution in Python
Binäre Suche in Python / C ++
Schreiben Sie Spinnen-Tests in Scrapy
Schreiben Sie Tests in Python, um die Abdeckung zu profilieren und zu überprüfen
Schreiben Sie eine Dichotomie in Python
Schreiben Sie einen tabellengesteuerten Test in C.
Schreiben Sie ein JSON-Schema mit Python DSL
Schreiben Sie einen HTTP / 2-Server in Python
Schreiben Sie die AWS Lambda-Funktion in Python
ABC166 in Python A ~ C Problem
Schreiben Sie Selentestcode in Python
Löse ABC036 A ~ C mit Python
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
So verpacken Sie C in Python
Schreiben Sie einen Test in GO-Sprache + Gin
Code-Tests rund um die Uhr in Python
Löse ABC175 A, B, C mit Python
Der Forscher eines Pharmaunternehmens fasste den Python-Unit-Test zusammen
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Algorithmus in Python (ABC 146 C Dichotomie
Implementieren Sie den FIR-Filter in Python und C.
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Schreiben Sie eine einfache Giermethode in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
Wie schreibe ich Ruby to_s in Python
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
Python, openFrameworks (c ++)
FizzBuzz in Python