Created
February 18, 2010 20:28
-
-
Save JoshCheek/308027 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# a better h_hat for http://www.gamedev.net/reference/articles/article2003.asp | |
# better because h_hat <= h, for all 'squares' | |
require 'test/unit' | |
ADJACENT_COST = 10 | |
DIAGONAL_COST = 14 | |
def heuristic(y,x) | |
lesser , greater = [ y.abs , x.abs ].sort | |
DIAGONAL_COST * lesser + ADJACENT_COST * ( greater - lesser ) | |
end | |
class TestHeuristic < Test::Unit::TestCase | |
def test_on | |
assert_equal 0 , heuristic(0,0) | |
end | |
def test_on_horizontal | |
assert_equal ADJACENT_COST*1 , heuristic( -1,0) | |
assert_equal ADJACENT_COST*50 , heuristic(-50,0) | |
assert_equal ADJACENT_COST*1 , heuristic( 1,0) | |
assert_equal ADJACENT_COST*50 , heuristic( 50,0) | |
end | |
def test_on_vertical | |
assert_equal ADJACENT_COST*1 , heuristic(0, -1) | |
assert_equal ADJACENT_COST*50 , heuristic(0,-50) | |
assert_equal ADJACENT_COST*1 , heuristic(0, 1) | |
assert_equal ADJACENT_COST*50 , heuristic(0, 50) | |
end | |
def test_on_diagonal_up_right | |
assert_equal DIAGONAL_COST*1 , heuristic( 1, 1) | |
assert_equal DIAGONAL_COST*50 , heuristic( 50, 50) | |
assert_equal DIAGONAL_COST*1 , heuristic( -1, -1) | |
assert_equal DIAGONAL_COST*50 , heuristic(-50, -50) | |
end | |
def test_on_diagonal_up_left | |
assert_equal DIAGONAL_COST*1 , heuristic( -1, 1) | |
assert_equal DIAGONAL_COST*50 , heuristic(-50, 50) | |
assert_equal DIAGONAL_COST*1 , heuristic( 1, -1) | |
assert_equal DIAGONAL_COST*50 , heuristic( 50, -50) | |
end | |
def test_on_quadrant_1 | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 1, 2) | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 2, 1) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 3, 5) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 5, 3) | |
end | |
def test_on_quadrant_2 | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 1, -2) | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 2, -1) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 3, -5) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 5, -3) | |
end | |
def test_on_quadrant_3 | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 1, 2) | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 2, 1) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 3, 5) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 5, 3) | |
end | |
def test_on_quadrant_4 | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 1, 2) | |
assert_equal DIAGONAL_COST+ADJACENT_COST , heuristic( 2, 1) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 3, 5) | |
assert_equal DIAGONAL_COST*3+ADJACENT_COST*2 , heuristic( 5, 3) | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment