Packages
mneme
0.3.4
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/delta.ex
defmodule Mneme.Diff.Delta do
@moduledoc false
alias __MODULE__
alias Mneme.Diff.SyntaxNode
defstruct [:type, :kind, :side, :node, depth_difference: 0, edit_script: []]
@type t :: %Delta{
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 a delta representing a novel node."
def novel(kind, side, node, edit_script \\ []) do
%Delta{type: :novel, kind: kind, side: side, node: node, edit_script: edit_script}
end
@doc "Construct a delta representing an unchanged node."
def unchanged(kind, node, depth_difference \\ 0) do
%Delta{type: :unchanged, kind: kind, node: node, depth_difference: depth_difference}
end
@doc "The cost of this delta, used for pathfinding."
def cost(edge)
def cost(%Delta{type: :unchanged, kind: :node, depth_difference: dd}), do: dd + 1
def cost(%Delta{type: :unchanged, kind: :branch, depth_difference: dd}), do: dd + 10
def cost(%Delta{type: :novel, kind: :branch}), do: 300
def cost(%Delta{type: :novel, kind: :node, node: node}) do
290 + 160 * node.n_descendants
end
end