On Oct 19, 2008, at 5:11 PM, J. McConnell wrote:

> I've been thinking the same thing for awhile now and I'd love to help
> contribute to an effort like this. Thanks for getting the idea out
> there.

You're welcome. It seems like clojure.contrib could be a more  
convenient place to keep this than the wiki.

Direct or indirect contributions to clojure.contrib require that the  
contributed code be written by the contributor and that the  
contributor have a contributor agreement on file with Rich. Would that  
be acceptable to people interested in participating? I appreciate the  
care Rich showed and long view he took in coming up with the  
Contributor Agreement process. I think it would be a good idea to  
leverage that process for this effort as well.

Discussion of alternative proposals for a good way to do this and  
place to keep it are welcome.

I made a start on this today. I started with the Reader page at  
clojure.org and started making tests. I'm thinking of a structure like  
this:

Run tests with:

        (require 'clojure.contrib.test-clojure)

The definition of clojure.contrib.test-clojure requires subordinate  
test namespaces like

        'clojure.contrib.test-clojure.Reader
        'clojure.contrib.test-clojure.Evaluation
        'clojure.contrib.test-clojure.Special-Forms
        ...

with names that correspond to pages on the Clojure web site. After  
requiring the individual test namespaces, test-clojure runs  
"clojure.contrib.test-is/run-tests" on each one.

Here's a sample from clojure.contrib.test-clojure.

        (ns clojure.contrib.test-clojure.Reader
          (:use clojure.contrib.test-is))

        (deftest t-Symbols
          (is (= 'abc (symbol "abc")))
          (is (= '*+!-_? (symbol "*+!-_?")))
          (is (= 'abc:def:ghi (symbol "abc:def:ghi")))
          (is (= 'abc/def (symbol "abc" "def")))
          (is (= 'abc.def/ghi (symbol "abc.def" "ghi")))
          (is (= 'abc/def.ghi (symbol "abc" "def.ghi")))
          (is (= 'abc:def/ghi:jkl.mno (symbol "abc:def" "ghi:jkl.mno")))
          (is (instance? clojure.lang.Symbol 'alphabet))
          )

        ; additional tests to flesh out
        (deftest t-Numbers)
        (deftest t-Characters)
        (deftest t-nil)
        (deftest t-Booleans)
        (deftest t-Keywords)
        (deftest t-Lists)
        (deftest t-Vectors)
        (deftest t-Maps)
        (deftest t-Sets)
        (deftest t-Quote)
        (deftest t-Character)
        (deftest t-Comment)
        (deftest t-Meta)
        (deftest t-Deref)
        (deftest t-Regex)
        (deftest t-Metadata)
        (deftest t-read)

and a run:

        user=> (require 'clojure.contrib.test-clojure)
        Testing #<Namespace: clojure.contrib.test-clojure.Reader>

        Ran 18 tests with 10 assertions.
        0 failures, 0 exceptions.
        nil
        user=>

(Currently the number of tests exceeds the number of assertions by so  
much because of the placeholders.)

Tesing Clojure is a big project and will take a lot of work over time.  
There many pieces and many interactions among them to test. The hope  
is that having it available will allow Rich to make changes with an  
even higher degree of confidence that they didn't have unintended  
consequences and to support efforts like Chouser's ClojureScript to  
bring Clojure to new platforms

Discussion and suggestions are welcome.

--Steve


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to