From 75c35b3cace94b56604fd27e0c50c3236fcfb608 Mon Sep 17 00:00:00 2001 From: Andre0n Date: Mon, 9 Jan 2023 21:29:21 -0300 Subject: [PATCH 1/2] =?UTF-8?q?Adi=C3=A7=C3=A3o=20da=20biblioteca=20para?= =?UTF-8?q?=20a=20manipula=C3=A7=C3=A3o=20de=20textos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agora a linguagem conta com constantes e funções úteis para manipular textos. Foram adicionados também os testes iniciais para cada função implementada. --- src/lib/importStdlib.js | 8 +- src/lib/textos.js | 271 ++++++ tests/tests.egua | 1801 ++++++++++++++++++++++----------------- 3 files changed, 1306 insertions(+), 774 deletions(-) create mode 100644 src/lib/textos.js diff --git a/src/lib/importStdlib.js b/src/lib/importStdlib.js index c8f6df3..bd43c56 100644 --- a/src/lib/importStdlib.js +++ b/src/lib/importStdlib.js @@ -3,6 +3,7 @@ const EguaModule = require("../structures/module.js"); require("./tempo.js"); require("./matematica.js"); +require("./textos.js"); const loadModule = function (moduleName, modulePath) { let moduleData = require(modulePath); @@ -13,7 +14,10 @@ const loadModule = function (moduleName, modulePath) { let currentItem = moduleData[keys[i]]; if (typeof currentItem === "function") { - newModule[keys[i]] = new StandardFn(currentItem.length, currentItem); + newModule[keys[i]] = new StandardFn( + currentItem.length, + currentItem + ); } else { newModule[keys[i]] = currentItem; } @@ -28,6 +32,8 @@ module.exports = function (name) { return loadModule("tempo", "./tempo.js"); case "matematica": return loadModule("matematica", "./matematica.js"); + case "textos": + return loadModule("textos", "./textos.js"); } return null; diff --git a/src/lib/textos.js b/src/lib/textos.js new file mode 100644 index 0000000..a5833a7 --- /dev/null +++ b/src/lib/textos.js @@ -0,0 +1,271 @@ +/** + * Biblioteca padrão para a manipulação de textos. + * + * Contém as principais funções para lidar com textos. + * + * @file textos.js + * @author André G. + * @since 1.3.7 + */ + +const RuntimeError = require("../errors.js").RuntimeError; + +// Constantes úteis + +/** + * Conjunto de todas as letraas minúsculas + */ +module.exports.letras_minusculas = "abcdefghijklmnopqrstuvwxyz"; + +/** + * Conjunto de todas as letraas maiúsculas + */ +module.exports.letras_maiusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +/** + * Conjunto de todas as letraas + */ +module.exports.letras = this.letras_minusculas + this.letras_maiusculas; + +/** + * Conjunto de todas os dígitos + */ +module.exports.digitos = "0123456789"; + +/** + * Conjuto de pontuções + */ +module.exports.pontuacoes = '!"' + "#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + +// Funções de Manipulação de textos. + +/** + * Converte otexto passado para maiúsculo. + * + * @param {string} texto o texto a ser convertido. + * @return {string} a string convertida. + */ +module.exports.maiusculo = function (texto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + return texto.toUpperCase(); +}; + +/** + * Converte o texto passado para minúsculo. + * + * @param {string} texto o texto a ser convertido. + * @return {string} a string convertida. + */ +module.exports.minusculo = function (texto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + return texto.toLowerCase(); +}; + +/** + * Verifica se um texto possui um subtexto. + * + * @param {string} texto o texto a ser checado. + * @param {string} subtexto o subtexto a ser proucurado. + * @return {boolean} verdadeiro se o texto possui o subtexto falso caso contrário. + */ +module.exports.contem = function (texto, subtexto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + if (typeof subtexto !== "string") { + throw new RuntimeError( + this.token, + "O segundo parâmetro também deve ser um texto" + ); + } + return texto.includes(subtexto); +}; + +/** + * Posiciona os argumentos fornecidos no texto. + * + * Note que: o texto precisa estar na forma `"Meu texto {}"` + * onde o `{}` será substituído pelo primeiro argumento da função. + * + * Ex.: `textos.formate("Texto {} {} ", "número", 1)` -> `"Texto número 1"`. + * + * @param {string} texto o texto a ser formatado. + * @param {any[]} argumentos vetor de argumentos a serem posicionados. + * @return {string} o texto formatado. + */ +module.exports.formate = function (texto, ...argumentos) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + for (let i = 0; i < argumentos.length; i++) { + let value = argumentos[i]; + if (typeof value === "boolean") { + value = value ? "verdadeiro" : "falso"; + } + if (value === null) { + value = "nulo"; + } + if (typeof value === "object") { + value = ""; + } + texto = texto.replace("{}", value); + } + return texto; +}; + +/** + * Divide o texto passado no em um vetor de subtextos. + * + * @param {string} texto o texto a ser dividido. + * @param {string} separador o texto usado para a divisão. + * @param {number} limite um inteiro que limita o número de divisões. + * + * @returns {string[]} um vetor contendo os textos divididos. + */ +module.exports.dividir = function ( + texto, + separador = "", + limite = Number.MAX_SAFE_INTEGER +) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + if (typeof separador !== "string") { + throw new RuntimeError( + this.token, + "O separador passado deve ser um texto" + ); + } + if (typeof limite !== "number") { + throw new RuntimeError( + this.token, + "O limite passado deve ser um número" + ); + } + return texto.split(separador, limite); +}; + +/** + * Retorna o tamanho de um texto. + * + * @param {string} texto o texto para obter o tamanho. + * @return {number} o tamanho do texto. + */ +module.exports.tamanho = function (texto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + return texto.length; +}; + +/** + * Repete um texto fornecido. + * + * @param {string} texto o texto para obter o tamanho. + * @param {number} contador o número de cópias. + * @return {string} um texto com o número de cópias do texto fornecido. + */ +module.exports.repita = function (texto, contador = 0) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + if (typeof contador !== "number") { + throw new RuntimeError( + this.token, + "O contador passado deve ser um número" + ); + } + return texto.repeat(contador); +}; + +/** + * Substitui em um texto fornecido o padrão indicado por um novo valor. + * + * @param {string} texto o texto para obter o tamanho. + * @param {string} texto_buscado o texto ou expressão regular para ser substituído. + * @param {string} novo_texto o novo texto para substituição. + * @return {string} um novo texto com os valores substituídos. + */ +module.exports.substituir = function (texto, texto_buscado, novo_texto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + if (typeof texto_buscado !== "string") { + throw new RuntimeError( + this.token, + "O padrão passado deve ser um texto" + ); + } + if (typeof novo_texto !== "string") { + throw new RuntimeError(this.token, "O novo valor deve ser um texto"); + } + return texto.replace(texto_buscado, novo_texto); +}; + +/** + * Busca um subtexto em um texto. + * + * @param {string} texto o texto original. + * @param {string} texto_buscado o texto que deve ser buscado ou expressão regular. + * + * @returns {number} o índice da primeira ocorrência no texto fornecido ou -1 caso contrário. + */ +module.exports.busca = function (texto, texto_buscado) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + if (typeof texto_buscado !== "string") { + throw new RuntimeError( + this.token, + "O padrão passado deve ser um texto" + ); + } + return texto.search(texto_buscado); +}; + +/** + * Remove espaços em branco no começo e no fim do texto. + * + * @param {string} texto o texto original. + * @returns {number} um texto sem espaços em ambos os lados. + */ +module.exports.apara = function (texto) { + if (typeof texto !== "string") { + throw new RuntimeError( + this.token, + "O parâmetro passado deve ser um texto" + ); + } + return texto.trim(); +}; diff --git a/tests/tests.egua b/tests/tests.egua index 946c9d6..ee8c61e 100644 --- a/tests/tests.egua +++ b/tests/tests.egua @@ -1,773 +1,1028 @@ -escreva("--------------------------------"); -escreva("Testes Internos - Linguagem Egua"); -escreva("--------------------------------"); -escreva("|"); - -var erros = 0; - -função startTest(){ - escreva(tSesenão()); - escreva("|"); - escreva(tEnquanto()); - escreva("|"); - escreva(tPara()); - escreva("|"); - escreva(tFacaEnquanto()); - escreva("|"); - escreva(tCasoEscolha()); - escreva("|"); - escreva(tTentePegue()); - escreva("|"); - escreva(tClasse()); -} - -função tSesenão(){ - escreva("----------------------------"); - escreva("Iniciando Teste: Se - Se Não"); - escreva("----------------------------"); - var a = 1; - var b = 1; - se (a == b) - retorna("Se - Se não: OK!"); - senão { - erros = erros + 1; - retorna("Se - Se não: ERRO!"); - } -} - -função tEnquanto(){ - escreva("------------------------"); - escreva("Iniciando Teste: Enquanto"); - escreva("------------------------"); - var a = 0; - enquanto(a<5){ - a = a + 1; - } - se (a == 5) - retorna("Enquanto: OK!"); - senão { - erros = erros + 1; - retorna("Enquanto: ERRO!"); - } - escreva(a); -} - -função tPara(){ - escreva("--------------------"); - escreva("Iniciando Teste: Para"); - escreva("--------------------"); - var a = 0; - para (var i = 0; i < 5; i = i + 1) { - a = a + 1; - } - se (a == 5) - retorna("Para: OK!"); - senão { - erros = erros + 1; - retorna("Para: ERRO!"); - } -} - -função tFacaEnquanto(){ - escreva("-----------------------------"); - escreva("Iniciando Teste: Faça - Enquanto"); - escreva("-----------------------------"); - var a = 0; - fazer { - a = a + 1; - } enquanto(a<5){ - } - se (a == 5) - retorna("Faça - Enquanto: OK!"); - senão { - erros = erros + 1; - retorna("Faça - Enquanto: ERRO!"); - } -} - -função tCasoEscolha(){ - escreva("--------------------"); - escreva("Iniciando Teste: Caso - Escolha"); - escreva("--------------------"); - escolha(1){ - caso 1: - retorna("Caso - Escolha: OK!"); - caso 2: - retorna("Caso - Escolha: ERRO!"); - } -} - -função tTentePegue(){ - escreva("--------------------"); - escreva("Iniciando Teste: Tente - Pegue"); - escreva("--------------------"); - tente { - 1 > "1"; - escreva("Tente - Pegue: ERRO!"); - } pegue { - escreva("Tente - Pegue: OK!"); - } finalmente { - retorna(" "); - } -} - -função tClasse(){ - escreva("--------------------"); - escreva("Iniciando Teste: Classe"); - escreva("--------------------"); - tente{ - classe Animal { - correr() { - escreva("Correndo Loucamente"); - } - } - classe Cachorro herda Animal { - latir() { - escreva("Au Au Au Au"); - } - } - var nomeDoCachorro = Cachorro(); - nomeDoCachorro.correr(); - nomeDoCachorro.latir(); - escreva("Classe: OK!"); - } pegue { - escreva("Classe: ERRO!"); - } finalmente { - retorna(" "); - } -} - -startTest(); -escreva("----------------------------"); -escreva("Teste terminado com " + texto(erros) + " erro(s)!"); -escreva("----------------------------"); - - -escreva("--------------------------------"); -escreva("Testes Internos - Biblioteca Matemática"); -escreva("--------------------------------"); -escreva("|"); - -var errosM = 0; - - -var m = importar("matematica"); -var nula = nulo; - -var o = [1,1,2,3,15]; -var p = [2,6,7,10,20]; - - -função teste_gerarPontosAbscissa() { - var gerarPontosAbscissa = m.gerarPontosAbscissa(2,3); - - se (gerarPontosAbscissa != nula) - escreva (gerarPontosAbscissa); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tfun1R(){ - var fun1R = m.fun1R(2,3); - - se (fun1R != nula) - escreva (fun1R); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tfun2R(){ - var fun2R = m.fun2R(2,-4,3); - - se (fun2R != nula) - escreva (fun2R); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função taprox(){ - var aprox = m.aprox(1,10); - - se (aprox != nula) - escreva (aprox); - senão { - errosM = errosM+1; - escreva(errosM); - - } -} - - -função tsen(){ - var sen = m.sen(60); - - se (sen != nula) - escreva (sen); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tcos(){ - var cos = m.cos(60); - - se (cos != nula) - escreva (cos); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função ttan(){ - var tan = m.tan(60); - - se (tan != nula) - escreva (tan); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tarsen(){ - var arsen = m.arsen(60); - - se (arsen != nula) - escreva (arsen); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tarcos(){ - var arcos = m.arcos(60); - - se (arcos != nula) - escreva (arcos); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tartan(){ - var artan = m.artan(60); - - se (artan != nula) - escreva (artan); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função texp(){ - var exp = m.exp(10); - - se (exp != nula) - escreva (exp); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tlog(){ - var log = m.log(10); - - se (log != nula) - escreva(log); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tpotencia(){ - var pot = m.potencia(2,3); - - se (pot != nula) - escreva(pot); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função traizq(){ - var raizq = m.raizq(49); - - se (raizq != nula) - escreva(raizq); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tvmed(){ - var vmed = m.velocidadeMedia(30,10); - - se (vmed != nula) - escreva(vmed); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tdeltas(){ - var deltas = m.deltaS(10,30); - - se (deltas != nula) - escreva(deltas); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tdeltat(){ - var deltat = m.deltaT(10,30); - - se (deltat != nula) - escreva(deltat); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tacel(){ - var acel= m.aceleracao(30,0,60,0); - - se (acel != nula) - escreva(acel); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tmrufh(){ - var mrufh = m.mrufh(0,30,15); - - se (mrufh != nula) - escreva(mrufh); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tmruvvel(){ - var mruvvel = m.mruv(0,30,15,2); - - se (mruvvel != nula) - escreva(mruvvel); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tmoda(){ - var i = [1,2,2,3,4]; - var modaUm = m.moda(i); - var j = [1,2,2,3,3]; - var modaDois = m.moda(j); - var k = [1,2,3,4,5]; - var modaTres = m.moda(k); - - se (modaUm[0] == 2) - escreva(modaUm); - senão { - errosM = errosM+1; - escreva(errosM); - } - se (modaDois[0] == 2 e modaDois[1] == 3) - escreva(modaDois); - senão { - errosM = errosM+1; - escreva(errosM); - } - - se (modaTres) - escreva(modaTres); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -escreva("--------------------------------"); -escreva("Função gerarPontosAbscissa:"); -teste_gerarPontosAbscissa(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função fun1R:"); -tfun1R(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função fun2R:"); -tfun2R(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função aprox:"); -taprox(); - -escreva("|"); -escreva("--------------------------------"); -escreva("Função numeroOcorrencias():"); -escreva(m.numeroOcorrencias([1, 2, 3, 4, 5], 3)); - -escreva("|"); -escreva("--------------------------------"); -escreva("Função max():"); -escreva(m.max([1, 2, 3, 4, 5])); - -escreva("|"); -escreva("--------------------------------"); -escreva("Função min():"); -escreva(m.min([1, 2, 3, 4, 5])); - -escreva("|"); -escreva("--------------------------------"); -escreva("Função sen:"); -tsen(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função cos:"); -tcos(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função tan:"); -ttan(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função arsen:"); -tarsen(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função arcos:"); -tarcos(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função artan:"); -tartan(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função exp:"); -texp(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função log:"); -tlog(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função potencia:"); -tpotencia(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função raizq:"); -traizq(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função vmed:"); -tvmed(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função deltas:"); -tdeltas(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função deltat:"); -tdeltat(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função acel:"); -tacel(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função mruhfh:"); -tmrufh(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função mruvvel:"); -tmruvvel(); -escreva("--------------------------------"); -escreva("Função moda:"); -tmoda(); -escreva("|"); - -escreva("--------------------------------"); -escreva("Testes Funções Internas - Linguagem Egua"); -escreva("--------------------------------"); -escreva("|"); - -função ttamanho(){ - var array = [1,2,3]; - var tam = tamanho(array); - - se (tam != nula) - escreva(tam); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função ttexto(){ - var t = 123; - var text = texto(t); - - se (text != nula) - escreva(text); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função treal(){ - var n = '123.05'; - var rel = real(n); - - se (rel != nula) - escreva(rel); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tinteiro(){ - var i = '50.56'; - var int = inteiro(i); - - se (int != nula) - escreva(int); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função tordenar(){ - var i = [4,2,1,5,3]; - var ord = ordenar(i); - - se (ord != nula) - escreva(ord); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função taleatorio(){ - var ran = aleatorio(); - se (ran != nula) - escreva(ran); - senão { - errosM = errosM+1; - escreva(errosM); - } -} - -função taleatorioEntre(){ - var ran = aleatorioEntre(3); - - se (ran < 3) { - escreva(ran); - } senão { - errosM = errosM+1; - escreva(errosM); - } - - var ran2 = aleatorioEntre(1,3); - - se (ran2 >= 1) { - se (ran2 < 3) { - escreva(ran2); - } senão { - errosM = errosM+1; - escreva(errosM); - } - } senão { - errosM = errosM+1; - escreva(errosM); - } -} - -escreva("--------------------------------"); -escreva("Função interna: Tamanho"); -ttamanho(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Texto"); -ttexto(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Real"); -treal(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Inteiro"); -tinteiro(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Ordenar"); -tordenar(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Aleatório"); -taleatorio(); -escreva("|"); -escreva("--------------------------------"); -escreva("Função interna: Aleatório Entre"); -taleatorioEntre(); -escreva("|"); -escreva("--------------------------------"); -escreva("Teste terminado com " + texto(errosM) + " erro(s)!"); -escreva("----------------------------"); - -escreva("Testando estado de função e classe"); -função a(){ - retorna 1; -} - -escreva(a); - -classe Animal { - correr() { - escreva("Correndo Loucamente"); - } -} - -escreva(Animal); -escreva("----------------------------"); - -escreva("Testando paraCada"); -var array = [1, 2, 3]; - -var fn = função(valor){ - escreva(valor); -}; - -paraCada(array, fn); - -escreva("Testando mapear"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor * 2; -}; - -escreva(mapear(array, fn)); - -escreva("Testando filtrar"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor % 2 == 0; -}; - -escreva(filtrar(array, fn)); - -escreva("Testando reduzir"); -var array = [1, 2, 3]; - -var fn = função(total, valor){ - retorna texto(total) + texto(valor); -}; - -escreva(reduzir(array, fn, '')); - -escreva("Testando encontrar"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor == 4; -}; - -escreva(encontrar(array, fn)); - -escreva("Testando encontrarIndice"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor == 3; -}; - -escreva(encontrarIndice(array, fn)); - -escreva("Testando encontrar"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor == 4; -}; - -escreva(encontrar(array, fn)); - -escreva("Testando encontrarIndice"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor == 3; -}; - -escreva(encontrarIndice(array, fn)); - -escreva("Testando encontrarUltimo"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor > 1; -}; - -escreva(encontrarUltimo(array, fn)); - -escreva("Testando encontrarUltimoIndice"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor > 1; -}; - -escreva(encontrarUltimoIndice(array, fn)); - -escreva("Testando incluido"); -var array = [1, 2, 3]; - -escreva(incluido(array, 3)); - -escreva("Testando algum"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor > 3; -}; - -escreva(algum(array, fn)); - -escreva("Testando todos"); -var array = [1, 2, 3]; - -var fn = função(valor){ - retorna valor >= 1; -}; - -escreva(todos(array, fn)); - -escreva("----------------------------"); +escreva("--------------------------------"); +escreva("Testes Internos - Linguagem Egua"); +escreva("--------------------------------"); +escreva("|"); + +var erros = 0; + +função startTest(){ + escreva(tSesenão()); + escreva("|"); + escreva(tEnquanto()); + escreva("|"); + escreva(tPara()); + escreva("|"); + escreva(tFacaEnquanto()); + escreva("|"); + escreva(tCasoEscolha()); + escreva("|"); + escreva(tTentePegue()); + escreva("|"); + escreva(tClasse()); +} + +função tSesenão(){ + escreva("----------------------------"); + escreva("Iniciando Teste: Se - Se Não"); + escreva("----------------------------"); + var a = 1; + var b = 1; + se (a == b) + retorna("Se - Se não: OK!"); + senão { + erros = erros + 1; + retorna("Se - Se não: ERRO!"); + } +} + +função tEnquanto(){ + escreva("------------------------"); + escreva("Iniciando Teste: Enquanto"); + escreva("------------------------"); + var a = 0; + enquanto(a<5){ + a = a + 1; + } + se (a == 5) + retorna("Enquanto: OK!"); + senão { + erros = erros + 1; + retorna("Enquanto: ERRO!"); + } + escreva(a); +} + +função tPara(){ + escreva("--------------------"); + escreva("Iniciando Teste: Para"); + escreva("--------------------"); + var a = 0; + para (var i = 0; i < 5; i = i + 1) { + a = a + 1; + } + se (a == 5) + retorna("Para: OK!"); + senão { + erros = erros + 1; + retorna("Para: ERRO!"); + } +} + +função tFacaEnquanto(){ + escreva("-----------------------------"); + escreva("Iniciando Teste: Faça - Enquanto"); + escreva("-----------------------------"); + var a = 0; + fazer { + a = a + 1; + } enquanto(a<5){ + } + se (a == 5) + retorna("Faça - Enquanto: OK!"); + senão { + erros = erros + 1; + retorna("Faça - Enquanto: ERRO!"); + } +} + +função tCasoEscolha(){ + escreva("--------------------"); + escreva("Iniciando Teste: Caso - Escolha"); + escreva("--------------------"); + escolha(1){ + caso 1: + retorna("Caso - Escolha: OK!"); + caso 2: + retorna("Caso - Escolha: ERRO!"); + } +} + +função tTentePegue(){ + escreva("--------------------"); + escreva("Iniciando Teste: Tente - Pegue"); + escreva("--------------------"); + tente { + 1 > "1"; + escreva("Tente - Pegue: ERRO!"); + } pegue { + escreva("Tente - Pegue: OK!"); + } finalmente { + retorna(" "); + } +} + +função tClasse(){ + escreva("--------------------"); + escreva("Iniciando Teste: Classe"); + escreva("--------------------"); + tente{ + classe Animal { + correr() { + escreva("Correndo Loucamente"); + } + } + classe Cachorro herda Animal { + latir() { + escreva("Au Au Au Au"); + } + } + var nomeDoCachorro = Cachorro(); + nomeDoCachorro.correr(); + nomeDoCachorro.latir(); + escreva("Classe: OK!"); + } pegue { + escreva("Classe: ERRO!"); + } finalmente { + retorna(" "); + } +} + +startTest(); +escreva("----------------------------"); +escreva("Teste terminado com " + texto(erros) + " erro(s)!"); +escreva("----------------------------"); + + +escreva("--------------------------------"); +escreva("Testes Internos - Biblioteca Matemática"); +escreva("--------------------------------"); +escreva("|"); + +var errosM = 0; + + +var m = importar("matematica"); +var nula = nulo; + +var o = [1,1,2,3,15]; +var p = [2,6,7,10,20]; + + +função teste_gerarPontosAbscissa() { + var gerarPontosAbscissa = m.gerarPontosAbscissa(2,3); + + se (gerarPontosAbscissa != nula) + escreva (gerarPontosAbscissa); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tfun1R(){ + var fun1R = m.fun1R(2,3); + + se (fun1R != nula) + escreva (fun1R); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tfun2R(){ + var fun2R = m.fun2R(2,-4,3); + + se (fun2R != nula) + escreva (fun2R); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função taprox(){ + var aprox = m.aprox(1,10); + + se (aprox != nula) + escreva (aprox); + senão { + errosM = errosM+1; + escreva(errosM); + + } +} + + +função tsen(){ + var sen = m.sen(60); + + se (sen != nula) + escreva (sen); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tcos(){ + var cos = m.cos(60); + + se (cos != nula) + escreva (cos); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função ttan(){ + var tan = m.tan(60); + + se (tan != nula) + escreva (tan); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tarsen(){ + var arsen = m.arsen(60); + + se (arsen != nula) + escreva (arsen); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tarcos(){ + var arcos = m.arcos(60); + + se (arcos != nula) + escreva (arcos); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tartan(){ + var artan = m.artan(60); + + se (artan != nula) + escreva (artan); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função texp(){ + var exp = m.exp(10); + + se (exp != nula) + escreva (exp); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tlog(){ + var log = m.log(10); + + se (log != nula) + escreva(log); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tpotencia(){ + var pot = m.potencia(2,3); + + se (pot != nula) + escreva(pot); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função traizq(){ + var raizq = m.raizq(49); + + se (raizq != nula) + escreva(raizq); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tvmed(){ + var vmed = m.velocidadeMedia(30,10); + + se (vmed != nula) + escreva(vmed); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tdeltas(){ + var deltas = m.deltaS(10,30); + + se (deltas != nula) + escreva(deltas); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tdeltat(){ + var deltat = m.deltaT(10,30); + + se (deltat != nula) + escreva(deltat); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tacel(){ + var acel= m.aceleracao(30,0,60,0); + + se (acel != nula) + escreva(acel); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tmrufh(){ + var mrufh = m.mrufh(0,30,15); + + se (mrufh != nula) + escreva(mrufh); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tmruvvel(){ + var mruvvel = m.mruv(0,30,15,2); + + se (mruvvel != nula) + escreva(mruvvel); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tmoda(){ + var i = [1,2,2,3,4]; + var modaUm = m.moda(i); + var j = [1,2,2,3,3]; + var modaDois = m.moda(j); + var k = [1,2,3,4,5]; + var modaTres = m.moda(k); + + se (modaUm[0] == 2) + escreva(modaUm); + senão { + errosM = errosM+1; + escreva(errosM); + } + se (modaDois[0] == 2 e modaDois[1] == 3) + escreva(modaDois); + senão { + errosM = errosM+1; + escreva(errosM); + } + + se (modaTres) + escreva(modaTres); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +escreva("--------------------------------"); +escreva("Função gerarPontosAbscissa:"); +teste_gerarPontosAbscissa(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função fun1R:"); +tfun1R(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função fun2R:"); +tfun2R(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função aprox:"); +taprox(); + +escreva("|"); +escreva("--------------------------------"); +escreva("Função numeroOcorrencias():"); +escreva(m.numeroOcorrencias([1, 2, 3, 4, 5], 3)); + +escreva("|"); +escreva("--------------------------------"); +escreva("Função max():"); +escreva(m.max([1, 2, 3, 4, 5])); + +escreva("|"); +escreva("--------------------------------"); +escreva("Função min():"); +escreva(m.min([1, 2, 3, 4, 5])); + +escreva("|"); +escreva("--------------------------------"); +escreva("Função sen:"); +tsen(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função cos:"); +tcos(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função tan:"); +ttan(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função arsen:"); +tarsen(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função arcos:"); +tarcos(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função artan:"); +tartan(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função exp:"); +texp(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função log:"); +tlog(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função potencia:"); +tpotencia(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função raizq:"); +traizq(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função vmed:"); +tvmed(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função deltas:"); +tdeltas(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função deltat:"); +tdeltat(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função acel:"); +tacel(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função mruhfh:"); +tmrufh(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função mruvvel:"); +tmruvvel(); +escreva("--------------------------------"); +escreva("Função moda:"); +tmoda(); +escreva("|"); + +escreva("--------------------------------"); +escreva("Testes Funções Internas - Linguagem Egua"); +escreva("--------------------------------"); +escreva("|"); + +função ttamanho(){ + var array = [1,2,3]; + var tam = tamanho(array); + + se (tam != nula) + escreva(tam); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função ttexto(){ + var t = 123; + var text = texto(t); + + se (text != nula) + escreva(text); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função treal(){ + var n = '123.05'; + var rel = real(n); + + se (rel != nula) + escreva(rel); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tinteiro(){ + var i = '50.56'; + var int = inteiro(i); + + se (int != nula) + escreva(int); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função tordenar(){ + var i = [4,2,1,5,3]; + var ord = ordenar(i); + + se (ord != nula) + escreva(ord); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função taleatorio(){ + var ran = aleatorio(); + se (ran != nula) + escreva(ran); + senão { + errosM = errosM+1; + escreva(errosM); + } +} + +função taleatorioEntre(){ + var ran = aleatorioEntre(3); + + se (ran < 3) { + escreva(ran); + } senão { + errosM = errosM+1; + escreva(errosM); + } + + var ran2 = aleatorioEntre(1,3); + + se (ran2 >= 1) { + se (ran2 < 3) { + escreva(ran2); + } senão { + errosM = errosM+1; + escreva(errosM); + } + } senão { + errosM = errosM+1; + escreva(errosM); + } +} + +escreva("--------------------------------"); +escreva("Função interna: Tamanho"); +ttamanho(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Texto"); +ttexto(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Real"); +treal(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Inteiro"); +tinteiro(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Ordenar"); +tordenar(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Aleatório"); +taleatorio(); +escreva("|"); +escreva("--------------------------------"); +escreva("Função interna: Aleatório Entre"); +taleatorioEntre(); +escreva("|"); +escreva("--------------------------------"); +escreva("Teste terminado com " + texto(errosM) + " erro(s)!"); +escreva("----------------------------"); + +escreva("Testando estado de função e classe"); +função a(){ + retorna 1; +} + +escreva(a); + +classe Animal { + correr() { + escreva("Correndo Loucamente"); + } +} + +escreva(Animal); +escreva("----------------------------"); + +escreva("Testando paraCada"); +var array = [1, 2, 3]; + +var fn = função(valor){ + escreva(valor); +}; + +paraCada(array, fn); + +escreva("Testando mapear"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor * 2; +}; + +escreva(mapear(array, fn)); + +escreva("Testando filtrar"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor % 2 == 0; +}; + +escreva(filtrar(array, fn)); + +escreva("Testando reduzir"); +var array = [1, 2, 3]; + +var fn = função(total, valor){ + retorna texto(total) + texto(valor); +}; + +escreva(reduzir(array, fn, '')); + +escreva("Testando encontrar"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor == 4; +}; + +escreva(encontrar(array, fn)); + +escreva("Testando encontrarIndice"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor == 3; +}; + +escreva(encontrarIndice(array, fn)); + +escreva("Testando encontrar"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor == 4; +}; + +escreva(encontrar(array, fn)); + +escreva("Testando encontrarIndice"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor == 3; +}; + +escreva(encontrarIndice(array, fn)); + +escreva("Testando encontrarUltimo"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor > 1; +}; + +escreva(encontrarUltimo(array, fn)); + +escreva("Testando encontrarUltimoIndice"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor > 1; +}; + +escreva(encontrarUltimoIndice(array, fn)); + +escreva("Testando incluido"); +var array = [1, 2, 3]; + +escreva(incluido(array, 3)); + +escreva("Testando algum"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor > 3; +}; + +escreva(algum(array, fn)); + +escreva("Testando todos"); +var array = [1, 2, 3]; + +var fn = função(valor){ + retorna valor >= 1; +}; + +escreva(todos(array, fn)); + +escreva("----------------------------"); + +escreva("--------------------------------"); +escreva("Testes Internos - Biblioteca Textos"); +escreva("--------------------------------"); +escreva("|"); + +var t = importar("textos"); // Importa Biblioteca +var erros_t = 0; +var nula = nulo; +var texto_teste = "Programação simples e moderna em português"; + +função checa_minusculas() { + var esperado = "abcdefghijklmnopqrstuvwxyz"; + var obtido = t.letras_minusculas; + + se (obtido != esperado) { + escreva("TESTE: letras_minusculas: falhou!"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: letras_minusculas: passou!"); +} + +função checa_maiusculas() { + var esperado = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var obtido = t.letras_maiusculas; + se (obtido != esperado) { + escreva("TESTE: letras_maiusculas: falhou!"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: letras_maiusculas: passou!"); +} + +função checa_letras(){ + var esperado = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + var obtido = t.letras; + se (obtido != esperado) { + escreva("TESTE: letras: falhou!"); + escreva("| esperado: '" + esperado + "'"); + escreva("| obtido: '" + obtido + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: letras: passou!"); +} + +função checa_digitos(){ + var esperado = "0123456789"; + var obtido = t.digitos; + + se (obtido != esperado) { + escreva("TESTE: digitos: falhou!"); + escreva("| esperado: '" + esperado + "'"); + escreva("| obtido: '" + obtido + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: digitos: passou!"); +} + +função checa_pontuacoes(){ + var esperado = '!"'+"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"; + var obtido = t.pontuacoes; + + se (obtido != esperado) { + escreva("TESTE: pontuacoes: falhou!"); + escreva("| esperado: '" + esperado + "'"); + escreva("| obtido: '" + obtido + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: pontuacoes: passou!"); +} + +função testa_maiusculo(){ + var esperado = "PROGRAMAÇÃO SIMPLES E MODERNA EM PORTUGUÊS"; + var obtido = t.maiusculo(texto_teste); + + se (obtido != esperado) { + escreva("TESTE: função maiusculo(): falhou!"); + escreva("| esperado: '" + esperado + "'"); + escreva("| obtido: '" + obtido + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: função maiusculo(): passou!"); +} + +função testa_minusculo(){ + var esperado = "programação simples e moderna em português"; + var obtido = t.minusculo(texto_teste); + + se (obtido != esperado) { + escreva("TESTE: função minusculo(): falhou!"); + escreva("| esperado: '" + esperado + "'"); + escreva("| obtido: '" + obtido + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: função minusculo(): passou!"); +} + +função testa_contem(){ + var esperado = verdadeiro; + var obtido = t.contem(texto_teste, "simples"); + + se (obtido != esperado) { + escreva("TESTE: função contem(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função contem(): passou!"); +} + +função testa_formate(){ + var texto_teste = "{} {} {} {} {} {}"; + var esperado = "1 2.5 verdadeiro falso egua nulo"; + var obtido = t.formate(texto_teste, 1, 2.5, verdadeiro, falso, "egua", nula); + + se (obtido != esperado) { + escreva("TESTE: função formate(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + escreva("TESTE: função formate(): passou!"); +} + +função testa_dividir(){ + var esperado = ['Programação','simples','e','moderna','em','português']; + var obtido = t.dividir(texto_teste, ' '); + + se (tamanho(esperado) != tamanho(obtido)){ + escreva("TESTE: função dividir(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + para (var i = 0; i < tamanho(esperado); i = i + 1){ + se (obtido[i] != esperado[i]){ + escreva("TESTE: função dividir(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + } + escreva("TESTE: função dividir(): passou!"); +} + +função testa_tamanho(){ + var esperado = 42; + var obtido = t.tamanho(texto_teste); + + se (esperado != obtido){ + escreva("TESTE: função tamanho(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função tamanho(): passou!"); +} + +função testa_repita(){ + var texto_teste = "aa"; + var esperado = "aaaaaa"; + var obtido = t.repita(texto_teste, 3); + + se (esperado != obtido){ + escreva("TESTE: função repita(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função repita(): passou!"); +} + +função testa_substituir(){ + var texto_teste = "aaacaa"; + var esperado = "aaabaa"; + var obtido = t.substituir(texto_teste, "c", "b"); + + se (esperado != obtido){ + escreva("TESTE: função substituir(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função substituir(): passou!"); +} + +função testa_busca(){ + var texto_teste = "aabaa"; + var esperado = 2; + var obtido = t.busca(texto_teste, "b"); + + se (esperado != obtido){ + escreva("TESTE: função busca(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função busca(): passou!"); +} + +função testa_apara(){ + var texto_teste = " egua "; + var esperado = "egua"; + var obtido = t.apara(texto_teste); + + se (esperado != obtido){ + escreva("TESTE: função apara(): falhou!"); + escreva("| esperado: '" + texto(esperado) + "'"); + escreva("| obtido: '" + texto(obtido) + "'"); + erros_t = erros_t + 1; + retorna; + } + + escreva("TESTE: função apara(): passou!"); +} + +checa_minusculas(); +checa_maiusculas(); +checa_letras(); +checa_digitos(); +checa_pontuacoes(); +testa_maiusculo(); +testa_minusculo(); +testa_contem(); +testa_formate(); +testa_dividir(); +testa_tamanho(); +testa_repita(); +testa_substituir(); +testa_busca(); +testa_apara(); + +escreva("----------------------------"); +escreva(" terminado com " + texto(erros_t) + " erro(s)!"); +escreva("----------------------------"); \ No newline at end of file From 440d5f8add2eb11ae939157d5092f18b41c467ea Mon Sep 17 00:00:00 2001 From: Andre0n Date: Mon, 9 Jan 2023 21:45:24 -0300 Subject: [PATCH 2/2] =?UTF-8?q?Resolvendo=20poss=C3=ADvel=20bug=20com=20o?= =?UTF-8?q?=20uso=20`this`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/textos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/textos.js b/src/lib/textos.js index a5833a7..6b2cf9f 100644 --- a/src/lib/textos.js +++ b/src/lib/textos.js @@ -25,7 +25,7 @@ module.exports.letras_maiusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; /** * Conjunto de todas as letraas */ -module.exports.letras = this.letras_minusculas + this.letras_maiusculas; +module.exports.letras = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /** * Conjunto de todas os dígitos