Add cal

I'd be interested to hear what they team think about use of "assert", I think the trend is that an exception should be thrown, which assert will only do if specific command line params are passed to the jvm.  As a result, assert use is considered bad (hence Guava's Preconditions class).