Skip to content

Commit

Permalink
Merge pull request #107 from arnaudgolfouse/use-gdnative-doc
Browse files Browse the repository at this point in the history
Use gdnative-doc for documentation
  • Loading branch information
astrale-sharp authored Mar 12, 2021
2 parents 0bc6b0f + 55af2fb commit 4f1677c
Show file tree
Hide file tree
Showing 9 changed files with 1,255 additions and 464 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Common use cases include: pre-computing pathfinding for tower-defense games, RTS

The library is written in Rust programming language and performance should be comparable to C/C++ (approximately 10-20x faster than GDScript).

Note that the [API](./addons/dijkstra-map/DOCUMENTATION.md) is now stable! Some features may be added over time.
Note that the [API](./addons/dijkstra-map/doc/index.md) is now stable! Some features may be added over time.


## Installing
Expand Down Expand Up @@ -92,7 +92,7 @@ In Godot project you start by creating a new DijkstraMap Node.

* Set weights for different terrain types.

Please, see [DOCUMENTATION.md](./addons/dijkstra-map/DOCUMENTATION.md) for full explanation.
Please, see the [documentation](./addons/dijkstra-map/doc/index.md) for full explanation.

#### The usefulness of terrain

Expand Down
194 changes: 194 additions & 0 deletions Tests/unit/DijkstraMap.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
extends "res://addons/gut/test.gd"

func test_new():
var dijkstra_map = DijkstraMap.new()

func test_clear():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.clear()

func test_duplicate_graph_from():
var dijkstra_map = DijkstraMap.new()
# fill dijkstra_map
var dijkstra_map_copy = DijkstraMap.new()
dijkstra_map_copy.duplicate_graph_from(dijkstra_map)

func test_get_available_point_id():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
assert_eq(dijkstra_map.get_available_point_id(), 2)

func test_add_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0) # terrain_type is -1
dijkstra_map.add_point(1, 0) # terrain_type is 0

func test_set_terrain_for_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0, 2)
dijkstra_map.set_terrain_for_point(0, 1)
assert_eq(dijkstra_map.get_terrain_for_point(0), 1)
dijkstra_map.set_terrain_for_point(0)
assert_eq(dijkstra_map.get_terrain_for_point(0), -1)

func test_get_terrain_for_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0, 1)
dijkstra_map.add_point(1, -1)
assert_eq(dijkstra_map.get_terrain_for_point(0), 1)
assert_eq(dijkstra_map.get_terrain_for_point(1), -1)
# `2` is not in the map, so this returns `-1`
assert_eq(dijkstra_map.get_terrain_for_point(2), -1)

func test_remove_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
assert_eq(dijkstra_map.remove_point(0), 0)
assert_eq(dijkstra_map.remove_point(0), 1)

func test_disable_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
assert_eq(dijkstra_map.disable_point(0), 0)
assert_eq(dijkstra_map.disable_point(1), 1)

func test_enable_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
assert_eq(dijkstra_map.enable_point(0), 0)
assert_eq(dijkstra_map.enable_point(1), 1)

func test_is_point_disabled():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.disable_point(0)
assert(dijkstra_map.is_point_disabled(0))
assert(!dijkstra_map.is_point_disabled(1)) # not disabled
assert(!dijkstra_map.is_point_disabled(2)) # not in the map

func test_connect_points():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1, 2.0)
dijkstra_map.connect_points(1, 2, 1.0, false)
# produces the graph :
# 0 <---> 1 ----> 2
# 2.0 1.0
assert_eq(dijkstra_map.connect_points(1, 3), 1) # 3 does not exists in the map

func test_remove_connection():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.connect_points(0, 1)
dijkstra_map.remove_connection(0, 1)
assert_eq(dijkstra_map.remove_connection(0, 2), 1) # 2 does not exists in the map
dijkstra_map.connect_points(0, 1)
# only removes connection from 0 to 1
dijkstra_map.remove_connection(0, 1, false)
assert(dijkstra_map.has_connection(1, 0))

func test_has_connection():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.connect_points(0, 1, 1.0, false)
assert(dijkstra_map.has_connection(0, 1))
assert(!dijkstra_map.has_connection(1, 0))
assert(!dijkstra_map.has_connection(0, 2))

func test_get_direction_at_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
assert_eq(dijkstra_map.get_direction_at_point(0), 0)
assert_eq(dijkstra_map.get_direction_at_point(1), 0)
assert_eq(dijkstra_map.get_direction_at_point(2), -1)

func test_get_cost_at_point():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
assert_eq(dijkstra_map.get_cost_at_point(0), 0.0)
assert_eq(dijkstra_map.get_cost_at_point(1), 1.0)
assert_eq(dijkstra_map.get_cost_at_point(2), INF)

func test_recalculate():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0, 0)
dijkstra_map.add_point(1, 1)
dijkstra_map.add_point(2, 0)
dijkstra_map.connect_points(0, 1)
dijkstra_map.connect_points(1, 2, 10.0)
var optional_params = {
"terrain_weights": { 0: 1.0, 1: 2.0 },
"input_is_destination": true,
"maximum_cost": 2.0,
}
dijkstra_map.recalculate(0, optional_params)
assert_eq(dijkstra_map.get_direction_at_point(0), 0)
assert_eq(dijkstra_map.get_direction_at_point(1), 0)
# 2 is too far from 0, so because we set "maximum_cost" to 2.0, it is innaccessible.
assert_eq(dijkstra_map.get_direction_at_point(2), -1)

func test_get_direction_at_points():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
assert_eq(Array(dijkstra_map.get_direction_at_points(PoolIntArray([0, 1, 2]))), [0, 0, -1])

func test_get_cost_at_points():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
assert_eq(Array(dijkstra_map.get_cost_at_points(PoolIntArray([0, 1, 2]))), [0.0, 1.0, INF])

func test_get_cost_map():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
var cost_map = { 0: 0.0, 1: 1.0 }
var computed_cost_map = dijkstra_map.get_cost_map()
for id in computed_cost_map.keys():
assert_eq(computed_cost_map[id], cost_map[id])

func test_get_direction_map():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
var direction_map = { 0: 0, 1: 0 }
var computed_direction_map = dijkstra_map.get_direction_map()
for id in computed_direction_map.keys():
assert_eq(computed_direction_map[id], direction_map[id])

func test_get_all_points_with_cost_between():
var dijkstra_map = DijkstraMap.new()
dijkstra_map.add_point(0)
dijkstra_map.add_point(1)
dijkstra_map.add_point(2)
dijkstra_map.connect_points(0, 1)
dijkstra_map.recalculate(0)
assert_eq(Array(dijkstra_map.get_all_points_with_cost_between(0.5, 1.5)), [1])

Loading

0 comments on commit 4f1677c

Please sign in to comment.