Packages
mneme
0.2.3
0.10.2
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.9.0-alpha.1
0.9.0-alpha.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.3.0-rc.1
0.3.0-rc.0
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Snapshot testing tool using familiar assertions
Current section
Files
Jump to
Current section
Files
lib/mneme/diff/edge.ex
defmodule Mneme.Diff.Edge do
@moduledoc false
alias __MODULE__
alias Mneme.Diff.SyntaxNode
defstruct [:type, :kind, :side, :node, depth_difference: 0, edit_script: []]
@type t :: %Edge{
type: :novel | :unchanged,
kind: :branch | :node,
side: :left | :right,
depth_difference: non_neg_integer(),
node: SyntaxNode.t(),
edit_script: [{:eq | :novel, String.t()}]
}
@doc "Construct an edge representing a novel node."
def novel(kind, side, node, edit_script \\ []) do
%Edge{type: :novel, kind: kind, side: side, node: node, edit_script: edit_script}
end
@doc "Construct an edge representing an unchanged node."
def unchanged(kind, node, depth_difference \\ 0) do
%Edge{type: :unchanged, kind: kind, node: node, depth_difference: depth_difference}
end
@doc "The cost of taking this edge."
def cost(edge)
def cost(%Edge{type: :unchanged, kind: :node, depth_difference: dd}), do: dd + 1
def cost(%Edge{type: :unchanged, kind: :branch, depth_difference: dd}), do: dd + 10
def cost(%Edge{type: :novel, kind: :branch}), do: 300
def cost(%Edge{type: :novel, kind: :node, node: node}) do
290 + 160 * node.n_descendants
end
end