test65.spec.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { IVProgParser } from './../js/ast/ivprogParser';
  2. import { SemanticAnalyser } from './../js/processor/semantic/semanticAnalyser';
  3. import { LanguageService } from '../js/services/languageService';
  4. import { OutputTest } from '../js/util/outputTest';
  5. import { IVProgProcessor } from '../js/processor/ivprogProcessor';
  6. describe('Non initialized vector/matrix', function () {
  7. const code = `programa {
  8. funcao inicio() {
  9. inteiro a[16] = {1,8,3,5,7,4,2,1,8,3,5,7,-4,2,10,-1}
  10. inteiro tam = total_de_elementos(a) - 1
  11. inteiro i
  12. a = mergeSort(a, 0, tam)
  13. para(i = 0; i< tam; i = i + 1) {
  14. escreva(a[i] + ", ")
  15. }
  16. escreva(a[i])
  17. }
  18. funcao inteiro[] mergeSort(inteiro a[], inteiro init, inteiro end) {
  19. inteiro meio = (init + end) / 2
  20. inteiro size1 = meio - init + 1, size2 = end - meio, sizeF = end - init + 1
  21. inteiro p1[size1]
  22. inteiro p2[size2]
  23. inteiro f[sizeF]
  24. se (init < end) {
  25. p1 = mergeSort(a, init, meio)
  26. p2 = mergeSort(a, meio+1, end)
  27. f = merge(p1, p2)
  28. retorne f
  29. } senao {
  30. retorne { a[init] }
  31. }
  32. }
  33. funcao inteiro[] merge(inteiro p1[], inteiro p2[]) {
  34. inteiro lenp1 = total_de_elementos(p1)
  35. inteiro lenp2 = total_de_elementos(p2)
  36. inteiro sizeF = lenp1 + lenp2
  37. inteiro f[sizeF]
  38. inteiro i = 0, a = 0, b =0
  39. enquanto(i < lenp1+lenp2) {
  40. se(a < lenp1) {
  41. se(b <lenp2) {
  42. se(p1[a] <= p2[b]) {
  43. f[i] = p1[a]
  44. a = a + 1
  45. i = i + 1
  46. } senao {
  47. f[i] = p2[b]
  48. b = b + 1
  49. i = i + 1
  50. }
  51. } senao {
  52. enquanto(a < lenp1) {
  53. f[i] = p1[a]
  54. a = a + 1
  55. i = i + 1
  56. }
  57. }
  58. } senao {
  59. enquanto(b < lenp2) {
  60. f[i] = p2[b]
  61. b = b + 1
  62. i = i + 1
  63. }
  64. }
  65. }
  66. retorne f
  67. }
  68. }
  69. `;
  70. localStorage.setItem('ivprog.lang', 'pt');
  71. const lexer = LanguageService.getCurrentLexer();
  72. const out = new OutputTest();
  73. it(`should not throw an exception`, function (done) {
  74. const parser = new IVProgParser(code, lexer);
  75. const sem = new SemanticAnalyser(parser.parseTree());
  76. const exec = new IVProgProcessor(sem.analyseTree());
  77. exec.registerOutput(out);
  78. exec.interpretAST().then(_ => {
  79. expect(out.list.length).toEqual(16);
  80. done()
  81. }).catch( err => done(err));
  82. });
  83. });