From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Sunjoong Lee Newsgroups: gmane.lisp.guile.user Subject: SRFI-64 module and SRFI-78 module -- archive file attached Date: Thu, 26 Apr 2012 17:27:48 +0900 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=f46d043d6461c7c5c004be90c4ed X-Trace: dough.gmane.org 1335428913 23539 80.91.229.3 (26 Apr 2012 08:28:33 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Thu, 26 Apr 2012 08:28:33 +0000 (UTC) To: guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Thu Apr 26 10:28:33 2012 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SNK40-0007mp-QD for guile-user@m.gmane.org; Thu, 26 Apr 2012 10:28:33 +0200 Original-Received: from localhost ([::1]:36892 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SNK40-0003al-38 for guile-user@m.gmane.org; Thu, 26 Apr 2012 04:28:32 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:48092) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SNK3p-0003aS-PI for guile-user@gnu.org; Thu, 26 Apr 2012 04:28:26 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SNK3j-00073x-Bb for guile-user@gnu.org; Thu, 26 Apr 2012 04:28:21 -0400 Original-Received: from mail-we0-f169.google.com ([74.125.82.169]:57185) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SNK3i-00073f-Rs for guile-user@gnu.org; Thu, 26 Apr 2012 04:28:15 -0400 Original-Received: by werj55 with SMTP id j55so769556wer.0 for ; Thu, 26 Apr 2012 01:28:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=sXhRkLdB9qS60SFL6cr442TUud7ySSA1KqQtFafGl0Q=; b=JueerLRdOHqmrL68ctNpY3DSBG4bqFqDkiMw+t7YaOtTFpm2V3dB2jDXU2Jg2gydJA l3BDPpM7wzHtTESX3rjV25NLTBJpIzNeZMqWj45ouy3preNgyBssuaXbj6tF93Ec9BK5 z0PKchSPs2xiM0UgUy/ZIEs/DYGboc46+Ah/VHxPopvTyKogqNCypP7pUnPXMJI1VOHa HZZ7rGU99/FWvO8/EKi3lRIOedPqDFVI5Hk+/rMGUh4QfB5psYz6tbP5PG0FMeD/PU8v MLuZ5flCw5bbzJ48AtpwP1qli+8nK2WtDkkFMeG7IYyHBNob/3i5ttF66CgQi/gQb+AD 6ELQ== Original-Received: by 10.180.77.233 with SMTP id v9mr48438677wiw.22.1335428892837; Thu, 26 Apr 2012 01:28:12 -0700 (PDT) Original-Received: by 10.223.93.206 with HTTP; Thu, 26 Apr 2012 01:27:48 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 74.125.82.169 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane.org@gnu.org Xref: news.gmane.org gmane.lisp.guile.user:9394 Archived-At: --f46d043d6461c7c5c004be90c4ed Content-Type: multipart/alternative; boundary=f46d043d6461c7c5bc04be90c4eb --f46d043d6461c7c5bc04be90c4eb Content-Type: text/plain; charset=UTF-8 Hello, I've attatched a file archiving modules of my recent version of SRFI-64 implementation and SRFI-78. SRFI-64 is "A Scheme API for test suites." SRFI-78 is "Lightweight testing." If you want to test your code, there are 5 options; using SRFI-64, SRFI-78, unit-test of guile-lib, lib of test-suite in Guile source archive or your own test suite. Here is four examples: ;;; filename: srfi-64-example.scm (use-modules (srfi srfi-64)) (test-begin "vec-test") (define v (make-vector 5 99)) (test-assert (vector? v)) (test-eqv 99 (vector-ref v 2)) (vector-set! v 2 7) (test-eqv 7 (vector-ref v 2)) (test-end "vec-test") ;;; filename: srfi-78-example.scm (use-modules (srfi srfi-78)) (define v (make-vector 5 99)) (check (vector? v) => #t) (check (vector-ref v 2) => 99) (vector-set! v 2 7) (check (vector-ref v 2) => 7) ;;; filename: unit-test-example.scm (use-modules (unit-test) (oop goops)) (define v (make-vector 5 99)) (define-class ()) (define-method (test-vector? (self )) (assert-true (vector? v))) (define-method (test-99 (self )) (assert-equal 99 (vector-ref v 2))) (define-method (test-7 (self )) (vector-set! v 2 7) (assert-equal 7 (vector-ref v 2))) (exit-with-summary (run-all-defined-test-cases)) ;;; filename: test-suite-example.scm (use-modules (test-suite lib)) (define v (make-vector 5 99)) (pass-if "vector?" (vector? v)) (pass-if "99" (eqv? 99 (vector-ref v 2))) (vector-set! v 2 7) (pass-if "7" (eqv? 7 (vector-ref v 2))) --f46d043d6461c7c5bc04be90c4eb Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hello,

I've attatched a file archiving modules of my= recent version of SRFI-64 implementation and SRFI-78.

=
SRFI-64 is "A Scheme API for test suites."
SRFI-78= is "Lightweight testing."

If you want to test your code, there are 5 options; usi= ng SRFI-64, SRFI-78, unit-test of guile-lib, lib of test-suite in Guile sou= rce=C2=A0archive or your own test suite. Here is four examples:
<= br>
;;; filename: srfi-64-example.scm
(use-modules (s= rfi srfi-64))
(test-begin "vec-test")
(define= v (make-vector 5 99))
(test-assert (vector? v))
(test-= eqv 99 (vector-ref v 2))
(vector-set! v 2 7)
(test-eqv 7 (vector-ref v 2))
= (test-end "vec-test")

;;;=C2=A0fil= ename: srfi-78-example.scm
(use-modules (srfi srfi-78))
(define v (make-vector 5 99))
(check (vector? v) =3D> #t)=
(check (vector-ref v 2) =3D> 99)
(vector-set! v 2 7= )
(check (vector-ref v 2) =3D> 7)

;;; filename: unit-test-example.scm
(use-modules (unit-test)= =C2=A0(oop goops))
(define v (make-vector 5 99))
(defin= e-class <vec-test> (<test-case>))
(define-method (tes= t-vector? (self <vec-test>))
=C2=A0 (assert-true (vector? v)))
(define-method (test-99 (s= elf <vec-test>))
=C2=A0 (assert-equal 99 (vector-ref v 2)))=
(define-method (test-7 (self <vec-test>))
=C2=A0= (vector-set! v 2 7)
=C2=A0 (assert-equal 7 (vector-ref v 2)))
(exit-with-summary= (run-all-defined-test-cases))

;;;=C2=A0file= name: test-suite-example.scm
(use-modules (test-suite lib))<= /div>
(define v (make-vector 5 99))
(pass-if "vector?" (vecto= r? v))
(pass-if "99" (eqv? 99 (vector-ref v 2)))
<= div>(vector-set! v 2 7)
(pass-if "7" (eqv? 7 (vector-re= f v 2)))


--f46d043d6461c7c5bc04be90c4eb-- --f46d043d6461c7c5c004be90c4ed Content-Type: application/x-gzip; name="srfi-64_and_srfi-78.tar.gz" Content-Disposition: attachment; filename="srfi-64_and_srfi-78.tar.gz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h1hgzzeg0 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 --f46d043d6461c7c5c004be90c4ed--