From 63d867acbfab924da3d5c249fbf0b2436261b169 Mon Sep 17 00:00:00 2001 From: PvtWendy <102826495+PvtWendy@users.noreply.github.com> Date: Thu, 28 Mar 2024 00:42:24 -0400 Subject: [PATCH 1/5] Criado a base da biblioteca Utils --- fontes/bibliotecas/utils.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 fontes/bibliotecas/utils.ts diff --git a/fontes/bibliotecas/utils.ts b/fontes/bibliotecas/utils.ts new file mode 100644 index 0000000..7b4ca0f --- /dev/null +++ b/fontes/bibliotecas/utils.ts @@ -0,0 +1,33 @@ +const horaInicial: number = Date.now(); + +export async function numero_elementos(vetor: any[]): Promise { + return vetor.length; +} + +export async function numero_linhas(matriz: any[][]): Promise { + return matriz.length; +} + +export async function numero_colunas(matriz: any[][]): Promise { + return matriz[0].length; +} + +export async function sorteia(minimo: number, maximo: number): Promise { + if (minimo > maximo) { + throw new Error(`O valor mínimo (${minimo}) é maior do que o valor máximo (${maximo})`); + } else if (minimo === maximo) { + throw new Error(`Os valores mínimo e máximo são iguais: ${minimo}`); + } + + return Math.floor(Math.random() * (maximo + 1 - minimo)) + minimo; + +} + +export async function aguarde(intervalo: number): Promise { + await new Promise(resolve => setTimeout(resolve, intervalo)); +} + +export async function tempo_decorrido(): Promise { + const tempoAtual = Date.now(); + return Math.floor(tempoAtual - horaInicial); +} \ No newline at end of file From 8f3a9de848206b0621e22fcb80ebaad6e44245b7 Mon Sep 17 00:00:00 2001 From: PvtWendy <102826495+PvtWendy@users.noreply.github.com> Date: Thu, 28 Mar 2024 11:21:46 -0400 Subject: [PATCH 2/5] =?UTF-8?q?Adi=C3=A7=C3=A3o=20da=20fun=C3=A7=C3=A3o=20?= =?UTF-8?q?obter=5Fdiretorio=5Fusuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/bibliotecas/utils.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fontes/bibliotecas/utils.ts b/fontes/bibliotecas/utils.ts index 7b4ca0f..fc9e854 100644 --- a/fontes/bibliotecas/utils.ts +++ b/fontes/bibliotecas/utils.ts @@ -1,4 +1,13 @@ const horaInicial: number = Date.now(); +import * as os from 'os'; + +export async function obter_diretorio_usuario(): Promise { + try { + return os.homedir(); + } catch (error) { + throw new Error("Não foi possível obter o diretório do usuário"); + } +} export async function numero_elementos(vetor: any[]): Promise { return vetor.length; From 4f39d27f85729f0d57ec45546418f3c6b88fa603 Mon Sep 17 00:00:00 2001 From: PvtWendy <102826495+PvtWendy@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:50:56 -0400 Subject: [PATCH 3/5] =?UTF-8?q?Cria=C3=A7=C3=A3o=20dos=20testes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/bibliotecas/index.ts | 2 + testes/bibliotecas/utils.test.ts | 110 +++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 testes/bibliotecas/utils.test.ts diff --git a/fontes/bibliotecas/index.ts b/fontes/bibliotecas/index.ts index e69de29..a1da0dc 100644 --- a/fontes/bibliotecas/index.ts +++ b/fontes/bibliotecas/index.ts @@ -0,0 +1,2 @@ +export * from './matematica'; +export * from './utils' \ No newline at end of file diff --git a/testes/bibliotecas/utils.test.ts b/testes/bibliotecas/utils.test.ts new file mode 100644 index 0000000..914ee36 --- /dev/null +++ b/testes/bibliotecas/utils.test.ts @@ -0,0 +1,110 @@ +import os from 'os'; +import { + obter_diretorio_usuario, + numero_colunas, + numero_elementos, + numero_linhas, + sorteia, + aguarde, + tempo_decorrido, +} from '../../fontes/bibliotecas/utils'; + +describe('Biblioteca Utils', () => { + describe('Obter Diretório do Usuário', () => { + it('Trivial', async () => { + const resultado = await obter_diretorio_usuario(); + expect(resultado).toBe(os.homedir()); + }); + + it('Falha ao obter Diretório', async () => { + jest.spyOn(os, 'homedir').mockImplementation(() => { + throw new Error('Erro para testes'); + }); + await expect(obter_diretorio_usuario()).rejects.toThrow('Não foi possível obter o diretório do usuário'); + }); + }); + + describe('Número de Elementos', () => { + it('Trivial', async () => { + const vetor = [1, 2, 3, 4, 5]; + const resultado = await numero_elementos(vetor); + expect(resultado).toBe(5); + }); + }); + + describe('Número de Linhas', () => { + it('Trivial', async () => { + const matriz = [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9], + ]; + const resultado = await numero_linhas(matriz); + expect(resultado).toBe(3); + }); + }); + + describe('Número de Colunas', () => { + it('Trivial', async () => { + const matriz = [ + [1, 2, 3], + [4, 5, 6], + [7, 8, 9], + ]; + const resultado = await numero_colunas(matriz); + expect(resultado).toBe(3); + }); + }); + + describe('Sorteia', () => { + it('Trivial', async () => { + const minimo = 1; + const maximo = 10; + const resultado = await sorteia(minimo, maximo); + expect(resultado).toBeGreaterThanOrEqual(minimo); + expect(resultado).toBeLessThanOrEqual(maximo); + }); + + it('Falha - Minimo maior que Maximo', async () => { + const minimo = 10; + const maximo = 1; + await expect(sorteia(minimo, maximo)).rejects.toThrow( + `O valor mínimo (${minimo}) é maior do que o valor máximo (${maximo})` + ); + }); + + it('Falha - Minimo é igual a Maximo', async () => { + const minimo = 5; + const maximo = 5; + await expect(sorteia(minimo, maximo)).rejects.toThrow(`Os valores mínimo e máximo são iguais: ${minimo}`); + }); + }); + + describe('Aguarde', () => { + it('Trivial', async () => { + const startTime = new Date().getTime(); + const intervalo = 50; + await aguarde(intervalo); + const endTime = new Date().getTime(); + const elapsedTime = endTime - startTime; + expect(elapsedTime).toBeGreaterThanOrEqual(intervalo * 0.9); + expect(elapsedTime).toBeLessThanOrEqual(intervalo * 1.3); + }); + }); + + let horaInicial: number; + beforeAll(() => { + horaInicial = Date.now(); + }); + + describe('Tempo Decorrido', () => { + it('Trivial', async () => { + await new Promise((resolve) => setTimeout(resolve, 50)); + const resultado = await tempo_decorrido(); + const tempoAtual = Date.now(); + const tempoDecorridoEsperado = tempoAtual - horaInicial; + expect(resultado).toBeGreaterThanOrEqual(tempoDecorridoEsperado * 0.9); + expect(resultado).toBeLessThanOrEqual(tempoDecorridoEsperado * 1.3); + }); + }); +}); From 04db5bd4be48d10f07b77d45db36f0a0d5d2896e Mon Sep 17 00:00:00 2001 From: Leonel Sanches da Silva <53848829+leonelsanchesdasilva@users.noreply.github.com> Date: Fri, 5 Apr 2024 18:30:26 -0700 Subject: [PATCH 4/5] =?UTF-8?q?Mecanismo=20de=20importa=C3=A7=C3=A3o=20par?= =?UTF-8?q?a=20Utils.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/bibliotecas/utils.ts | 10 ++++++---- fontes/interpretador/comum.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/fontes/bibliotecas/utils.ts b/fontes/bibliotecas/utils.ts index fc9e854..2eb9331 100644 --- a/fontes/bibliotecas/utils.ts +++ b/fontes/bibliotecas/utils.ts @@ -1,6 +1,7 @@ -const horaInicial: number = Date.now(); import * as os from 'os'; +const horaInicial: number = Date.now(); + export async function obter_diretorio_usuario(): Promise { try { return os.homedir(); @@ -24,12 +25,13 @@ export async function numero_colunas(matriz: any[][]): Promise { export async function sorteia(minimo: number, maximo: number): Promise { if (minimo > maximo) { throw new Error(`O valor mínimo (${minimo}) é maior do que o valor máximo (${maximo})`); - } else if (minimo === maximo) { + } + + if (minimo === maximo) { throw new Error(`Os valores mínimo e máximo são iguais: ${minimo}`); } return Math.floor(Math.random() * (maximo + 1 - minimo)) + minimo; - } export async function aguarde(intervalo: number): Promise { @@ -39,4 +41,4 @@ export async function aguarde(intervalo: number): Promise { export async function tempo_decorrido(): Promise { const tempoAtual = Date.now(); return Math.floor(tempoAtual - horaInicial); -} \ No newline at end of file +} diff --git a/fontes/interpretador/comum.ts b/fontes/interpretador/comum.ts index 8fa41cb..6b52c1b 100644 --- a/fontes/interpretador/comum.ts +++ b/fontes/interpretador/comum.ts @@ -6,6 +6,7 @@ import { ErroEmTempoDeExecucao } from '@designliquido/delegua/excecoes'; import * as matematica from '../bibliotecas/matematica'; import * as texto from '../bibliotecas/texto'; +import * as utils from '../bibliotecas/utils'; function carregarBibliotecaMatematica(): DeleguaModulo { const metodos: { [nome: string]: FuncaoPadrao } = { @@ -43,12 +44,30 @@ function carregarBibliotecaTexto(): DeleguaModulo { return objetoTexto; } +function carregarBibliotecaUtils(): DeleguaModulo { + const metodos: { [nome: string]: FuncaoPadrao } = { + obter_diretorio_usuario: new FuncaoPadrao(0, utils.obter_diretorio_usuario), + numero_elementos: new FuncaoPadrao(1, utils.numero_elementos), + numero_linhas: new FuncaoPadrao(1, utils.numero_linhas), + numero_colunas: new FuncaoPadrao(1, utils.numero_colunas), + sorteia: new FuncaoPadrao(2, utils.sorteia), + aguarde: new FuncaoPadrao(1, utils.aguarde), + tempo_decorrido: new FuncaoPadrao(0, utils.tempo_decorrido) + } + + const objetoUtils = new DeleguaModulo('Utils'); + objetoUtils.componentes = metodos; + return objetoUtils; +} + export async function visitarExpressaoImportarComum(expressao: Importar): Promise { switch (expressao.caminho.valor) { case 'Matematica': return carregarBibliotecaMatematica(); case 'Texto': return carregarBibliotecaTexto(); + case 'Utils': + return carregarBibliotecaUtils(); default: throw new ErroEmTempoDeExecucao(null, `Biblioteca não implementada: ${expressao.caminho}.`); } From 60696a8371f343228e338e14a1404ae26f07f2f0 Mon Sep 17 00:00:00 2001 From: PvtWendy <102826495+PvtWendy@users.noreply.github.com> Date: Fri, 5 Apr 2024 22:08:27 -0400 Subject: [PATCH 5/5] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20Utils=20para=20Ut?= =?UTF-8?q?il?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fontes/bibliotecas/{utils.ts => util.ts} | 0 fontes/interpretador/comum.ts | 28 +++++++++---------- .../{utils.test.ts => util.test.ts} | 4 +-- 3 files changed, 16 insertions(+), 16 deletions(-) rename fontes/bibliotecas/{utils.ts => util.ts} (100%) rename testes/bibliotecas/{utils.test.ts => util.test.ts} (97%) diff --git a/fontes/bibliotecas/utils.ts b/fontes/bibliotecas/util.ts similarity index 100% rename from fontes/bibliotecas/utils.ts rename to fontes/bibliotecas/util.ts diff --git a/fontes/interpretador/comum.ts b/fontes/interpretador/comum.ts index 6b52c1b..b98c38c 100644 --- a/fontes/interpretador/comum.ts +++ b/fontes/interpretador/comum.ts @@ -6,7 +6,7 @@ import { ErroEmTempoDeExecucao } from '@designliquido/delegua/excecoes'; import * as matematica from '../bibliotecas/matematica'; import * as texto from '../bibliotecas/texto'; -import * as utils from '../bibliotecas/utils'; +import * as util from '../bibliotecas/util'; function carregarBibliotecaMatematica(): DeleguaModulo { const metodos: { [nome: string]: FuncaoPadrao } = { @@ -44,20 +44,20 @@ function carregarBibliotecaTexto(): DeleguaModulo { return objetoTexto; } -function carregarBibliotecaUtils(): DeleguaModulo { +function carregarBibliotecaUtil(): DeleguaModulo { const metodos: { [nome: string]: FuncaoPadrao } = { - obter_diretorio_usuario: new FuncaoPadrao(0, utils.obter_diretorio_usuario), - numero_elementos: new FuncaoPadrao(1, utils.numero_elementos), - numero_linhas: new FuncaoPadrao(1, utils.numero_linhas), - numero_colunas: new FuncaoPadrao(1, utils.numero_colunas), - sorteia: new FuncaoPadrao(2, utils.sorteia), - aguarde: new FuncaoPadrao(1, utils.aguarde), - tempo_decorrido: new FuncaoPadrao(0, utils.tempo_decorrido) + obter_diretorio_usuario: new FuncaoPadrao(0, util.obter_diretorio_usuario), + numero_elementos: new FuncaoPadrao(1, util.numero_elementos), + numero_linhas: new FuncaoPadrao(1, util.numero_linhas), + numero_colunas: new FuncaoPadrao(1, util.numero_colunas), + sorteia: new FuncaoPadrao(2, util.sorteia), + aguarde: new FuncaoPadrao(1, util.aguarde), + tempo_decorrido: new FuncaoPadrao(0, util.tempo_decorrido) } - const objetoUtils = new DeleguaModulo('Utils'); - objetoUtils.componentes = metodos; - return objetoUtils; + const objetoUtil = new DeleguaModulo('Util'); + objetoUtil.componentes = metodos; + return objetoUtil; } export async function visitarExpressaoImportarComum(expressao: Importar): Promise { @@ -66,8 +66,8 @@ export async function visitarExpressaoImportarComum(expressao: Importar): Promis return carregarBibliotecaMatematica(); case 'Texto': return carregarBibliotecaTexto(); - case 'Utils': - return carregarBibliotecaUtils(); + case 'Util': + return carregarBibliotecaUtil(); default: throw new ErroEmTempoDeExecucao(null, `Biblioteca não implementada: ${expressao.caminho}.`); } diff --git a/testes/bibliotecas/utils.test.ts b/testes/bibliotecas/util.test.ts similarity index 97% rename from testes/bibliotecas/utils.test.ts rename to testes/bibliotecas/util.test.ts index 914ee36..64ebd94 100644 --- a/testes/bibliotecas/utils.test.ts +++ b/testes/bibliotecas/util.test.ts @@ -7,9 +7,9 @@ import { sorteia, aguarde, tempo_decorrido, -} from '../../fontes/bibliotecas/utils'; +} from '../../fontes/bibliotecas/util'; -describe('Biblioteca Utils', () => { +describe('Biblioteca Util', () => { describe('Obter Diretório do Usuário', () => { it('Trivial', async () => { const resultado = await obter_diretorio_usuario();