Skip to content

kushCT/ImmutableGraph

 
 

Repository files navigation

ImmutableGraph

CI Linux CI macOS codecov

SwiftPM Version Platform

License

Examples

Directed graph:

let u = "☝️", v = "✌️"
let vertices = Set(arrayLiteral: u, v)

let e = Edge(source: u, destination: v)
let edges = Set(arrayLiteral: e)

let graph = Graph(vertices: vertices, edges: edges)

Weighted directed graph:

let w_e = WeightedEdge(source: u, destination: v, weight: 3.9)
let weightedEdges = Set(arrayLiteral: w_e)

let weightedGraph = Graph(vertices: vertices, edges: weightedEdges)

DFS from source:

let simpleGraphAnnotation = dfs(graph, source: v)

DFS on graph:

let simpleGraphAnnotation = dfs(graph)

BFS from source:

let simpleGraphAnnotation = bfs(graph, source: v)

Finding paths from graph annotations:

let parentByVertex = simpleGraphAnnotation.parentByVertex
let result = findPath(parentByVertex: parentByVertex, source: s, destination: d)

CocoaPods installation

ImmutableGraph is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "ImmutableGraph"

Swift Package installation

If your package depends on ImmutableGraph, add the following dependency to your Package.swift:

dependencies: [
    .package(url: "https://github.com/horothesun/ImmutableGraph", .upToNextMinor(from: "0.1.0"))
]

Generate Xcode project

swift package generate-xcodeproj

Testing

macOS

swift test

Docker Linux

IMPORTANT: regenerate Linux test list executing

swift test --generate-linuxmain

Execute on base swift:5.2 image

docker run --rm \
    --volume "$(pwd):/package" \
    --workdir '/package' \
    swift:5.2 \
    /bin/bash -c 'swift test'

or create a new image based on Dockerfile and run it

docker build --tag immutable-graph .
docker run --rm immutable-graph

Notes

This library was built using TDD.

Some of the graphs used to unit test BFS and DFS algorithms come from Algorithms with Attitude YouTube channel's related videos:

Author

Nicola Di Pol, horothesun@gmail.com

License

ImmutableGraph is available under the MIT license. See the LICENSE file for more info.

About

Functional Swift graph algorithms.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Swift 98.6%
  • Ruby 1.3%
  • Dockerfile 0.1%