Autofixture: рд╕рд┐рдореЗрдВрдЯрд┐рдХ рддреБрд▓рдирд╛ - рджреЛ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕рдорд╛рдирддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЬреВрди 2017  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: AutoFixture/AutoFixture

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧреБрдЧрд▓ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╕рдорд╛рдзрд╛рди рдкрд╛рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдпрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рджреЛ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрджреЗрд╢ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдпрд╣ рдЕрд░реНрдердкреВрд░реНрдг рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ? рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЬреЗрд╕рди рддреБрд▓рдирд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рддреБрд▓рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рд╣реИред рдпрд╣ рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛рдмреЙрдХреНрд╕ рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рд╡рд░реНрдЧ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рд╕рдВрдЧреНрд░рд╣ рдкрд░ рдЯреВрдЯ рдкрдбрд╝рд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде https://github.com/jmansar/SemanticComparisonExtensions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдореИрдВ рдЖрдВрддрд░рд┐рдХ рд╕рдорд╛рдирддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рдЬрдЯрд┐рд▓ рдиреЗрд╕реНрдЯреЗрдб рддреБрд▓рдирд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рднреА рдмрдирд╛рддрд╛ рд╣реИред

рд╕рднреА 13 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреА рдЖрдк рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рд╕реАрдзреЗ SemanticComparer<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ? рдпрд╣ Likeness<TSource, TDestination> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред

рд╡рд╕реНрддреБ рдореЗрдВ рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

public class SongDto
    {
        public string Lyrics { get; set; }
        public IEnumerable<TagDto> Tags { get; set; }
        public string FileName { get; set; }
        public string CustomPromoLink { get; set; }
        public string UPC { get; set; }
        public YoutubeVideoDto YouTubeVideo { get; set; }
    }

рдЯреИрдЧрдбреЙрдЯ рд╕рдВрдЧреНрд░рд╣ рдФрд░ YouTubeVideoDto, рдЬрд┐рди рджреЛ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕реЗ рд╣рд┐рдЪрдХреА рдЖрдИ рдереА, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдпрд╣ рдЗрдиреНрд╣реЗрдВ рдкрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЬрд┐рддрдиреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╡реЗ рдЧрдП рдереЗ рдЙрддрдиреА рд╣реА рдЧрд╣рд░рд╛рдИ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд░рд╣реЗрдВрдЧреЗред рдЕрдиреНрдпрдерд╛ рдореИрдВ рдЕрдкрдиреЗ JSON рддреБрд▓рдирд╛рдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ JSON рддреБрд▓рдирд╛рдХрд░реНрддрд╛ IEnumerable<TagDto> рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрдирдВрдд рдЕрдиреБрдХреНрд░рдо рд╣реИ?

рдЕрдирдВрдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХреБрдЫ рднреА рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдЧрд╛? рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИ, рдФрд░ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдЕрд░реНрдердкреВрд░реНрдг рддреБрд▓рдирд╛ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ SC рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рдУрд▓реЗ рдЗрдВрдЯрд░рд╡реЗрдм рдкрд░ рд╡рд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдЖрдк рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ DelegatingMemberComparer рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рд░рд┐рдЯрд░реНрди рд╣рдореЗрд╢рд╛ True рдХреЗ рд▓рд┐рдП IEnumerable<TagDto> рдпрд╛ рдФрд░ рднреА рдмреЗрд╣рддрд░, рддреБрд▓рдирд╛ IEnumerable<TagDto> рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдореЗрдВ .

(рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдореЗрдВ рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ DelegatingMemberComparer рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред)

рдареАрдХ рд╣реИ, рдорджрдж рдХреЗ рд▓рд┐рдП рджрд┐рд▓ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо DelegatingMemberComparer рд▓рд┐рдЦрдирд╛ рд╣реИред рддреЛ рдлрд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг рднрд┐рдиреНрди рд╣реИрдВ?

рдореБрдЭреЗ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо DelegatingMemberComparer рд▓рд┐рдЦрдирд╛ рд╣реИ

  • рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ DelegatingMemberComparer , рдЬреЛ a.Equals(b) рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирддрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдПрдХ DelegatingMemberComparer IEnumerable<TagDto> рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд╕ рд▓рд┐рдВрдХ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдПрдХ рдЕрд╕рдлрд▓ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЧреБрдг рднрд┐рдиреНрди рд╣реИрдВ

рдирд╣реАрдВ, рд╕рдорд╛рдирддрд╛ рдпрд╣реА рдХрд░рддреА рд╣реИ...

рд╕рдорд╛рдирддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ SemanticComparer<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ... рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк SemanticComparer<T> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдк рд╕рдорд╛рдирддрд╛ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдЦреЛ рджреЗрдВрдЧреЗред

рдЖрдк рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕рд╛рдорд╛рди рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рдЖрдк рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ With рдФрд░ EqualsWhen рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕ рдЙрджрд╛рд╣рд░рдгред

рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рдЕрдкрдиреЗ рдореВрд▓ рдкреНрд░рд╢реНрди рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВ, рдЕрдЧрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕рд╛рдордЧреНрд░реА рдЕрдм рдирд╣реАрдВ рд╣реИ (рдЬреЛ рдореИрдВрдиреЗ рдкрдврд╝рд╛ рд╣реИ рдЙрд╕рд╕реЗ рд╕рдорд╛рдирддрд╛ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ), рдФрд░ рдпрджрд┐ рдПрдХ DelegatingMemberComparer рд▓рд┐рдЦрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдХреНрдпрд╛ рдорд┐рд▓реЗрдЧрд╛ .Equals(b), рдпрд╣ рдПрдХ рд╕рдВрджрд░реНрдн рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рд╡рд╣ рд╕рд╣реА рд╣реИ?

рддреЛ IEqualityComparers рдХреЗ рд╕рд╛рде xUnit Assert рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИ?

рдореИрдВ рдмрд╕ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдСрдЯреЛрдлрд┐рдХреНрдЪрд░ рдЕрджреНрднреБрдд рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдХрдВрдкреЗрдпрд░ рдореЗрд░реЗ рд╕реЗрдЯрдЕрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рджрд╛рд╡реЗ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред

рдореИрдВ рдЖрдкрдХреЗ SongDto рд▓рд┐рдП 3 рдЙрджрд╛рд╣рд░рдг (Likeness, SemanticComparer, IEqualityComparer) рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗрдВредтАФрдЗрд╕ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╛рдо рдХрд╛ рдмреЛрдЭ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред ..

@moodmosaic рдзрдиреНрдпрд╡рд╛рдж рдПрдХ рдЯрди !! рдФрд░ рдЕрдЧрд░ рдЖрдк рдореБрдЭреЗ рдХреБрдЫ рдРрд╕реЗ рд▓реЗрдЦреЛрдВ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдпрд╣ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдХрдВрдкреЗрдпрд░ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдореБрдЭреЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрдо рдШрдирд╛ рдмрдирд╛ рджреЗрдЧрд╛ред

рдЗрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде https://github.com/jmansar/SemanticComparisonExtensions рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рдореИрдВ рдЖрдВрддрд░рд┐рдХ рд╕рдорд╛рдирддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВред

рдЬрдЯрд┐рд▓ рдиреЗрд╕реНрдЯреЗрдб рддреБрд▓рдирд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рднреА рдмрдирд╛рддрд╛ рд╣реИред

@cvbarros рдЙрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Accc99 picture Accc99  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ephasme picture Ephasme  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Ridermansb picture Ridermansb  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ecampidoglio picture ecampidoglio  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gtbuchanan picture gtbuchanan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ