There was a problem fetching linked pipelines.
Commit caac3956 authored by Caleb C. Sander's avatar Caleb C. Sander
Browse files

Fix #3

parent f3a343ea
No related merge requests found
Pipeline #42348 failed with stage
Showing with 88 additions and 104 deletions
+88 -104
bin
.debug
hashes.txt
tests/*-actual*.txt
CLEAN_COMMAND = rm -f bin/* passwords.txt
CLEAN_COMMAND = rm -f bin/* passwords.txt tests/*-actual*.txt
ifdef DEBUG
CC = clang-with-asan
CFLAGS = -Iinclude -Wall -Wextra
......@@ -15,21 +15,26 @@ else
endif
TESTS_SQUEUE = squeue_single_fill squeue_push_pop
TESTS_MQUEUE = mqueue_push_pop mqueue_test_empty
TESTS_THREADPOOL = prime_printer multiple_pools recursive_add_work periodic_work repeat_drain sleepers
TESTS_MQUEUE = mqueue_push_pop mqueue_empty
PRIMES_THREADS = 1 2 4 8 16 32 64
SLEEPERS = 10
SLEEPERS_THREADS=$(shell seq 1 $(SLEEPERS))
RECURSIVE_WORK = 3125
TESTS_THREADPOOL = $(PRIMES_THREADS:%=prime_printer-%) primes_multiple_pools \
primes_repeat_drain primes_periodic_work recursive_add_work \
$(SLEEPERS_THREADS:%=sleepers-%)
test: test_queue test_threadpool
test_queue: test_squeue test_mqueue
test_squeue: $(addprefix bin/,$(TESTS_SQUEUE))
tests/test_squeue.sh
test_mqueue: $(addprefix bin/,$(TESTS_MQUEUE))
tests/test_mqueue.sh
test_squeue: $(TESTS_SQUEUE:=-result)
@echo "\e[32mALL SINGLE-THREADED QUEUE TESTS PASS!\e[39m"
test_queue: test_squeue test_mqueue
test_mqueue: $(TESTS_MQUEUE:=-result)
@echo "\e[32mALL MULTI-THREADED QUEUE TESTS PASS!\e[39m"
test_threadpool: $(addprefix bin/,$(TESTS_THREADPOOL))
tests/test_pool.sh
test_threadpool: $(TESTS_THREADPOOL:=-result)
@echo "\e[32mALL THREADPOOL TESTS PASS!\e[39m"
passwords.txt: bin/password_cracker hashes.txt
nohup $< < hashes.txt | tee $@
......@@ -37,17 +42,67 @@ passwords.txt: bin/password_cracker hashes.txt
bin/%.o: src/%.c
$(CC) $(CFLAGS) -c $^ -o $@
bin/squeue_%: tests/squeue_%.c bin/queue.o
$(CC) $(CFLAGS) -lpthread $^ -o $@
bin/mqueue_%: tests/mqueue_%.c bin/queue.o
$(CC) $(CFLAGS) -lpthread $^ -o $@
bin/%.o: tests/%.c
$(CC) $(CFLAGS) -c $^ -o $@
bin/%: tests/%.c bin/queue.o bin/thread_pool.o
bin/%: bin/%.o bin/queue.o bin/thread_pool.o
$(CC) $(CFLAGS) -lpthread $^ -o $@
bin/password_cracker: src/password_cracker.c bin/queue.o bin/thread_pool.o
bin/password_cracker: bin/password_cracker.o bin/queue.o bin/thread_pool.o
$(CC) $(CFLAGS) -lcrypt -lpthread $^ -o $@
mqueue_push_pop-result: tests/mqueue_push_pop-actual-sorted.txt
diff -u tests/correct_integers.txt $^ \
&& echo "\e[32mPASSED test mqueue_push_pop\e[39m" \
|| (echo "\e[31mFAILED test mqueue_push_pop\e[39m"; false)
tests/prime_printer-%-actual.txt: bin/prime_printer
$^ $(@:tests/prime_printer-%-actual.txt=%) > $@
prime_printer-%-result: tests/prime_printer-%-actual-sorted.txt
diff -u tests/correct_primes.txt $^ \
&& echo "\e[32mPASSED test prime_printer with $(@:prime_printer-%-result=%) threads\e[39m" \
|| (echo "\e[31mFAILED test prime_printer with $(@:prime_printer-%-result=%) threads\e[39m"; false)
primes_%-result: tests/primes_%-actual-sorted.txt
diff -u tests/correct_primes.txt $^ \
&& echo "\e[32mPASSED test $(@:-result=)\e[39m" \
|| (echo "\e[31mFAILED test $(@:-result=)\e[39m"; false)
recursive_add_work-result: tests/recursive_add_work-actual-lines.txt
actual=`cat $^`; \
[ $$actual = $(RECURSIVE_WORK) ] \
&& echo "\e[32mPASSED test recursive_add_work\e[39m" \
|| (echo "\e[31mFAILED test recursive_add_work"; \
echo "Expected $(RECURSIVE_WORK) prints but found $$actual prints\e[39m"; false)
tests/sleepers-%-actual.txt: bin/sleepers
$^ $(@:tests/sleepers-%-actual.txt=%) > $@
sleepers-%-result: tests/sleepers-%-actual.txt
actual=`cat $^`; \
expected=$$((($(SLEEPERS) + $(@:sleepers-%-result=%) - 1) / $(@:sleepers-%-result=%))); \
[ $$actual = $$expected ] \
&& echo "\e[32mPASSED test sleepers with $(@:sleepers-%-result=%) threads\e[39m" \
|| (echo "\e[31mFAILED test sleepers with $(@:sleepers-%-result=%) threads"; \
echo "Expected to sleep $$expected seconds, but slept $$actual seconds\e[39m"; false)
%-result: bin/%
$^ && echo "\e[32mPASSED test $(@:-result=)\e[39m" \
|| (echo "\e[31mFAILED test $(@:-result=)\e[39m"; false)
tests/%-actual.txt: bin/%
$^ > $@
tests/%-sorted.txt: tests/%.txt
sort -n $^ > $@
tests/%-lines.txt: tests/%.txt
wc -l < $^ > $@
clean:
$(CLEAN_COMMAND)
.PRECIOUS: passwords.txt bin/%.o bin/% bin/password_cracker \
tests/prime_printer-%-actual.txt tests/sleepers-%-actual.txt \
tests/%-actual.txt tests/%-sorted.txt tests/%-lines.txt
File moved
File moved
File moved
File moved
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include "thread_pool.h"
const time_t NS_PER_SEC = 1e9;
const size_t NUM_SLEEPS = 10;
void usage(char *argv[]) {
......@@ -26,6 +29,10 @@ int main(int argc, char *argv[]) {
usage(argv);
}
struct timespec start;
int result = clock_gettime(CLOCK_REALTIME, &start);
assert(result == 0);
thread_pool_t *pool = thread_pool_init(num_threads);
for (size_t i = 0; i < NUM_SLEEPS; i++) {
......@@ -33,4 +40,11 @@ int main(int argc, char *argv[]) {
}
thread_pool_finish(pool);
struct timespec end;
result = clock_gettime(CLOCK_REALTIME, &end);
assert(result == 0);
time_t duration = end.tv_sec - start.tv_sec +
(end.tv_nsec - start.tv_nsec) / NS_PER_SEC;
printf("%lu\n", duration);
}
#!/bin/bash
cd `dirname "${0}"`
echo -e "Running mqueue_push_pop"
if ! diff -u correct_integers.txt <(../bin/mqueue_push_pop | sort -n); then
echo -e "FAILED test mqueue_push_pop"
exit 1
fi
echo -e "PASSED test mqueue_push_pop"
echo -e "Running mqueue_test_empty"
if ! ../bin/mqueue_test_empty; then
echo -e "FAILED test mqueue_test_empty"
exit 1
fi
echo -e "PASSED test mqueue_test_empty"
echo -e "ALL MULTI-THREADED QUEUE TESTS PASS!"
#!/bin/bash
cd `dirname "${0}"`
PRIMES_THREADS=(1 2 4 8 16 32 64)
PRIMES_TESTS=(multiple_pools repeat_drain periodic_work)
EXPECTED_RECURSIVE_WORK=3125
SLEEPERS=10
SLEEPER_THREADS=$(seq 1 ${SLEEPERS})
for threads in ${PRIMES_THREADS[@]}; do
echo -e "Runnning prime_printer with ${threads} threads"
if ! diff -u correct_primes.txt <(../bin/prime_printer ${threads} | sort -n); then
echo -e "FAILED test prime_printer with ${threads} threads"
exit 1
fi
echo "PASSED test prime_printer with ${threads} threads"
done
for test in ${PRIMES_TESTS[@]}; do
echo -e "Running ${test}"
if ! diff -u correct_primes.txt <(../bin/${test} | sort -n); then
echo -e "FAILED test ${test}"
exit 1
fi
echo -e "PASSED test ${test}"
done
echo -e "Running recursive_add_work"
RECURSIVE_WORK_COUNT=$(../bin/recursive_add_work | wc -l)
if ((${RECURSIVE_WORK_COUNT} != ${EXPECTED_RECURSIVE_WORK})); then
echo -e "FAILED test recursive_add_work!"
echo -e "Expected ${EXPECTED_RECURSIVE_WORK} prints, but found ${RECURSIVE_WORK_COUNT}."
exit 1
fi
echo -e "PASSED test recursive_add_work"
TIMEFORMAT=%0R
for threads in ${SLEEPER_THREADS[@]}; do
echo -e "Running sleepers with ${threads} threads"
((EXPECTED_TIME = (${SLEEPERS} + ${threads} - 1) / ${threads}))
ACTUAL_TIME=$({ time ../bin/sleepers ${threads} ; } 2>&1)
if ((${ACTUAL_TIME} != ${EXPECTED_TIME})); then
echo -e "FAILED test sleepers with ${threads} threads"
echo -e "Expected to sleep ${EXPECTED_TIME} seconds, but slept ${ACTUAL_TIME} seconds."
exit 1
fi
echo -e "PASSED test sleepers with ${threads} threads"
done
echo -e "ALL THREADPOOL TESTS PASS!"
#!/bin/bash
cd `dirname "${0}"`
QUEUE_TESTS=(squeue_single_fill squeue_push_pop)
for test in ${QUEUE_TESTS[@]}; do
echo -e "Running ${test}"
if ! ../bin/${test}; then
echo "FAILED test ${test}"
exit 1
fi
echo -e "PASSED test ${test}"
done
echo -e "ALL SINGLE-THREADED QUEUE TESTS PASS!"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment