Learning Languages Followup; Test Languages

I managed to write a new language, and 135 unit tests in that language, in a single day. When I talked about big wins coming from writing in the correct language, this is what I meant.

So, the language is a test language for a function library. We have arithmentic, date, string, and other functions that we need to test. Each function is identified internally by a GUID, and may be configured. So the language looks like;

01 #
02 # Check Array Sum function
03 #
04 declare Sum = {11669A5A-45BA-46c0-A6F6-97CDE4F5CAA5}
05 Sum(null) = null
06 Sum([]) = 0
07 Sum([1.0, 2.0]) = 3.0

In this short script, I add comments, give a function a name (binding the name `Sum` to the function identified with the id `{11669A5A-45BA-46c0-A6F6-97CDE4F5CAA5}`. Then, I define three tests; `Sum(null) = null` means what you would expect; call the sum function, passing in a single null parameter; the result should be null.

Having defined this language (which, I think, took me about an hour) I was then able to write about 135 tests with relative ease. The equivalent C# unit tests would be full of repetition and would not express their meaning anywhere near as fully. You’ve have something like;

[TestMethod]
public void TestSumNullIsNull()
{
var expected = (double)null;
var thefunction = FieldModifierHost.Instance()[“{11669A5A-45BA-46c0-A6F6-97CDE4F5CAA5}”];
var maker = thefunction.MakeMethod();
var instance = maker(new object[]{});
var result = instance(null);
Assert.AreEqual(expected, result);
}

Which is frankly impenetrable.

PS: I’ve just had a colleague add a number of tests, without any instruction, and he’s managed to put confidence tests around a function he wants to change in minutes. Unit test languages FTW!

Markdown in wordpress

I’m just starting to use [markdown][md], a simple markup language that looks a lot like the old plaintext email syntax common on the early intarpipes.

Here’s how you write **bold** and _italics_, and
here’s how you write a link to [stevecooper.org][scorg]

[scorg]: http://www.stevecooper.org

which turns into

Here’s how you write **bold** and _italics_, and here’s how
you write a link to [stevecooper.org][scorg]

[scorg]: http://www.stevecooper.org

this words with [Wordpress] which powers this blog, and is also available as a little script to turn your plain ole text files into lovely html. Nice if you’re more comfortable using plain text over html. Or if, like me, you’ve got a huge chunk of stuff already written in it…

[md]: http://daringfireball.net
: http://www.wordpress.com