| 
					
				 | 
			
			
				@@ -46,11 +46,11 @@ func TestIdentityDetectorMeta(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func TestIdentityDetectorConfigure(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id := fixtureIdentityDetector() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	facts := map[string]interface{}{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m1 := map[string]int{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m2 := []string{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m1 := map[string]int{"one": 0} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m2 := []string{"one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	facts[FactIdentityDetectorPeopleDict] = m1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	facts[FactIdentityDetectorReversedPeopleDict] = m2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	id.Configure(facts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, id.Configure(facts)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, m1, facts[FactIdentityDetectorPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, m2, facts[FactIdentityDetectorReversedPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.PeopleDict, facts[FactIdentityDetectorPeopleDict]) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -66,7 +66,7 @@ Vadim|vadim@sourced.tech`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	delete(facts, FactIdentityDetectorPeopleDict) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	delete(facts, FactIdentityDetectorReversedPeopleDict) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	facts[ConfigIdentityDetectorPeopleDictPath] = tmpf.Name() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	id.Configure(facts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, id.Configure(facts)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, id.PeopleDict, 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, id.ReversedPeopleDict, 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.ReversedPeopleDict[0], "Vadim") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -74,7 +74,7 @@ Vadim|vadim@sourced.tech`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	delete(facts, FactIdentityDetectorReversedPeopleDict) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id = fixtureIdentityDetector() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id.PeopleDict = nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	id.Configure(facts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, id.Configure(facts)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.PeopleDict, facts[FactIdentityDetectorPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.ReversedPeopleDict, facts[FactIdentityDetectorReversedPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, id.PeopleDict, 4) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -85,7 +85,7 @@ Vadim|vadim@sourced.tech`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	delete(facts, FactIdentityDetectorReversedPeopleDict) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id = fixtureIdentityDetector() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id.ReversedPeopleDict = nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	id.Configure(facts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, id.Configure(facts)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.PeopleDict, facts[FactIdentityDetectorPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.ReversedPeopleDict, facts[FactIdentityDetectorReversedPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, id.PeopleDict, 4) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -108,7 +108,7 @@ Vadim|vadim@sourced.tech`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id = fixtureIdentityDetector() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id.PeopleDict = nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	id.ReversedPeopleDict = nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	id.Configure(facts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, id.Configure(facts)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.PeopleDict, facts[FactIdentityDetectorPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, id.ReversedPeopleDict, facts[FactIdentityDetectorReversedPeopleDict]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.True(t, len(id.PeopleDict) >= 3) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -381,26 +381,59 @@ func TestIdentityDetectorGeneratePeopleDictMailmap(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"strange guy|vadim markovtsev|gmarkhor@gmail.com|vadim@sourced.tech") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func TestIdentityDetectorMergeReversedDicts(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pa1 := [...]string{"one", "two"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pa2 := [...]string{"two", "three"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	people, merged := Detector{}.MergeReversedDicts(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestIdentityDetectorMergeReversedDictsLiteral(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa1 := [...]string{"one|one@one", "two|aaa@two"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa2 := [...]string{"two|aaa@two", "three|one@one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	people, merged := MergeReversedDictsLiteral(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, people, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, merged, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["one"], [3]int{0, 0, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["two"], [3]int{1, 1, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["three"], [3]int{2, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	vm := [...]string{"one", "two", "three"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, merged, vm[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	pa1 = [...]string{"two", "one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	people, merged = Detector{}.MergeReversedDicts(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["one|one@one"], MergedIndex{0, 0, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["two|aaa@two"], MergedIndex{1, 1, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|one@one"], MergedIndex{2, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, merged, []string{"one|one@one", "two|aaa@two", "three|one@one"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa1 = [...]string{"two|aaa@two", "one|one@one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	people, merged = MergeReversedDictsLiteral(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, people, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Len(t, merged, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["one"], [3]int{1, 1, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["two"], [3]int{0, 0, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, people["three"], [3]int{2, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	vm = [...]string{"two", "one", "three"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	assert.Equal(t, merged, vm[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["one|one@one"], MergedIndex{1, 1, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["two|aaa@two"], MergedIndex{0, 0, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|one@one"], MergedIndex{2, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, merged, []string{"two|aaa@two", "one|one@one", "three|one@one"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestIdentityDetectorMergeReversedDictsIdentities(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa1 := [...]string{"one|one@one", "two|aaa@two"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa2 := [...]string{"two|aaa@two", "three|one@one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	people, merged := MergeReversedDictsIdentities(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, people, 3) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, merged, 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["one|one@one"], MergedIndex{0, 0, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["two|aaa@two"], MergedIndex{1, 1, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|one@one"], MergedIndex{0, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, merged, []string{"one|three|one@one", "two|aaa@two"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestIdentityDetectorMergeReversedDictsIdentitiesStrikeBack(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa1 := [...]string{"one|one@one", "two|aaa@two", "three|three@three"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa2 := [...]string{"two|aaa@two", "three|one@one"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	people, merged := MergeReversedDictsIdentities(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, people, 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, merged, 2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["one|one@one"], MergedIndex{0, 0, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["two|aaa@two"], MergedIndex{1, 1, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|one@one"], MergedIndex{0, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|three@three"], MergedIndex{0, 2, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, merged, []string{"one|three|one@one|three@three", "two|aaa@two"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pa1 = [...]string{"one|one@one", "two|aaa@two", "three|aaa@two"} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	people, merged = MergeReversedDictsIdentities(pa1[:], pa2[:]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, people, 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Len(t, merged, 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["one|one@one"], MergedIndex{0, 0, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["two|aaa@two"], MergedIndex{0, 1, 0}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|one@one"], MergedIndex{0, -1, 1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, people["three|aaa@two"], MergedIndex{0, 2, -1}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, merged, []string{"one|three|two|aaa@two|one@one"}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func TestIdentityDetectorFork(t *testing.T) { 
			 |