summaryrefslogtreecommitdiff
path: root/tests/condvar1.c
diff options
context:
space:
mode:
authorrpj <rpj>1999-03-06 16:53:35 +0000
committerrpj <rpj>1999-03-06 16:53:35 +0000
commit04424402ab85dd4e542afb8f1a51c8cfb6d33dc2 (patch)
tree40ec159a4c66c50d470bb59ede2642227a01a4e9 /tests/condvar1.c
parent5e3dd7f951d0c8b284d9d64a4de9561142a777e9 (diff)
Sun Mar 7 10:41:52 1999 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* condvar4.c (General): Reduce to simple test case; prerequisite is condvar3.c; add description. * condvar3.c (General): Reduce to simple test case; prerequisite is condvar2.c; add description. * condvar2.c (General): Reduce to simple test case; prerequisite is condvar1.c; add description. * condvar1.c (General): Reduce to simple test case; add description. * Template.c (Comments): Add generic test detail.
Diffstat (limited to 'tests/condvar1.c')
-rw-r--r--tests/condvar1.c92
1 files changed, 15 insertions, 77 deletions
diff --git a/tests/condvar1.c b/tests/condvar1.c
index 4c52651..97c870b 100644
--- a/tests/condvar1.c
+++ b/tests/condvar1.c
@@ -2,7 +2,7 @@
* File: condvar1.c
*
* Test Synopsis:
- * - Test basic function of condition variable code.
+ * - Test initialisation and destruction of a CV.
*
* Test Method (Validation or Falsification):
* - Validation
@@ -17,105 +17,43 @@
* -
*
* Description:
- * -
+ * - Creates and then imediately destroys a CV. Does not
+ * test the CV.
*
* Environment:
* -
*
* Input:
- * -
+ * - None.
*
* Output:
- * -
+ * - File name, Line number, and failed expression on failure.
+ * - No output on success.
*
* Assumptions:
* -
*
* Pass Criteria:
- * -
+ * - pthread_cond_init returns 0, and
+ * - pthread_cond_destroy returns 0.
+ * - Process returns zero exit status.
*
* Fail Criteria:
- * -
+ * - pthread_cond_init returns non-zero, or
+ * - pthread_cond_destroy returns non-zero.
+ * - Process returns non-zero exit status.
*/
#include "test.h"
-typedef struct cvthing_t_ cvthing_t;
-
-struct cvthing_t_ {
- pthread_cond_t notbusy;
- pthread_mutex_t lock;
- int busy;
- int count;
-};
-
-static cvthing_t cvthing;
-
-static enum {
- NUMTHREADS = 10
-};
-
-static pthread_key_t key;
-
-void *
-mythread(void * arg)
-{
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
-
- cvthing.count++;
-
- while (cvthing.busy)
- {
- assert(pthread_cond_wait(&cvthing.notbusy, &cvthing.lock) == 0);
- }
-
- assert(cvthing.busy == 0);
-
- cvthing.count--;
-
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- return 0;
-}
+pthread_cond_t cv;
int
main()
{
- pthread_t t[NUMTHREADS];
- int result[NUMTHREADS];
-
- assert((t[0] = pthread_self()) != NULL);
-
- assert(pthread_cond_init(&cvthing, NULL) == 0);
-
- for (i = 1; i < NUMTHREADS; i++)
- {
- assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0);
- }
-
- while (cvthing.count < NUMTHREADS)
- {}
-
- assert(pthread_mutex_lock(&cvthing.lock) == 0);
- cvthing.busy = 0;
- assert(pthread_cond_signal(&cvthing.notbusy) == 0);
- assert(pthread_mutex_unlock(&cvthing.lock) == 0);
-
- for (i = 1; i < NUMTHREADS; i++)
- {
- assert(pthread_join(t[i], (void *) &result[i]) == 0);
- }
+ assert(pthread_cond_init(&cv, NULL) == 0);
- assert(cvthing.count == 0);
-
- assert(pthread_cond_destroy(&cvthing) == 0);
+ assert(pthread_cond_destroy(&cv) == 0);
return 0;
}
-
-
-
-
-
-
-