== Description
   This is a custom test suite for Ruby. It includes tests for both the
   core classes and the stdlib.
   
== Prerequisites
   Rake. Version 0.7.2 or later recommended. Earlier versions will delete
   the core directory by mistake if you use the 'clean' task, thinking it's
   a coredump file.

== Conventions

=== Directory Layout
   
   bench - toplevel directory for all benchmarks
   
   bench/core   - toplevel directory for benchmarks of core Ruby methods.
   bench/stdlib - toplevel directory for benchmarks of libraries in the stdlib.
   test/core    - toplevel directory for tests of core Ruby classes.
   test/stdlib  - toplevel directory for tests of stdlib.
   test/lib     - contains helper modules that can be used in your test cases.
   
   Under test/core there is a folder for each of the core classes.  Under
   those folders are one or two subdirectories - 'class' and/or 'instance'.
   
   Under the 'class' folders are the tests for the class methods of the class
   in question.  Under the 'instance' folders are the tests for the instance
   methods of the class in question, if applicable.
   
=== Test suites
   The test program shall be test/unit, by Nathaniel Talbott.
	
   All test files shall start with "tc_", and end with the name of the method,
   or an analogue based on the internal method name, e.g. "aref" to refer to
   Array#[].
   
   All test class names shall start with "TC_", followed by the class name,
   followed by the class or instance method (capitalized), followed by the word
   "Class", or "Instance", as appropriate.
   - Since writing this, I have changed it to 'ClassMethod' and
   'InstanceMethod' instead. So, for the moment, you will see both approaches.
   
   For example, TC_Dir_Getwd_ClassMethod < Test::Unit::TestCase

   You can optionally use the Test::Helper module to alleviate some of the
   mundane tasks, such as getting the user's name, home directory, setting
   the base directory, etc.
   
   Running the tests should be handled via tasks in the Rakefile. Some tests
   skipped on certain platforms. Other tests are skipped unless you run the
   tests as root. Still others are skipped for alternate implementations, such
   as JRuby.
   
== Testing guidelines for writers
   One test per method for the core classes.
   - Exception: bang and non-bang methods can be grouped together, as well
     as aliases.
   Comment your tests as appropriate.
   Test basic functionality using most likely real world uses.
   Test for expected errors.
   Test edge cases (nil, 0, true, false).
   Go out of your way to break things. :)
   
== Coding guidelines for writers
	Three space indentation.
	Tabs to spaces always.
	Meaningful test names.
	Avoid tests that depend on other tests.
   Always reset your instance variables to nil in the teardown method.

== Benchmark suites
   The benchmark program shall be "benchmark", the library that comes bundled
   as part of the Ruby standard library.

   All benchmark programs shall start with "bench_", and end with the name of
   the class.  There shall be one benchmark program per class, although
   benchmark suites are also allowed per method, if desired. I have created
   a few method benchmarks in order to compare changes to the C source with
   original source code.

== Notes on the Benchmark suite
   The purpose of the benchmark suite is to determine overall speed, do speed
   comparisons between minor releases, high iteration testing, look for any
   pathological slowdowns, and find methods that can be optimized.
   
== Running the tests
   Use the Rake tasks to run the various tests. You can run the invidiual
   test suites by using the name of the class or package, e.g. 'rake
   test_array'.
   
   To perform all core tests run 'rake test_core'. Likewise, to perform all
   of the stdlib tests run 'rake test_stdlib'.
   
   To perform all tests run 'rake test'.

== On JRuby
   As of 25-May-2007 I've decided to go ahead and tailor some of the tests
   for JRuby. This is easy enough to do by checking the value of the JRUBY
   constant (defined in the Test::Helper module), and usually just means
   skipping the posix methods, e.g. Process.wait, etc.
   
== Acknowledgements
   Some tests shamelessly plagiarized from rubicon or bfts.

== License
   Ruby's

== Warranty
   This package is provided "as is" and without any express or
   implied warranties, including, without limitation, the implied
   warranties of merchantability and fitness for a particular purpose.

== Author
   Daniel J. Berger
   djberg96 at gmail dot com
   imperator on IRC (irc.freenode.net)
