Template
test: add end-to-end integration across dash/bash/zsh
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* main.c - integration-fixture entry point (plan todo 26).
|
||||
*
|
||||
* A REAL C23 program exercising both fixture features end to end:
|
||||
* - pthread: pthread_create()/pthread_join() run a worker thread (guarded
|
||||
* by the HAVE_PTHREAD define the generated config.h wrote), printing a
|
||||
* grep-able marker the runner asserts on;
|
||||
* - math: sin(0.5) from libm, printed with a fixed format the runner
|
||||
* greps (the link would fail without -lm, so a successful run proves
|
||||
* the LIBS accumulation reached the Makefile).
|
||||
*
|
||||
* _POSIX_C_SOURCE must be defined BEFORE the first include: under strict
|
||||
* -std=c23 glibc sets __STRICT_ANSI__ and hides pthread_create's
|
||||
* declaration, which C23 turns into an implicit-declaration ERROR
|
||||
* (the same trap recorded for src/ in the project learnings).
|
||||
*/
|
||||
|
||||
#ifndef _POSIX_C_SOURCE
|
||||
#define _POSIX_C_SOURCE 200809L
|
||||
#endif
|
||||
|
||||
#include "config.h"
|
||||
#include "demo.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef HAVE_PTHREAD
|
||||
#include <pthread.h>
|
||||
|
||||
static void *
|
||||
worker(void *arg)
|
||||
{
|
||||
(void)arg;
|
||||
printf("worker thread ran\n");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
double s = sin(0.5);
|
||||
|
||||
printf("hellothreads demo: sin(0.5) = %.4f\n", s);
|
||||
printf("demo_compute(2) = %d\n", demo_compute(2));
|
||||
#ifdef HAVE_PTHREAD
|
||||
{
|
||||
pthread_t t;
|
||||
|
||||
if (pthread_create(&t, NULL, worker, NULL) != 0) {
|
||||
fprintf(stderr, "pthread_create failed\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
if (pthread_join(t, NULL) != 0) {
|
||||
fprintf(stderr, "pthread_join failed\n");
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
Reference in New Issue
Block a user