Retos
Retos
- Modifique la versión actual del lenguaje egg para que acepte como entrada este programa en
examples/reto.egg
:
do {
def(sum, ; function
-> { nums,
do {
:= (i, 0), # Creates a local variable i and sets to 0
:= (s, 0), # Creates local var s and sets to 0
while { <(i, length(nums)),
do { =(s, +(s, <-(nums, i))),
=(i, +(i, 1))
}
},
s
}
)
},
print(+("sum(array[1, 2, 3]) := ", sum(array[1, 2, 3])))
}
- Introduzca una prueba en
test/test.js
que demuestre que una entrada como la deexamples/scope-err.egg
:
do(
set(x,9),
print(x) # ReferenceError: Tried setting an undefined variable: x
)
produce una excepción de este estilo: SyntaxError: Unexpected input after reached the end of parsing 1: 5) ;
Estudie la API de Should.js
- Introduzca una prueba en
test/test.js
que demuestre que una entrada como la deexamples/number-as-fun-err.egg
:4(5) ; Calling a number as a function
produce una excepción
- Introduzca una prueba en
test/test.js
que demuestre que una entrada como la deexamples/one.egg
:
do(
define(x, 4),
define(setx, fun(val,
set(x, val)
)
),
setx(50),
print(x)
)
produce una salida en stdout
de 50.
- Utilice la técnica de stubbing (test stubs are software components that simulate the behaviors of other software components (or modules) that a module undergoing tests depends on). Haga stubbing sobre
console.log
- Algo como esto le puede ayudar:
describe("run", function() {
let originalLog;
beforeEach(function() {
originalLog = console.log;
console.log = function (...args) {
...
};
});
// test code here
afterEach(function() {
...
});
it("testing one.egg with mocking of console.log", function() {
...
}
}
Si quiere saber mas sobre stubbing estudie la librería sinon
Recursos
- Rama
reto
del repo ULL-ESIT-PL-1617/egg - Aquí esta el repo con la versión pública de nuestra versión del lenguaje
egg
- Eloquent JS: Chapter 11. Project: A Programming Language
- El lenguaje egg: repo en GitHub
- Repo interpreter-egg
- NodeJS Readline gist
- En el repo ULL-ESIT-PL-1617/interpreter-egg se muestra como hacer un bucle REPL
- XRegExp
- Egg as an npm module
- gist to check the npm module
Notas para el profesor
Locally at branch private2019
at /Users/casiano/local/src/javascript/PLgrado/eloquentjsegg
:
- Redefining parenthesis to use
{
and}
branchprivate2019
at/Users/casiano/local/src/javascript/PLgrado/eloquentjsegg
- Aliasing ‘fun’
- Non declared variables test branch
private
at/Users/casiano/local/src/javascript/PLgrado/eloquentjsegg
repo https://github.com/ULL-ESIT-PL-1718/egg - Stubbing console.log example branch
private2019
at/Users/casiano/local/src/javascript/PLgrado/eloquentjsegg