Initial release #1

Merged
warrence merged 102 commits from dev into main 2026-06-30 10:26:52 +02:00

102 Commits

Author SHA1 Message Date
warrence db79da7301 Update cargo package metadata 2026-06-30 10:23:27 +02:00
warrence 6b742a53f5 Update cargo package metadata 2026-06-30 10:21:05 +02:00
warrence fb64e370dc Update readme and license information 2026-06-29 21:04:48 +02:00
warrence 21c95b4796 Add find_path algorithm and tests 2026-06-29 21:03:10 +02:00
warrence f009a86f1e Add GraphTopology.incidence_cursor() for certain use-cases where the iterator is problematic
Also add raw_incidences() and step_incidence() to AppendGraph analogously to
Graph, which allows to remove RawIncidenceIterator and simplify its call sites.
2026-06-26 23:36:41 +02:00
warrence c197766229 Fix formatting 2026-06-26 15:38:49 +02:00
warrence c147ed4974 Update breadth-first search tests 2026-06-26 15:35:23 +02:00
warrence 135f256141 Add depth-first search algorithms and tests 2026-06-26 15:34:42 +02:00
warrence 91ac925417 Add breadth-first search algorithms and tests 2026-06-25 21:56:22 +02:00
warrence e299012948 Move the disconnected test graph to the more general graph_topology_test_fixtures macro 2026-06-25 20:17:55 +02:00
warrence 3adfb4b9eb Add todo for custom weight type for Dijkstra's algorithm 2026-05-18 16:15:46 +02:00
warrence ce692cb0b2 Add trait imports to test functions, making macros self-contained 2026-05-18 15:55:56 +02:00
warrence 465a383683 Add tests for Dijkstra's algorithm with edge weights 2026-05-18 12:48:12 +02:00
warrence 25b5d7864a Refactor Dijkstra test assertions into new functions 2026-05-18 12:45:28 +02:00
warrence 13daf20e1c Update test names for Dijkstra's algorithm to match the tested functions
This should have happened when the functions were renamed with the introduction of custom edge weights
2026-05-13 14:04:07 +02:00
warrence 600664acb6 Update tests for Dijkstra's algorithm to test both graph models
Use the already established macro pattern, move actual tests to a new file in src/testing.
Use the make_test_graph() function from the graph topology tests instead of duplicating it for the Dijkstra tests.
2026-05-13 14:02:07 +02:00
warrence e479074151 Remove todo, proposed change would not affect callers 2026-05-13 12:18:27 +02:00
warrence aaa1b34db3 Add todo that was accidentally removed 2026-05-13 12:16:10 +02:00
warrence f862ac55ec Add GraphTopology::incident_edges() and tests 2026-05-13 10:59:38 +02:00
warrence 384dca2d20 Fix inconsistent local var name in test function 2026-05-13 10:58:47 +02:00
warrence 340fde2133 Add Graph::raw_incidences() iterator as a wrapper for step_incidence() 2026-05-13 10:32:37 +02:00
warrence 6191def324 Fix format 2026-05-13 10:30:36 +02:00
warrence ff148532ab Move maps tests to integration tests 2026-05-12 18:32:45 +02:00
warrence f1d5ccafd2 Add len() for VertexMap and EdgeMap 2026-05-12 18:26:52 +02:00
warrence be63527478 Add incident vertices to edges return value in make_test_graph() fixture 2026-05-12 13:55:04 +02:00
warrence ac688b4fc0 Extracted some assert code for GraphTopology::incidences into new fn 2026-05-12 13:39:13 +02:00
warrence f45fc98afc Add GraphTopology::incident_vertices and tests 2026-05-12 13:37:27 +02:00
warrence 85e25ef0ca Refactor Graph iterator structs into private method used with std::iter::from_fn() 2026-05-08 20:48:43 +02:00
warrence 2eb054eb0c Refactor AppendGraph iterators into one RawIncidenceIterator 2026-05-08 20:40:20 +02:00
warrence 0f5f0d67d2 Update Dijkstra's to use incidences instead of neighbors, and with it custom edge weights 2026-05-08 13:16:23 +02:00
warrence 0bcd270d12 Add GraphTopology::incidences(), update and add related tests 2026-05-08 13:12:23 +02:00
warrence d3fcd690a5 Remove deprecated From<Vertex> for usize implementation 2026-05-08 12:57:16 +02:00
warrence 4e47573290 Renamed the private graph iterators to attune for upcoming changes 2026-05-07 18:01:16 +02:00
warrence a7be995e34 Change "neighbor" terminology to "adjacent vertex" throughout the code 2026-05-07 17:34:20 +02:00
warrence 726e7691ea Add weight parameter for Dijkstra's algorithm, add unweighted variants (unused) 2026-05-07 17:15:34 +02:00
warrence 6fe3acb306 Add EdgeMap and private generic EntityMap, update tests 2026-05-07 16:03:17 +02:00
warrence e074fdf944 Move edge_count() in method order 2026-05-07 11:38:15 +02:00
warrence 016cece626 Update VertexMap tests to validate both graph models 2026-05-07 00:12:06 +02:00
warrence 7f91743b02 Add VertexMap tests for Graph (vertex deletion) 2026-05-06 23:37:48 +02:00
warrence 166b91cdd2 Update Dijkstra's algorithm to use VertexMap 2026-05-06 20:28:53 +02:00
warrence f40c03b113 Add VertexMap to attach data to vertices 2026-05-06 20:28:00 +02:00
warrence 6e9867a65e Add GraphTopology::edges() and tests 2026-05-05 22:54:33 +02:00
warrence c589095737 Add test for GraphTopology::vertices() after delete 2026-05-05 22:52:07 +02:00
warrence 18245b9955 Add Copy and Eq traits to GraphTopology::Edge 2026-05-05 22:37:32 +02:00
warrence feaca335b1 Add loops and multi-edges to the test graph, fix neighbors() test 2026-05-05 19:21:48 +02:00
warrence 8324f93ebd Add graph topology test helper macros to deduplicate test code 2026-04-30 17:41:53 +02:00
warrence 09c5850ff3 Add Graph::delete_vertex() implementation 2026-04-29 20:50:19 +02:00
warrence b3dc0ea666 Add test for Graph vertex deletion with loop 2026-04-29 20:49:34 +02:00
warrence 5b0d6ca1ad Fix Graph::delete_edge() for paired index with loops
- Add new tests for this case
- Fix double list traversal for loop deletions
- Rename Graph::delete_incidence() to update_incidence_list(), and its arguments and local vars
2026-04-29 18:24:10 +02:00
warrence 2793f8af8a Add Graph::delete_edge() implementation 2026-04-28 17:39:32 +02:00
warrence ceedea6a0f Fix formatting 2026-04-28 17:38:41 +02:00
warrence 8e0b3325f5 Update and adds tests for Graph edge deletion 2026-04-28 17:36:38 +02:00
warrence f075501828 Add comments for AppendGraph and Graph add_incidence() 2026-04-28 17:35:00 +02:00
warrence 0ae4d486cb Add and update todos 2026-04-28 17:29:54 +02:00
warrence a8168b35e4 Add unit tests for GraphTopologyDeletion for Graph 2026-04-23 22:50:11 +02:00
warrence 0a30307a0d Update todos 2026-04-23 22:49:12 +02:00
warrence 37a911dce0 Change GraphTopology implementation for Graph with generational arena 2026-04-23 18:25:23 +02:00
warrence 67e16f50cd Fix same issues in Graph draft as well 2026-04-23 18:23:54 +02:00
warrence 02cd1a0dea Fix several minor issues in AppendGraph::are_adjacent(), unit tests, and formatting 2026-04-23 18:18:36 +02:00
warrence 6180786e33 Fix AppendGraph unit tests 2026-04-23 18:13:10 +02:00
warrence eabde7d635 Add Default implementation for AppendGraph 2026-04-23 18:10:43 +02:00
warrence b54800c1be Add new GraphTopologyDeletion trait for Graph to implement 2026-04-22 16:33:33 +02:00
warrence 8126352c9b Add Graph as a straight copy of AppendGraph 2026-04-22 16:33:05 +02:00
warrence d0cbebcae0 Fix formatting 2026-04-22 16:32:17 +02:00
warrence ee26b7a3e0 Move AppendGraph to its own module 2026-04-22 16:31:17 +02:00
warrence a939f9b889 Add Dijkstra variant without returning predecessors 2026-04-22 15:50:45 +02:00
warrence a250bde626 Add DijkstraResult return type instead of unnamed tuple 2026-04-22 14:49:07 +02:00
warrence 41f2332735 Add test for add_edge() return value 2026-04-22 14:36:41 +02:00
warrence ab830ed221 Rename Graph to AppendGraph for future other graph models 2026-04-22 14:31:11 +02:00
warrence 9088dd4683 Add edge return type to GraphTopology::add_edge()
There is currently no use for the return type, but it will come.
2026-04-22 14:28:21 +02:00
warrence da9ba7b0ad Add GraphTopology trait and use it to interface graph model with algorithm 2026-04-22 14:26:35 +02:00
warrence 489ed6d506 Combine next_incidences and incidence_vertices of Graph into one, and rename incidence_headers to vertices 2026-03-19 21:21:52 +01:00
warrence c5a0f2a3f6 Add tests for loops and multiple edges 2025-11-03 14:03:21 +01:00
warrence 3565b6b548 Remove pub from structs and fields that should have been private
Graph fields can now be private because of the new iterators Graph::vertices()
and Graph::neighbors(). Without them there was no way to access vertices and
incidences without the public Graph fields.
2025-10-25 01:23:05 +02:00
warrence 5ad480b379 Add tests for Dijkstra's algorithm on trivial graphs 2025-10-25 01:15:16 +02:00
warrence 64d0302d64 Update Dijkstra's algorithm to use Graph::neighbors() iterator 2025-10-25 01:03:02 +02:00
warrence 149db22fe8 Add todo 2025-10-25 00:57:29 +02:00
warrence 761920b2c0 Update Graph::are_adjacent() to use neighbors() iterator 2025-10-25 00:56:24 +02:00
warrence 50f3a150bb Add tests for some trivial graphs 2025-10-25 00:51:48 +02:00
warrence 6ff02f8c67 Update vertex iterator tests 2025-10-25 00:41:08 +02:00
warrence a26b0eba8c Add tests for Graph::neighbors() 2025-10-24 23:29:25 +02:00
warrence 74ca390ac2 Add tests for Graph::vertices() 2025-10-24 23:20:48 +02:00
warrence 72d3c06f1e Rename Graph::iter() to Graph::vertices() 2025-10-21 16:38:02 +02:00
warrence dd76355a70 Add iterator over neighbors of a vertex Graph::neighbors() 2025-10-21 16:36:53 +02:00
warrence 0826e140b8 Add iterator over vertices Graph::iter() 2025-10-21 15:57:48 +02:00
warrence bff8ca6857 Move main() code into tests and remove binary crate 2025-10-15 17:09:11 +02:00
warrence a4ed7ea44e Update todos 2025-10-11 21:44:20 +02:00
warrence 66e1498c76 Add Graph::new() 2025-10-08 17:04:25 +02:00
warrence 679b597f92 Add todo 2025-10-08 14:38:28 +02:00
warrence 720f497b64 Add "algorithms" and "models" modules for existing code and related todos 2025-10-08 14:32:52 +02:00
warrence 46675a1246 Add success message at the end of main() 2025-10-08 14:30:14 +02:00
warrence 43974d6754 Add todos 2025-10-08 13:42:50 +02:00
warrence e879316a4c Update todo 2025-10-06 19:25:20 +02:00
warrence 5bf723928b Update test assertions in main() 2025-10-06 18:43:37 +02:00
warrence 2a35c47ad4 Add basic Dijkstra algorithm with test in main() 2025-10-06 18:34:17 +02:00
warrence 04c9150172 Reformat code with rustfmt 2025-10-06 10:59:49 +02:00
warrence e518d72a9e Rename Graph.vertex_incidence_headers to "incidence_headers" 2025-10-06 10:53:54 +02:00
warrence 5a1080783c Add Graph example test 2025-10-06 10:23:21 +02:00
warrence 58f330ef46 Fix are_adjacent() method
Next incidence was not updated correctly, which could lead to bad results and infinite loops.
2025-10-06 10:23:19 +02:00
warrence b85edb1287 Add RustRover files 2025-10-06 10:23:15 +02:00
warrence 2e72de2281 Add experimental Graph implementation 2025-10-06 10:23:11 +02:00
warrence e07389aed8 Add cargo init files 2025-10-06 10:22:34 +02:00