<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=User%3APedersen%2FCode_Samples%2FUnit_Testing</id>
	<title>User:Pedersen/Code Samples/Unit Testing - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://robowiki.net/w/index.php?action=history&amp;feed=atom&amp;title=User%3APedersen%2FCode_Samples%2FUnit_Testing"/>
	<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=User:Pedersen/Code_Samples/Unit_Testing&amp;action=history"/>
	<updated>2026-04-17T09:12:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://robowiki.net/w/index.php?title=User:Pedersen/Code_Samples/Unit_Testing&amp;diff=16897&amp;oldid=prev</id>
		<title>RednaxelaBot: Using &lt;syntaxhighlight&gt;.</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=User:Pedersen/Code_Samples/Unit_Testing&amp;diff=16897&amp;oldid=prev"/>
		<updated>2010-07-01T08:37:34Z</updated>

		<summary type="html">&lt;p&gt;Using &amp;lt;syntaxhighlight&amp;gt;.&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 08:37, 1 July 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Following are two examples of unit test scripts.  They are really boring and monotonous to write, but the more exhaustive you are the more likely you are to catch errors with new developments (assuming you run the tests).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Following are two examples of unit test scripts.  They are really boring and monotonous to write, but the more exhaustive you are the more likely you are to catch errors with new developments (assuming you run the tests).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pedersen.physics;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pedersen.physics;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l195&quot; &gt;Line 195:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 195:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pedersen.physics;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;package pedersen.physics;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l259&quot; &gt;Line 259:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 259:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;syntaxhighlight&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikidb:diff::1.12:old-1690:rev-16897 --&gt;
&lt;/table&gt;</summary>
		<author><name>RednaxelaBot</name></author>
		
	</entry>
	<entry>
		<id>http://robowiki.net/w/index.php?title=User:Pedersen/Code_Samples/Unit_Testing&amp;diff=1690&amp;oldid=prev</id>
		<title>Pedersen: migration</title>
		<link rel="alternate" type="text/html" href="http://robowiki.net/w/index.php?title=User:Pedersen/Code_Samples/Unit_Testing&amp;diff=1690&amp;oldid=prev"/>
		<updated>2008-01-11T18:06:30Z</updated>

		<summary type="html">&lt;p&gt;migration&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Following are two examples of unit test scripts.  They are really boring and monotonous to write, but the more exhaustive you are the more likely you are to catch errors with new developments (assuming you run the tests).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package pedersen.physics;&lt;br /&gt;
&lt;br /&gt;
import junit.framework.TestCase;&lt;br /&gt;
import pedersen.core.Constraints;&lt;br /&gt;
&lt;br /&gt;
public class StaticHeadingImplTest extends TestCase&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
	public void testGetHeading()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, rawHeading1, heading.getHeading(), Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithDoubleForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 2.5;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		assertTrue( &amp;quot;Heading discrepancy.&amp;quot;, heading.equalsAngle( rawHeading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithDoubleForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * -1.5;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		assertTrue( &amp;quot;Heading discrepancy.&amp;quot;, heading.equalsAngle( rawHeading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithDoubleForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, heading.equalsAngle( rawHeading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithStaticHeadingForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 2.5;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		assertTrue( &amp;quot;Heading discrepancy.&amp;quot;, heading1.equalsAngle( heading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithStaticHeadingForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * -1.5;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		assertTrue( &amp;quot;Heading discrepancy.&amp;quot;, heading1.equalsAngle( heading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testEqualsAngleWithStaticHeadingForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, heading1.equalsAngle( heading2 ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testGetRelativeAngleWithDoubleForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double relativeHeading = heading.getRelativeAngle( rawHeading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, relativeHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetRelativeAngleWithDoubleForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.1;&lt;br /&gt;
		double rawHeading3 = Math.PI * -0.4;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double relativeHeading = heading.getRelativeAngle( rawHeading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, relativeHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetRelativeAngleWithDoubleForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double relativeHeading = heading.getRelativeAngle( rawHeading2 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, Constraints.areEqual( relativeHeading, rawHeading3 ) );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetRelativeAngleWithStaticHeadingForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double relativeHeading = heading1.getRelativeAngle( heading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, relativeHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetRelativeAngleWithStaticHeadingForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.1;&lt;br /&gt;
		double rawHeading3 = Math.PI * -0.4;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double relativeHeading = heading1.getRelativeAngle( heading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, relativeHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetRelativeAngleWithStaticHeadingForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double relativeHeading = heading1.getRelativeAngle( heading2 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, Constraints.areEqual( relativeHeading, rawHeading3 ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testGetCompoundAngleWithDoubleForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 1.4;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double compoundHeading = heading.getCompoundAngle( rawHeading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, compoundHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetCompoundAngleWithDoubleForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * -0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 1.6;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double compoundHeading = heading.getCompoundAngle( rawHeading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, compoundHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetCompoundAngleWithDoubleForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		double compoundHeading = heading.getCompoundAngle( rawHeading2 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, Constraints.areEqual( compoundHeading, rawHeading3 ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testGetCompoundAngleWithStaticHeadingForPositiveMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 1.4;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double compoundHeading = heading1.getCompoundAngle( heading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, compoundHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetCompoundAngleWithStaticHeadingForNegativeMatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * -0.9;&lt;br /&gt;
		double rawHeading3 = Math.PI * 1.6;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double compoundHeading = heading1.getCompoundAngle( heading2 );&lt;br /&gt;
		assertEquals( &amp;quot;Heading discrepancy.&amp;quot;, compoundHeading, rawHeading3, Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testGetCompoundAngleWithStaticHeadingForMismatch()&lt;br /&gt;
	{&lt;br /&gt;
		double rawHeading1 = Math.PI * 0.5;&lt;br /&gt;
		double rawHeading2 = Math.PI * 0.3;&lt;br /&gt;
		double rawHeading3 = Math.PI * 0.4;&lt;br /&gt;
		StaticHeading heading1 = new StaticHeadingImpl( rawHeading1 );&lt;br /&gt;
		StaticHeading heading2 = new StaticHeadingImpl( rawHeading2 );&lt;br /&gt;
		double compoundHeading = heading1.getCompoundAngle( heading2 );&lt;br /&gt;
		assertFalse( &amp;quot;Heading discrepancy.&amp;quot;, Constraints.areEqual( compoundHeading, rawHeading3 ) );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package pedersen.physics;&lt;br /&gt;
&lt;br /&gt;
import junit.framework.TestCase;&lt;br /&gt;
import pedersen.core.Constraints;&lt;br /&gt;
import pedersen.core.Conversions;&lt;br /&gt;
import pedersen.core.Snapshot;&lt;br /&gt;
import pedersen.core.SnapshotImpl;&lt;br /&gt;
&lt;br /&gt;
public class ProjectionTest extends TestCase&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	public void testConstructorWithSnapshot()&lt;br /&gt;
	{&lt;br /&gt;
		double x = 5.0, y = -2.0;&lt;br /&gt;
		double heading = Math.PI * 0.25;&lt;br /&gt;
		double velocity = -5.5;&lt;br /&gt;
		Snapshot snapshot = new SnapshotImpl( 0, 0, x, y, heading, velocity, 0.0 );&lt;br /&gt;
		Projection projection = new Projection( snapshot );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, x, projection.getX(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, y, projection.getY(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, heading, projection.getHeading(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, velocity, projection.getVelocity(), Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	public void testConstructorWithStaticPositionDoubleDouble()&lt;br /&gt;
	{&lt;br /&gt;
		double x = 5.0, y = -2.0;&lt;br /&gt;
		double heading = Math.PI * 0.25;&lt;br /&gt;
		double velocity = -5.5;&lt;br /&gt;
		StaticPosition staticPosition = new StaticPositionImpl( x, y );&lt;br /&gt;
		Projection projection = new Projection( staticPosition, heading, velocity );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, x, projection.getX(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, y, projection.getY(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, heading, projection.getHeading(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, velocity, projection.getVelocity(), Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testProject()&lt;br /&gt;
	{&lt;br /&gt;
		double x1 = 5.0, y1 = -2.0;&lt;br /&gt;
		double heading1 = Math.PI * 45.0 / 180.0; // 45 degrees&lt;br /&gt;
		double velocity1 = -5.5;&lt;br /&gt;
		double targetHeading = Math.PI * -0.25; // -45 degrees / 315 degrees&lt;br /&gt;
		double maxTurnRate = Conversions.getAbsMaxTurnRateFromVelocity( velocity1 );&lt;br /&gt;
		double targetVelocity = -8.0;&lt;br /&gt;
		double heading2 = heading1 - maxTurnRate;&lt;br /&gt;
		double velocity2 = -6.5;&lt;br /&gt;
		double x2 = x1 + Math.sin( heading2 ) * velocity2;&lt;br /&gt;
		double y2 = y1 + Math.cos( heading2 ) * velocity2;&lt;br /&gt;
		StaticPosition staticPosition = new StaticPositionImpl( x1, y1 );&lt;br /&gt;
		Projection projection = new Projection( staticPosition, heading1, velocity1 );&lt;br /&gt;
		projection.setAbsoluteTargetHeading( targetHeading );&lt;br /&gt;
		projection.setAbsoluteTargetVelocity( targetVelocity );&lt;br /&gt;
		projection.project();&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, x2, projection.getX(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, y2, projection.getY(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, heading2, projection.getHeading(), Constraints.doubleErrorTolerance );&lt;br /&gt;
		assertEquals( &amp;quot;Projection discrepancy.&amp;quot;, velocity2, projection.getVelocity(), Constraints.doubleErrorTolerance );&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pedersen</name></author>
		
	</entry>
</feed>