Skip to content

Instantly share code, notes, and snippets.

@JoshCheek
Created February 18, 2010 20:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JoshCheek/308027 to your computer and use it in GitHub Desktop.
Save JoshCheek/308027 to your computer and use it in GitHub Desktop.
# 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