<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: On unit testing and type checking</title>
	<atom:link href="http://blog.tupil.com/on-unit-testing-and-type-checking/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tupil.com/on-unit-testing-and-type-checking/</link>
	<description>(Get up early, code often)</description>
	<lastBuildDate>Mon, 08 Feb 2010 22:03:01 +0100</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: sakthi</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-10115</link>
		<dc:creator>sakthi</dc:creator>
		<pubDate>Tue, 30 Jun 2009 08:20:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-10115</guid>
		<description>HI..

Good Article...

I like to use both unit testing and strong static typing both at the same time, checking for different things. I had read another Article in this topic from macrotesting  www.macrotesting.com had explained it in a different way but your article is so clear and easy to understand. Thank you ....

Cheers
sakthi</description>
		<content:encoded><![CDATA[<p>HI..</p>
<p>Good Article&#8230;</p>
<p>I like to use both unit testing and strong static typing both at the same time, checking for different things. I had read another Article in this topic from macrotesting  <a href="http://www.macrotesting.com" rel="nofollow">http://www.macrotesting.com</a> had explained it in a different way but your article is so clear and easy to understand. Thank you &#8230;.</p>
<p>Cheers<br />
sakthi</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reinier Lamers</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1517</link>
		<dc:creator>Reinier Lamers</dc:creator>
		<pubDate>Tue, 28 Oct 2008 00:22:34 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1517</guid>
		<description>Great insight! 

Still I like to use both unit testing and strong static typing both at the same time, checking for different things. When I code in C# or Haskell, the type checker checks for stupid mistakes where I have not clearly expressed my toughts in the programming language, while the unit tests try to find cases that I have forgotten to pay attention to when thinking about the problem.</description>
		<content:encoded><![CDATA[<p>Great insight! </p>
<p>Still I like to use both unit testing and strong static typing both at the same time, checking for different things. When I code in C# or Haskell, the type checker checks for stupid mistakes where I have not clearly expressed my toughts in the programming language, while the unit tests try to find cases that I have forgotten to pay attention to when thinking about the problem.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Eidhof</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1441</link>
		<dc:creator>Chris Eidhof</dc:creator>
		<pubDate>Fri, 24 Oct 2008 12:14:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1441</guid>
		<description>Paul: yes, that&#039;s completely true. However, the types of theorems you can state depend on your type-system. For example, it&#039;s not trivial in Haskell to state that an append of two lists xs and ys yields a list with length = length xs + length ys. With unit-tests this is easier to test, and with dependent types you can even do that in your type system. So in a way, they provide you with the ultimate Curry-Howard isomorphism.</description>
		<content:encoded><![CDATA[<p>Paul: yes, that&#8217;s completely true. However, the types of theorems you can state depend on your type-system. For example, it&#8217;s not trivial in Haskell to state that an append of two lists xs and ys yields a list with length = length xs + length ys. With unit-tests this is easier to test, and with dependent types you can even do that in your type system. So in a way, they provide you with the ultimate Curry-Howard isomorphism.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Johnson</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1436</link>
		<dc:creator>Paul Johnson</dc:creator>
		<pubDate>Fri, 24 Oct 2008 10:35:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1436</guid>
		<description>Actually it goes deeper than that.  The Curry-Howard Isomorphism says that a function type is equivalent to a theorem, and the implementation of the function is equivalent to a proof of that theorem (see Wikipedia for more info).  Hence writing down the type of a function is the first step to writing a formal specification, and the more precise your type definitions, the more precise your specification will be.  

On the other hand the test-driven-development approach uses point test data as a semi-formal specification.  And of course Haskell QuickCheck and its relatives use a formal specification of the function to generate random test data and verify that the results are correct.</description>
		<content:encoded><![CDATA[<p>Actually it goes deeper than that.  The Curry-Howard Isomorphism says that a function type is equivalent to a theorem, and the implementation of the function is equivalent to a proof of that theorem (see Wikipedia for more info).  Hence writing down the type of a function is the first step to writing a formal specification, and the more precise your type definitions, the more precise your specification will be.  </p>
<p>On the other hand the test-driven-development approach uses point test data as a semi-formal specification.  And of course Haskell QuickCheck and its relatives use a formal specification of the function to generate random test data and verify that the results are correct.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sjoerd Visscher</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1423</link>
		<dc:creator>Sjoerd Visscher</dc:creator>
		<pubDate>Thu, 23 Oct 2008 20:55:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1423</guid>
		<description>At Xopus we have finally started to use unit testing too. The unit tests are now even run automatically when you commit, and if you break a test, an e-mail will be sent to the person who broke the trunk. It works really great.

For my own hobby programming language I&#039;m thinking about using unit tests as the only way to specify interfaces. Types are usually not enough to describe the relation between behavior of functions. With unit tests those relations are lot easier to express.</description>
		<content:encoded><![CDATA[<p>At Xopus we have finally started to use unit testing too. The unit tests are now even run automatically when you commit, and if you break a test, an e-mail will be sent to the person who broke the trunk. It works really great.</p>
<p>For my own hobby programming language I&#8217;m thinking about using unit tests as the only way to specify interfaces. Types are usually not enough to describe the relation between behavior of functions. With unit tests those relations are lot easier to express.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: BONUS</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1422</link>
		<dc:creator>BONUS</dc:creator>
		<pubDate>Thu, 23 Oct 2008 20:39:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1422</guid>
		<description>Man, great post! I&#039;ve been thinking about that too, I just haven&#039;t found the words to express it as eloquently and clearly as you did. In pure functional programming, each function usually does something meaningful on its own by default. In imperative languages, functions and methods sometimes just push some state around or something and don&#039;t do anything meaningful on their own. And once they&#039;re refactored, they look more like their pure functional counterparts.</description>
		<content:encoded><![CDATA[<p>Man, great post! I&#8217;ve been thinking about that too, I just haven&#8217;t found the words to express it as eloquently and clearly as you did. In pure functional programming, each function usually does something meaningful on its own by default. In imperative languages, functions and methods sometimes just push some state around or something and don&#8217;t do anything meaningful on their own. And once they&#8217;re refactored, they look more like their pure functional counterparts.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik Hesselink</title>
		<link>http://blog.tupil.com/on-unit-testing-and-type-checking/comment-page-1/#comment-1420</link>
		<dc:creator>Erik Hesselink</dc:creator>
		<pubDate>Thu, 23 Oct 2008 18:45:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tupil.com/?p=44#comment-1420</guid>
		<description>I guess the Haskellers using QuickCheck (or SmallCheck, etc) are really building top-notch software then! :)</description>
		<content:encoded><![CDATA[<p>I guess the Haskellers using QuickCheck (or SmallCheck, etc) are really building top-notch software then! :)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
