<!--
 Copyright (c) 2001-2010, Purdue University. All rights reserved.
 Copyright (C) 2015 Apple Inc. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
  * Neither the name of the Purdue University nor the
    names of its contributors may be used to endorse or promote products
    derived from this software without specific prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->

<html>
<head>
<title>CDjs</title>
<script src="constants.js"></script>
<script src="util.js"></script>
<script src="red_black_tree.js"></script>
<script src="call_sign.js"></script>
<script src="vector_2d.js"></script>
<script src="vector_3d.js"></script>
<script src="motion.js"></script>
<script src="reduce_collision_set.js"></script>
<script src="simulator.js"></script>
<script src="collision.js"></script>
<script src="collision_detector.js"></script>
<script src="benchmark.js"></script>
<script>
    function runTest() {
        var result = benchmark();
        document.getElementById("result-summary").innerHTML = "Average worst case: " + result;
    }
</script>
</head>
<body>
<h1>CDjs</h1>
<p>
  <div id="result-summary"></div>
  <div><a href="javascript:runTest()">Start Test</a></div>
</p>
</body>
</html>

