| Futex Test | 
 | ========== | 
 | Futex Test is intended to thoroughly test the Linux kernel futex system call | 
 | API. | 
 |  | 
 | Functional tests shall test the documented behavior of the futex operation | 
 | code under test. This includes checking for proper behavior under normal use, | 
 | odd corner cases, regression tests, and abject abuse and misuse. | 
 |  | 
 | Futextest will also provide example implementation of mutual exclusion | 
 | primitives. These can be used as is in user applications or can serve as | 
 | examples for system libraries. These will likely be added to either a new lib/ | 
 | directory or purely as header files under include/, I'm leaning toward the | 
 | latter. | 
 |  | 
 | Quick Start | 
 | ----------- | 
 | # make | 
 | # ./run.sh | 
 |  | 
 | Design and Implementation Goals | 
 | ------------------------------- | 
 | o Tests should be as self contained as is practical so as to facilitate sharing | 
 |   the individual tests on mailing list discussions and bug reports. | 
 | o The build system shall remain as simple as possible, avoiding any archive or | 
 |   shared object building and linking. | 
 | o Where possible, any helper functions or other package-wide code shall be | 
 |   implemented in header files, avoiding the need to compile intermediate object | 
 |   files. | 
 | o External dependencies shall remain as minimal as possible. Currently gcc | 
 |   and glibc are the only dependencies. | 
 | o Tests return 0 for success and < 0 for failure. | 
 |  | 
 | Output Formatting | 
 | ----------------- | 
 | Test output shall be easily parsable by both human and machine. Title and | 
 | results are printed to stdout, while intermediate ERROR or FAIL messages are | 
 | sent to stderr. Tests shall support the -c option to print PASS, FAIL, and | 
 | ERROR strings in color for easy visual parsing. Output shall conform to the | 
 | following format: | 
 |  | 
 | test_name: Description of the test | 
 | 	Arguments: arg1=val1 #units specified for clarity where appropriate | 
 | 	ERROR: Description of unexpected error | 
 | 	 FAIL: Reason for test failure | 
 | 	# FIXME: Perhaps an " INFO: informational message" option would be | 
 | 	#        useful here. Using -v to toggle it them on and off, as with -c. | 
 | 	# there may be multiple ERROR or FAIL messages | 
 | Result: (PASS|FAIL|ERROR) | 
 |  | 
 | Naming | 
 | ------ | 
 | o FIXME: decide on a sane test naming scheme.  Currently the tests are named | 
 |   based on the primary futex operation they test. Eventually this will become a | 
 |   problem as we intend to write multiple tests which collide in this namespace. | 
 |   Perhaps something like "wait-wake-1" "wait-wake-2" is adequate, leaving the | 
 |   detailed description in the test source and the output. | 
 |  | 
 | Coding Style | 
 | ------------ | 
 | o The Futex Test project adheres to the coding standards set forth by Linux | 
 |   kernel as defined in the Linux source Documentation/process/coding-style.rst. |