コード例 #1
0
        public void DadoComProblema()
        {
            var DistanciaAmigos = new CalculoDistancia();
            IEnumerable <DistanciaEntreAmigos> ListaAmigos;
            DistanciaEntreAmigos Distancia1 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia2 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia3 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia4 = new DistanciaEntreAmigos();

            Amigo Amigo1 = new Amigo();
            Amigo Amigo2 = new Amigo();
            Amigo Amigo3 = new Amigo();
            Amigo Amigo4 = new Amigo();



            Amigo1.Id        = 1;
            Amigo1.Nome      = "teste1";
            Distancia1.Amigo = Amigo1;
            Distancia1.X     = 2;
            Distancia1.Y     = 1;
            Amigo2.Id        = 1;
            Amigo2.Nome      = "teste2";
            Distancia2.Amigo = Amigo2;
            Distancia2.X     = 3;
            Distancia2.Y     = 0;
            Amigo3.Id        = 1;
            Amigo3.Nome      = "teste2";
            Distancia3.Amigo = Amigo3;
            Distancia3.X     = 1;
            Distancia3.Y     = 1;
            Amigo4.Id        = 1;
            Amigo4.Nome      = "teste2";

            Distancia4.X = 1;
            Distancia4.Y = 31;

            ListaAmigos = new DistanciaEntreAmigos[] { Distancia1, Distancia2, Distancia3, Distancia4 };
            string q         = "a";
            var    Resultado = DistanciaAmigos.CalculaDistancias(2, 1, ListaAmigos);
            var    Erro      = new ErroResposta();


            Erro.Erro      = "Erro";
            Erro.Descricao = "Existe uma inconsistencia com os dados!";
            var Respostas = new DistanciaResult();

            Respostas.Erro = Erro;

            Assert.Equal(Resultado.Erro.Erro, Respostas.Erro.Erro);
            Assert.Equal(Resultado.Erro.Descricao, Respostas.Erro.Descricao);
        }
コード例 #2
0
        public void DistanciaRepetida()
        {
            var DistanciaAmigos = new CalculoDistancia();
            IEnumerable <DistanciaEntreAmigos> ListaAmigos;
            DistanciaEntreAmigos Distancia1 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia2 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia3 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia4 = new DistanciaEntreAmigos();

            Amigo Amigo1 = new Amigo();
            Amigo Amigo2 = new Amigo();
            Amigo Amigo3 = new Amigo();
            Amigo Amigo4 = new Amigo();


            Amigo1.Id        = 1;
            Amigo1.Nome      = "teste1";
            Distancia1.Amigo = Amigo1;
            Distancia1.X     = 2;
            Distancia1.Y     = 1;
            Amigo2.Id        = 1;
            Amigo2.Nome      = "teste2";
            Distancia2.Amigo = Amigo2;
            Distancia2.X     = 3;
            Distancia2.Y     = 1;
            Amigo3.Id        = 1;
            Amigo3.Nome      = "teste3";
            Distancia3.Amigo = Amigo3;
            Distancia3.X     = 1;
            Distancia3.Y     = 1;
            Amigo4.Id        = 4;
            Amigo4.Nome      = "teste4";
            Distancia4.Amigo = Amigo4;
            Distancia4.X     = 1;
            Distancia4.Y     = 1;

            ListaAmigos = new DistanciaEntreAmigos[] { Distancia1, Distancia2, Distancia3, Distancia4 };

            var Resultado = DistanciaAmigos.CalculaDistancias(2, 1, ListaAmigos);
            var Erro      = new ErroResposta();

            Erro.Erro      = "Erro";
            Erro.Descricao = "Dois amigos não pode ter a mesma localização!";
            var Respostas = new DistanciaResult();

            Respostas.Erro = Erro;

            Assert.Equal(Resultado.Erro.Erro, Respostas.Erro.Erro);
            Assert.Equal(Resultado.Erro.Descricao, Respostas.Erro.Descricao);
        }
コード例 #3
0
        public void FaltaValores()
        {
            var DistanciaAmigos = new CalculoDistancia();
            IEnumerable <DistanciaEntreAmigos> ListaAmigos;
            DistanciaEntreAmigos Distancia1 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia2 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia3 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia4 = new DistanciaEntreAmigos();

            Amigo Amigo1 = new Amigo();
            Amigo Amigo2 = new Amigo();
            Amigo Amigo3 = new Amigo();
            Amigo Amigo4 = new Amigo();


            Amigo1.Id        = 1;
            Amigo1.Nome      = "teste1";
            Distancia1.Amigo = Amigo1;
            Distancia1.X     = 2;
            Distancia1.Y     = 1;
            Amigo2.Id        = 1;
            Amigo2.Nome      = "teste2";
            Distancia2.Amigo = Amigo2;
            Distancia2.X     = 3;
            Distancia2.Y     = 1;
            Amigo3.Id        = 1;
            Amigo3.Nome      = "teste3";
            Distancia3.Amigo = Amigo3;
            Distancia3.X     = 1;
            Distancia3.Y     = 1;



            ListaAmigos = new DistanciaEntreAmigos[] { Distancia1, Distancia2, Distancia3 };

            var Resultado = DistanciaAmigos.CalculaDistancias(2, 1, ListaAmigos);
            var Erro      = new ErroResposta();

            Erro.Erro      = "Erro";
            Erro.Descricao = "Existem 3 ou menos amigos cadastrados! , digite a localização dos 1 um amigo alem dos 3" +
                             "cadastrados!";
            var Respostas = new DistanciaResult();

            Respostas.Erro = Erro;

            Respostas.Erro = Erro;
            Assert.Equal(Resultado.Erro.Erro, Respostas.Erro.Erro);
            Assert.Equal(Resultado.Erro.Descricao, Respostas.Erro.Descricao);
        }
コード例 #4
0
        public DistanciaResult ValidaNome(DistanciaEntreAmigos LocalizacaoDoAmigo)
        {
            var Respostas = new DistanciaResult();

            if (LocalizacaoDoAmigo.Amigo.Nome == "")
            {
                var Erro = new ErroResposta();
                Erro.Erro      = "Erro";
                Erro.Descricao = "Nome em branco!";


                Respostas.Erro = Erro;
                return(Respostas);
            }
            else
            {
                Respostas.Erro = null;
                return(Respostas);
            }
        }
コード例 #5
0
        public DistanciaResult ValidaDuplicidade(DistanciaEntreAmigos LocalizacaoDoAmigo, LocalizacaoRepository repository)
        {
            var find      = repository.GetFind(LocalizacaoDoAmigo.X, LocalizacaoDoAmigo.Y);
            var contador  = find.Count();
            var Respostas = new DistanciaResult();

            if (contador > 0)
            {
                var Erro = new ErroResposta();
                Erro.Erro      = "Erro";
                Erro.Descricao = "Dois amigos não podem ter a mesma localização!";


                Respostas.Erro = Erro;
                return(Respostas);
            }
            else
            {
                Respostas.Erro = null;
                return(Respostas);
            }
        }
コード例 #6
0
        public void CalculaDistanciaCorreto()
        {
            var DistanciaAmigos = new CalculoDistancia();
            IEnumerable <DistanciaEntreAmigos> ListaAmigos;
            DistanciaEntreAmigos Distancia1 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia2 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia3 = new DistanciaEntreAmigos();
            DistanciaEntreAmigos Distancia4 = new DistanciaEntreAmigos();

            Amigo Amigo1 = new Amigo();
            Amigo Amigo2 = new Amigo();
            Amigo Amigo3 = new Amigo();
            Amigo Amigo4 = new Amigo();


            Amigo1.Id        = 1;
            Amigo1.Nome      = "teste1";
            Distancia1.Amigo = Amigo1;
            Distancia1.X     = 2;
            Distancia1.Y     = 1;
            Amigo2.Id        = 1;
            Amigo2.Nome      = "teste2";
            Distancia2.Amigo = Amigo2;
            Distancia2.X     = 3;
            Distancia2.Y     = 1;
            Amigo3.Id        = 1;
            Amigo3.Nome      = "teste3";
            Distancia3.Amigo = Amigo3;
            Distancia3.X     = 1;
            Distancia3.Y     = 1;
            Amigo4.Id        = 4;
            Amigo4.Nome      = "teste4";
            Distancia4.Amigo = Amigo4;
            Distancia4.X     = 1;
            Distancia4.Y     = 9;

            ListaAmigos = new DistanciaEntreAmigos[] { Distancia1, Distancia2, Distancia3, Distancia4 };

            var Resultado = DistanciaAmigos.CalculaDistancias(2, 1, ListaAmigos);



            // var Calculado = new DistanciaResult(){ };
            var PessoaDist = new DistanciaResult()
            {
            };
            var pessoa1   = new AmigoCont();
            var pessoa2   = new AmigoCont();
            var pessoa3   = new AmigoCont();
            var Calculado = new List <AmigoCont>();

            pessoa1.Nome  = "teste2";
            pessoa1.Id    = 0;
            pessoa1.X     = 3;
            pessoa1.Y     = 1;
            pessoa1.Total = 1;
            Calculado.Add(pessoa1);
            pessoa2.Nome  = "teste3";
            pessoa2.Id    = 0;
            pessoa2.X     = 1;
            pessoa2.Y     = 1;
            pessoa2.Total = 1;
            Calculado.Add(pessoa2);
            pessoa3.Nome  = "teste4";
            pessoa3.Id    = 0;
            pessoa3.X     = 1;
            pessoa3.Y     = 9;
            pessoa3.Total = 8.06225774829855;
            Calculado.Add(pessoa3);

            Assert.True(Calculado[0].Nome == Resultado.pessoas[0].Nome);
            Assert.True(Calculado[0].X == Resultado.pessoas[0].X);
            Assert.True(Calculado[0].Y == Resultado.pessoas[0].Y);
            Assert.True(Calculado[0].Total == Resultado.pessoas[0].Total);

            Assert.True(Calculado[1].Nome == Resultado.pessoas[1].Nome);
            Assert.True(Calculado[1].X == Resultado.pessoas[1].X);
            Assert.True(Calculado[1].Y == Resultado.pessoas[1].Y);
            Assert.True(Calculado[1].Total == Resultado.pessoas[1].Total);

            Assert.True(Calculado[2].Nome == Resultado.pessoas[2].Nome);
            Assert.True(Calculado[2].X == Resultado.pessoas[2].X);
            Assert.True(Calculado[2].Y == Resultado.pessoas[2].Y);
            Assert.True(Calculado[2].Total == Resultado.pessoas[2].Total);
        }
コード例 #7
0
        public DistanciaResult CalculaDistancias(float X, float Y, IEnumerable <DistanciaEntreAmigos> Context)
        {
            Dictionary <(double, double), int> Verificador = new Dictionary <(double, double), int>();
            var VerificaDisDupli = new List <AmigoCont> {
            };
            var SomaDistancia    = new List <AmigoCont> {
            };
            var DistanciasFinais = new List <AmigoCont> {
            };
            var Erro             = new ErroResposta();

            try
            {
                var repetidos = Context
                                .GroupBy(x => x.X, y => y.Y)
                                .Where(g => g.Count() > 1)
                                .Select(g => g.Key)
                                .ToList();

                if (Context.Count() >= 4)
                {
                    AmigoCont Verifica = new AmigoCont();

                    var erro = 0;
                    foreach (var item in Context)
                    {
                        if (VerificaDisDupli.Exists(x => x.X == item.X && x.Y == item.Y) == false)
                        {
                            VerificaDisDupli.Add(new AmigoCont()
                            {
                                Id = item.Id, Nome = item.Amigo.Nome, X = item.X, Y = item.Y
                            });
                        }
                        else
                        {
                            erro = erro + 1;
                        }
                    }

                    if (VerificaDisDupli.Exists(x => x.X == X && x.Y == Y) == true)
                    {
                        if (erro == 0)
                        {
                            var AmigosList = new List <AmigoCont>();


                            Dictionary <int, double> resultado = new Dictionary <int, double>();
                            var    result = Context;
                            double soma   = 0;
                            float  xop    = 0;
                            float  yop    = 0;
                            var    i      = 0;



                            Dictionary <int, double> pessoas = new Dictionary <int, double>();
                            if (result.Count() >= 3)
                            {
                                foreach (var item in VerificaDisDupli)
                                {
                                    xop  = item.X - X;
                                    xop  = xop * xop;
                                    yop  = item.Y - Y;
                                    yop  = yop * yop;
                                    soma = xop + yop;
                                    soma = Math.Sqrt(soma);
                                    if (SomaDistancia.Exists(x => x.X == item.X && x.Y == item.Y) == false)

                                    {
                                        SomaDistancia.Add(new AmigoCont()
                                        {
                                            Id = item.Id, Nome = item.Nome, X = item.X, Y = item.Y, Total = soma
                                        });
                                    }
                                }

                                var ordenado = SomaDistancia.OrderBy(x => x.Total);

                                i = 0;


                                foreach (var itemPessoas in ordenado)
                                {
                                    if (i >= 4)
                                    {
                                        break;
                                    }
                                    if (i != 0)
                                    {
                                        DistanciasFinais.Add(itemPessoas);
                                    }
                                    i = i + 1;
                                }
                            }
                            var DistanciResult = new DistanciaResult();
                            DistanciResult.pessoas = DistanciasFinais;
                            DistanciResult.Erro    = null;
                            return(DistanciResult);
                        }
                        else
                        {
                            Erro.Erro      = "Erro";
                            Erro.Descricao = "Dois amigos não pode ter a mesma localização!";
                            var Respostas = new DistanciaResult();

                            Respostas.Erro = Erro;
                            return(Respostas);
                        }
                    }
                    else
                    {
                        Erro.Erro      = "Erro";
                        Erro.Descricao = "A localização do amigo solicitada não existe";
                        var Respostas = new DistanciaResult();

                        Respostas.Erro = Erro;
                        return(Respostas);
                    }
                }
                else
                {
                    Erro.Erro      = "Erro";
                    Erro.Descricao = "Existem 3 ou menos amigos cadastrados! , digite a localização dos 1 um amigo alem dos 3" +
                                     "cadastrados!";
                    var Respostas = new DistanciaResult();

                    Respostas.Erro = Erro;
                    return(Respostas);
                }
            }
            catch (Exception ex)
            {
                Erro.Erro      = "Erro";
                Erro.Descricao = "Existe uma inconsistencia com os dados!";
                var Respostas = new DistanciaResult();

                Respostas.Erro = Erro;
                return(Respostas);
            }
        }