Repository: DesignLiquido/delegua
Pull request #444 (2023-06-08 17:42:06)

#442 Permitir comparações entre textos seguindo a ordem lexicográfica
Resolve: https://github.com/DesignLiquido/delegua/issues/442

github-actions[bot]: <!-- jest coverage report action for options with hash 781087021f8e6c43aac1e668f4520603 -->

## Coverage report 



| <div title="Status of coverage:&#10; 🟢 - ok&#10; 🟡 - slightly more than threshold&#10; 🔴 - under the threshold">St.<sup>:grey_question:</sup></div> | Category   | Percentage                                                     | Covered / Total |
| :----------------------------------------------------------------------------------------------------------------------------------------------------: | :--------- | :------------------------------------------------------------- | :-------------: |
|                                                                           🟡                                                                           | Statements | <div title="Base coverage is: 73.53%">73.54% (+0.01% 🔼)</div> |    7330/9967    |
|                                                                           🟡                                                                           | Branches   | <div title="Base coverage is: 63.08%">63.16% (+0.08% 🔼)</div> |    2328/3686    |
|                                                                           🟡                                                                           | Functions  | 69.1%                                                          |    1087/1573    |
|                                                                           🟡                                                                           | Lines      | <div title="Base coverage is: 73.94%">73.95% (+0.01% 🔼)</div> |    7151/9670    |


## Test suite run success
629 tests passing in 49 suites.

<p align="right">Report generated by <a href="https://github.com/ArtiomTr/jest-coverage-report-action">🧪jest coverage report action</a> from b312ccc040d2095d99c841b18f9f0f153f810c0e</p>
<!-- Sticky Pull Request Comment -->

Patch:
diff --git a/fontes/interpretador/interpretador-base.ts b/fontes/interpretador/interpretador-base.ts
index 2492eb7a..6f53b370 100644
--- a/fontes/interpretador/interpretador-base.ts
+++ b/fontes/interpretador/interpretador-base.ts
@@ -361,16 +361,22 @@ export class InterpretadorBase implements InterpretadorInterface {
                     return Math.pow(valorEsquerdo, valorDireito);
 
                 case tiposDeSimbolos.MAIOR:
-                    this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
-                    return Number(valorEsquerdo) > Number(valorDireito);
+                    if (tipoEsquerdo === 'número' && tipoDireito === 'número') {
+                        return Number(valorEsquerdo) > Number(valorDireito);
+                    } else {
+                        return String(valorEsquerdo) > String(valorDireito);
+                    }
 
                 case tiposDeSimbolos.MAIOR_IGUAL:
                     this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
                     return Number(valorEsquerdo) >= Number(valorDireito);
 
                 case tiposDeSimbolos.MENOR:
-                    this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
-                    return Number(valorEsquerdo) < Number(valorDireito);
+                    if (tipoEsquerdo === 'número' && tipoDireito === 'número') {
+                        return Number(valorEsquerdo) < Number(valorDireito);
+                    } else {
+                        return String(valorEsquerdo) < String(valorDireito);
+                    }
 
                 case tiposDeSimbolos.MENOR_IGUAL:
                     this.verificarOperandosNumeros(expressao.operador, esquerda, direita);


Test patch:
diff --git a/testes/interpretador.test.ts b/testes/interpretador.test.ts
index cebcc06f..75b73270 100644
--- a/testes/interpretador.test.ts
+++ b/testes/interpretador.test.ts
@@ -221,6 +221,18 @@ describe('Interpretador', () => {
 
                     expect(retornoInterpretador.erros).toHaveLength(0);
                 });
+
+                it('Ordem lexicográfica de textos', async () => {
+                    const retornoLexador = lexador.mapear([
+                        "escreva('batata' > 'arroz')",
+                        "escreva('batata' < 'arroz')"
+                    ], -1);
+                    const retornoAvaliadorSintatico = avaliadorSintatico.analisar(retornoLexador, -1);
+    
+                    const retornoInterpretador = await interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
+    
+                    expect(retornoInterpretador.erros).toHaveLength(0);
+                });
             });
 
             describe('Operações matemáticas', () => {