- Renato Penha - Professor orientador
- Victor Hayashi - Professor de programação
Este projeto implementa uma Distributed Hash Table (DHT) em C++ utilizando uma estrutura de dados de tabela de hash para armazenar e recuperar informações de mercadorias. A implementação é feita a partir de um arquivo em C++ (hashtable.cpp
) e inclui uma série de casos de teste para validar as funcionalidades principais da DHT, como inserção, pesquisa, remoção e tratamento de colisões de hash.
Além disso, o projeto inclui um contrato inteligente escrito em Solidity (mapping.sol
), que implementa uma estrutura de tabela de hash para armazenar e manipular mercadorias na blockchain Ethereum. O contrato permite a inserção, busca, remoção de mercadorias e a verificação de colisões de hash.
HashTable/
hashtable.cpp
: Implementação da tabela de hash distribuída em C++.
Mapping/
mapping.sol
: Implementação de uma tabela de hash como contrato inteligente em Solidity.
README.md
: Documentação do projeto.
- C++: Linguagem de programação utilizada para implementar a Distributed Hash Table (DHT).
- Solidity: Linguagem de programação utilizada para desenvolver contratos inteligentes na blockchain Ethereum.
- IDE de sua escolha: Para desenvolver e testar a implementação em C++.
Os casos de teste foram criados para verificar as funcionalidades essenciais da tabela de hash distribuída (DHT) implementada em C++ e do contrato inteligente de hash table em Solidity. Abaixo, são descritos os casos de teste para cada uma das implementações, incluindo a pré-condição, os passos do teste e a pós-condição esperada para cada caso.
-
Inserir e Pesquisar Mercadoria Existente:
- Pré-condição: Tabela de hash vazia.
- Passos do teste:
- Inserir uma mercadoria existente na tabela de hash.
- Pesquisar a mercadoria inserida na tabela de hash.
- Pós-condição: A mercadoria é encontrada com sucesso na tabela de hash.
-
Pesquisar Mercadoria Inexistente:
- Pré-condição: Tabela de hash vazia ou sem a mercadoria a ser pesquisada.
- Passos do teste:
- Pesquisar uma mercadoria que não está na tabela de hash.
- Pós-condição: Nenhuma mercadoria é encontrada na tabela de hash.
-
Remover Mercadoria Existente:
- Pré-condição: Tabela de hash com a mercadoria a ser removida.
- Passos do teste:
- Remover uma mercadoria existente na tabela de hash.
- Tentar pesquisar a mercadoria removida na tabela de hash.
- Pós-condição: A mercadoria é removida com sucesso da tabela de hash.
-
Remover Mercadoria Inexistente:
- Pré-condição: Tabela de hash vazia ou sem a mercadoria a ser removida.
- Passos do teste:
- Tentar remover uma mercadoria que não está na tabela de hash.
- Pós-condição: Nenhuma alteração na tabela de hash, já que a mercadoria não está presente.
-
Colisões de Hash:
- Pré-condição: Inserir várias mercadorias na mesma posição de hash.
- Passos do teste:
- Inserir várias mercadorias na tabela de hash, resultando em colisões.
- Pesquisar todas as mercadorias inseridas na tabela de hash.
- Pós-condição: Todas as mercadorias são encontradas corretamente na tabela de hash, sem colisões detectadas.
-
Inserção de Dados:
- Pré-condição: A DHT está inicialmente vazia.
- Passos do Teste:
- Inserir um par chave-valor na DHT.
- Recuperar o valor associado à chave inserida.
- Pós-condição: O valor recuperado deve ser igual ao valor inserido.
-
Recuperação de Dados:
- Pré-condição: A DHT contém um conjunto conhecido de pares chave-valor.
- Passos do Teste:
- Selecionar uma chave presente na DHT.
- Recuperar o valor associado à chave selecionada.
- Pós-condição: O valor recuperado deve ser igual ao valor previamente associado à chave na DHT.
-
Atualização de Dados:
- Pré-condição: A DHT contém um par chave-valor existente.
- Passos do Teste:
- Selecionar uma chave existente na DHT.
- Atualizar o valor associado à chave selecionada.
- Recuperar o valor atualizado utilizando a mesma chave.
- Pós-condição: O valor recuperado deve ser igual ao valor atualizado.
-
Remoção de Dados:
- Pré-condição: A DHT contém um par chave-valor existente.
- Passos do Teste:
- Selecionar uma chave existente na DHT.
- Remover o par chave-valor associado à chave selecionada.
- Tentar recuperar o valor utilizando a chave removida.
- Pós-condição: A tentativa de recuperação do valor deve retornar um valor nulo ou indicar que a chave não está mais presente na DHT.
-
Tratamento de Colisões de Hash:
- Pré-condição: A DHT contém um par chave-valor existente que resultou em colisão de hash.
- Passos do Teste:
- Tentar inserir um novo par chave-valor com uma chave que colida com uma chave existente na DHT.
- Verificar se a inserção falha ou se a DHT trata adequadamente a colisão de hash.
- Pós-condição: A inserção da chave colidente deve ser tratada corretamente, seja evitando a inserção ou resolvendo a colisão de forma apropriada.