From a7fd86d6670c348d1d9b7735830c87a274311e11 Mon Sep 17 00:00:00 2001
From: Michal Kovac <miso@github.ksp.sk>
Date: Fri, 4 Jun 2021 14:15:11 +0200
Subject: [PATCH 1/2] Fixes #24 crash when keys were removed from a map

---
 src/main/scala/diff.scala | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main/scala/diff.scala b/src/main/scala/diff.scala
index 6c24f65..c70401b 100644
--- a/src/main/scala/diff.scala
+++ b/src/main/scala/diff.scala
@@ -305,7 +305,7 @@ abstract class DiffShowInstances2 extends DiffShowInstancesLowPriority {
       val identical = left.keys.toList intersect right.keys.toList
       val removed = left.keys.toList diff right.keys.toList
       val added = right.keys.toList diff left.keys.toList
-      def show( keys: List[K] ) = keys.map( k => DiffShow.show( k ) -> DiffShow.show( right( k ) ) )
+      def show( keys: List[K], m: Map[K, V] ) = keys.map( k => DiffShow.show( k ) -> DiffShow.show( m( k ) ) )
       val changed = for {
         key <- left.keys.toList diff removed
         Different( s ) <- DiffShow.diff( left( key ), right( key ) ) :: Nil
@@ -316,8 +316,8 @@ abstract class DiffShowInstances2 extends DiffShowInstancesLowPriority {
           "Map",
           identical.map( _ => None ) ++ Seq(
             changed,
-            show( removed ).map( ( arrow _ ).tupled ).map( red ),
-            show( added ).map( ( arrow _ ).tupled ).map( green )
+            show( removed, left ).map( ( arrow _ ).tupled ).map( red ),
+            show( added, right ).map( ( arrow _ ).tupled ).map( green )
           ).flatten.map( s => Option( ( "", s ) ) )
         )
       if ( removed.isEmpty && added.isEmpty && changed.isEmpty )

From 04cea25244c346fe59ddc27b7df7e02ac50576fe Mon Sep 17 00:00:00 2001
From: kovac <ext-michal.kovac@here.com>
Date: Fri, 4 Jun 2021 14:22:09 +0200
Subject: [PATCH 2/2] Add tests

---
 src/test/scala/Main.scala | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/test/scala/Main.scala b/src/test/scala/Main.scala
index 35136e9..b46a19a 100644
--- a/src/test/scala/Main.scala
+++ b/src/test/scala/Main.scala
@@ -178,6 +178,23 @@ class AllTests extends FunSuite {
       assertIdentical( Foo1.Foo2.Foo3, Foo1.Foo2.Foo3 )
     }
 
+    {
+      // testing issue when comparing Maps (https://github.com/xdotai/diff/issues/24)
+      println(
+        DiffShow[Map[String, String]](DiffShow.mapDiffShow).diff(
+          Map("a" -> "b"),
+          Map("a" -> "b", "c" -> "d")
+        ).string
+      )
+
+      println(
+        DiffShow[Map[String, String]](DiffShow.mapDiffShow).diff(
+          Map("a" -> "b", "c" -> "d"),
+          Map("a" -> "b")
+        ).string
+      )
+    }
+
     /*
 
   //import pprint.Config.Defaults._