Przejdź do głównej zawartości

Jenkins Academy

projekt kalkulator

Struktura plików

calc_project/
├── calc.c
├── calc.h
├── main.c
├── Makefile
├── build/ # katalog na binarki
└── tests/
└── test_calc.py

calc.h

#ifndef CALC_H
#define CALC_H

int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
int divide(int a, int b); // Zwraca 0 jeśli b == 0

#endif

calc.c

#include "calc.h"

int add(int a, int b) {
return a + b;
}

int subtract(int a, int b) {
return a - b;
}

int multiply(int a, int b) {
return a * b;
}

int divide(int a, int b) {
if (b == 0) return 0;
return a / b;
}

main.c

#include <stdio.h>
#include "calc.h"

int main(int argc, char *argv[]) {
printf("2 + 3 = %d\n", add(2, 3));
printf("5 - 1 = %d\n", subtract(5, 1));
printf("4 * 6 = %d\n", multiply(4, 6));
printf("8 / 2 = %d\n", divide(8, 2));
return 0;
}

Makefile

CC=gcc
CFLAGS=-Wall
BIN=build/calc

all: $(BIN)

$(BIN): main.c calc.c
mkdir -p build
$(CC) $(CFLAGS) -o $(BIN) main.c calc.c

clean:
rm -rf build

Testy

tests/test_calc.py

import subprocess

def run_calc_and_capture_output():
result = subprocess.run(["./build/calc"], capture_output=True, text=True)
return result.stdout.strip()

def test_add():
output = run_calc_and_capture_output()
assert "2 + 3 = 5" in output

def test_subtract():
output = run_calc_and_capture_output()
assert "5 - 1 = 4" in output

def test_multiply():
output = run_calc_and_capture_output()
assert "4 * 6 = 24" in output

def test_divide():
output = run_calc_and_capture_output()
assert "8 / 2 = 4" in output

Uruchomienie

Zbuduj program C

make

Spowoduje to utworzenie build/calc.

Zainstaluj pytest

pip install pytest

Uruchom testy

pytest tests/

Powinieneś zobaczyć wynik podobny do:

================ test session =================
collected 4 items

tests/test_calc.py .... [100%]

================= 4 passed ====================