Skip to content

Instantly share code, notes, and snippets.

@mpugach
Last active September 22, 2022 14:08
Show Gist options
  • Save mpugach/a04bf0ee6962b8edab43933e9075c577 to your computer and use it in GitHub Desktop.
Save mpugach/a04bf0ee6962b8edab43933e9075c577 to your computer and use it in GitHub Desktop.

Revisions

  1. mpugach revised this gist Sep 22, 2022. 1 changed file with 2 additions and 29 deletions.
    31 changes: 2 additions & 29 deletions deep_compare.ex
    Original file line number Diff line number Diff line change
    @@ -6,40 +6,13 @@ defmodule DeepCompare do
    end

    def call([element_a | rest_of_a], [element_b | rest_of_b]) do
    result =
    if (is_list(element_a) and is_list(element_b)) or (is_map(element_a) and is_map(element_b)) do
    call(element_a, element_b)
    else
    sub_result = element_a === element_b

    unless sub_result, do: IO.inspect({element_a, element_b}, label: "Compare List")

    sub_result
    end

    result and call(rest_of_a, rest_of_b)
    end

    def call([], []) do
    true
    end

    def call([], payload_b) do
    IO.inspect({[], payload_b}, label: "Compare List")

    false
    end

    def call(payload_a, []) do
    IO.inspect({payload_a, []}, label: "Compare List")

    false
    call(element_a, element_b) and call(rest_of_a, rest_of_b)
    end

    def call(payload_a, payload_b) do
    result = payload_a === payload_b

    unless result, do: IO.inspect({payload_a, payload_b}, label: "Compare RAW")
    unless result, do: IO.inspect({payload_a, payload_b}, label: "Difference")

    result
    end
  2. mpugach created this gist Sep 22, 2022.
    46 changes: 46 additions & 0 deletions deep_compare.ex
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,46 @@
    defmodule DeepCompare do
    def call(payload_a, payload_b) when is_map(payload_a) and is_map(payload_b) do
    Enum.reduce(payload_a, true, fn {k, v}, acc ->
    acc and call(v, payload_b[k])
    end)
    end

    def call([element_a | rest_of_a], [element_b | rest_of_b]) do
    result =
    if (is_list(element_a) and is_list(element_b)) or (is_map(element_a) and is_map(element_b)) do
    call(element_a, element_b)
    else
    sub_result = element_a === element_b

    unless sub_result, do: IO.inspect({element_a, element_b}, label: "Compare List")

    sub_result
    end

    result and call(rest_of_a, rest_of_b)
    end

    def call([], []) do
    true
    end

    def call([], payload_b) do
    IO.inspect({[], payload_b}, label: "Compare List")

    false
    end

    def call(payload_a, []) do
    IO.inspect({payload_a, []}, label: "Compare List")

    false
    end

    def call(payload_a, payload_b) do
    result = payload_a === payload_b

    unless result, do: IO.inspect({payload_a, payload_b}, label: "Compare RAW")

    result
    end
    end