TL;DR: Interested in using core.logic for test data generation? I may have the 
"stunted framework" [1] for you.

--------
I've spent an entertaining few weeks learning core.logic and putting it into 
practice. Because I learn by writing app-like code, I used it to generate 
constrained hierarchical test data for an existing app.

The application under test reserves teaching animals at the University of 
Illinois vet school. (Think meeting room scheduling, but with more and weirder 
business rules.) I wrote a framework that (I hope!) makes it not-too-hard to 
create data generation functions like this:

   (one-reservation?> [[- {:days_delay 0}] [{:species :bovine} -]])

This reserves one "group" of two procedure/animal pairs. In the first pair, 
we're happy to take any animal, but the procedure must  be the kind of 
low-stress procedure that can be done as often as you like. In the second pair, 
we care nothing about the procedure, but the animal must be a cow. In all 
cases, the procedure must apply to that species of animal. (It makes no sense 
to float the teeth of a cow, as I'm sure you know.)

>From the above, we'd get something like this:
    [ [ ["Genesis" "transabdominal ultrasonography"]
        ["Brooke" "physical examination"] ] ]

The strings are indexes into map-like data. It is a Small Matter of Programming 
to turn the structure into an appropriate series of SQL inserts.

------

I think the results are promising. But the original application is written in 
Ruby, so it's not like I can actually use this code in real life. I largely 
wrote it to see whether test data generation would be a good case study for a 
logic programming talk at Software Craftsmanship North America. I've concluded 
it is.

So I'm OK letting this sit as is. If this might be of use to you, please to 
read the wiki documentation I've written, make a judgment, and let me know:

https://github.com/marick/peano

--------

[1] "Stunted framework" is a term due to Michael Feathers: it's one that 
doesn't try to be *so* universal that it's too hard to learn and too fiddly to 
work with, but that also doesn't require so much coding that it doesn't save 
you enough work. http://www.artima.com/weblogs/viewpost.jsp?thread=8826



-----
Brian Marick, Artisanal Labrador
Contract programming in Ruby and Clojure
Occasional consulting on Agile
www.exampler.com, www.twitter.com/marick

-- 
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
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to