[plt-scheme] parameterized test-suites with units?
define-unit-binding just makes the binding available inside the scope
in the same way define-unit does. You still need to invoke it as
before:
(define-values/invoke-unit/infer
(export foo^)
(link blah1@ the-foo@))
Jay
On Tue, May 11, 2010 at 11:06 AM, Todd O'Bryan <toddobryan at gmail.com> wrote:
> I already thanked Jay, but his help was not sufficient for my ignorance.
>
> Here's my latest attempt:
>
> #lang scheme
> (require schemeunit)
>
> (define-signature blah^
> ((contracted
> [get-value (-> any/c)])))
>
> (define-signature foo^
> ((contracted
> [to-string (-> string?)])))
>
> (define-unit blah1@
> (import)
> (export blah^)
>
> (define (get-value)
> 3))
>
> (define-unit blah2@
> (import)
> (export blah^)
>
> (define (get-value)
> 'x))
>
> (define-unit foo1@
> (import blah^)
> (export foo^)
>
> (define (to-string)
> (format "~a" (get-value))))
>
> (define-unit foo2@
> (import blah^)
> (export foo^)
>
> (define (to-string)
> (format "~s" (get-value))))
>
> (define (make-blah-test-suite blah@ foo@ expected)
> (define-unit-binding the-foo@
> foo@
> (import (tag blah@ blah^))
> (export (tag foo@ foo^)))
>
> (check-equal? (to-string) expected))
>
> The problem is that to-string isn't recognized, so I need to invoke
> the unit and have the function inside it be available.
>
> I think I'm close...
>
> Todd
>
> On Tue, May 11, 2010 at 9:16 AM, Jay McCarthy <jay.mccarthy at gmail.com> wrote:
>> You want "define-unit-binding". That takes a unit expr, like blah@,
>> and gives it a static unit binding inside a new scope.
>>
>> Jay
>>
>> On Tue, May 11, 2010 at 7:13 AM, Todd O'Bryan <toddobryan at gmail.com> wrote:
>>> The example below is illustrative:
>>>
>>> Basically, I have two signatures with units that satisfy them. To test
>>> the units, I link them and use standard Scheme Unit tests.
>>>
>>> #lang scheme
>>> (require schemeunit)
>>>
>>> (define-signature blah^
>>> ((contracted
>>> [get-value (-> any/c)])))
>>>
>>> (define-signature foo^
>>> ((contracted
>>> [to-string (-> string?)])))
>>>
>>> (define-unit blah1@
>>> (import)
>>> (export blah^)
>>>
>>> (define (get-value)
>>> 3))
>>>
>>> (define-unit foo@
>>> (import blah^)
>>> (export foo^)
>>>
>>> (define (to-string)
>>> (format "~a" (get-value))))
>>>
>>> (define-values/invoke-unit/infer
>>> (export foo^)
>>> (link blah1@ foo@))
>>>
>>> (check-equal? (as-string) "3")
>>>
>>> Unfortunately, I have multiple implementations of the same signature
>>> and want to test all of them.
>>>
>>> (define-unit blah2@
>>> (import)
>>> (export blah^)
>>>
>>> (define (get-value)
>>> 'x))
>>>
>>> What I'd like to do is something like
>>>
>>> (define (make-foo-test-suite blah@ expected-value)
>>> ...)
>>>
>>> so I could do
>>>
>>> (define blah1 at -test (make-foo-test-suite blah1@ "3")
>>> (define blah2 at -test (make-foo-test-suite blah2@ "x")
>>>
>>> Unfortunately, I can't replace the ... in make-foo-test-suite with
>>>
>>> (define-values/invoke-unit/infer
>>> (export foo^)
>>> (link blah@ foo@))
>>>
>>> because the (link ...) part expects blah@ not to be a formal
>>> parameter. Clearly I want to use something other than
>>> (define-values/invoke-unit/infer ...). Unfortunately, I can't figure
>>> out what it is that I want to use. :-)
>>>
>>> Any help?
>>>
>>> Thanks,
>>> Todd
>>> _________________________________________________
>>> For list-related administrative tasks:
>>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>>
>>
>>
>>
>> --
>> Jay McCarthy <jay at cs.byu.edu>
>> Assistant Professor / Brigham Young University
>> http://teammccarthy.org/jay
>>
>> "The glory of God is Intelligence" - D&C 93
>>
>
--
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://teammccarthy.org/jay
"The glory of God is Intelligence" - D&C 93