This commit is contained in:
parent
69883a5211
commit
42649e3160
@ -1,15 +1,21 @@
|
||||
package io.gitlab.jfronny.muscript.test;
|
||||
|
||||
import io.gitlab.jfronny.muscript.compiler.Parser;
|
||||
import org.junit.jupiter.api.*;
|
||||
import io.gitlab.jfronny.muscript.data.Scope;
|
||||
import io.gitlab.jfronny.muscript.data.dynamic.DFinal;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static io.gitlab.jfronny.muscript.test.util.MuTestUtil.*;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static io.gitlab.jfronny.muscript.test.util.MuTestUtil.makeArgs;
|
||||
import static io.gitlab.jfronny.muscript.test.util.MuTestUtil.number;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class ClosureTest {
|
||||
@Test
|
||||
void testScript() {
|
||||
assertEquals(8, Parser.parseScript("function(2, 1) function(2, 2) function(2, 3)").run(makeArgs()).asNumber().getValue());
|
||||
assertEquals(8, Parser.parseScript("function(2, 1) function(2, 2) function(2, 3)")
|
||||
.run(makeArgs())
|
||||
.asNumber()
|
||||
.getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -20,4 +26,23 @@ class ClosureTest {
|
||||
assertEquals(2, number("{->num = 2 num = num * 2 num = num - 2}()"));
|
||||
assertEquals(2, number("{->num = 2; num = num * 2; num = num - 2}()"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void fizzbuzzInμScriptByEmbeddingADomainSpecificLanguage() {
|
||||
var fn = Parser.parse("""
|
||||
{ n ->
|
||||
test = { b, s, o -> n % b == 0 ? { _ -> s || o('')} : o }
|
||||
fizz = { o -> test(3, 'Fizz', o) }
|
||||
buzz = { o -> test(5, 'Buzz', o) }
|
||||
fizz(buzz({n -> n}))(n)
|
||||
}
|
||||
""")
|
||||
.asDynamicExpr()
|
||||
.get(new Scope())
|
||||
.asCallable();
|
||||
assertEquals("8", fn.call(DFinal.of(8)).asString().getValue());
|
||||
assertEquals("Buzz", fn.call(DFinal.of(10)).asString().getValue());
|
||||
assertEquals("Fizz", fn.call(DFinal.of(12)).asString().getValue());
|
||||
assertEquals("FizzBuzz", fn.call(DFinal.of(15)).asString().getValue());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user