From 3932cd5f07de2e074864798e1fd5b57d47214226 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Thu, 21 Jun 2018 18:43:03 -0700 Subject: [PATCH] cmd/land: support stdout, fizzbuzz --- cmd/land/process.go | 5 +++ cmd/land/process_test.go | 4 ++ cmd/land/testdata/fizzbuzz.c | 71 ++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 cmd/land/testdata/fizzbuzz.c diff --git a/cmd/land/process.go b/cmd/land/process.go index 58c8903..6a2b2b2 100644 --- a/cmd/land/process.go +++ b/cmd/land/process.go @@ -227,6 +227,11 @@ func (p *Process) open(fnamesP int32, flags int32) int32 { var err error switch str { case "stdout": + fi = stdFD{ + ReadWriteCloser: os.Stdout, + } + + case "log": fi = stdFD{ ReadWriteCloser: loggerFile{ Logger: log.New(os.Stdout, p.name+" ", log.LstdFlags), diff --git a/cmd/land/process_test.go b/cmd/land/process_test.go index 38ce7d2..4c3d97c 100644 --- a/cmd/land/process_test.go +++ b/cmd/land/process_test.go @@ -116,3 +116,7 @@ func TestStruct(t *testing.T) { func TestCHelloWorld(t *testing.T) { testWasmFile(t, "./testdata/helloworld.wasm") } + +func TestFizzbuzz(t *testing.T) { + testWasmFile(t, "./testdata/fizzbuzz.wasm") +} diff --git a/cmd/land/testdata/fizzbuzz.c b/cmd/land/testdata/fizzbuzz.c new file mode 100644 index 0000000..4c8cea6 --- /dev/null +++ b/cmd/land/testdata/fizzbuzz.c @@ -0,0 +1,71 @@ +extern int open(const char *, int); +extern int write(int, char *, int); + +char intToLetter(int i) { + switch (i) { + case 0: + return '0'; + case 1: + return '1'; + case 2: + return '2'; + case 3: + return '3'; + case 4: + return '4'; + case 5: + return '5'; + case 6: + return '6'; + case 7: + return '7'; + case 8: + return '8'; + case 9: + return '9'; + } + + return '?'; +} + +char* makeIntString(int i) { + char a[3]; + + int hundreds = i / 100; + int tens = (i/10) % 10; + int ones = i % 10; + + a[0] = intToLetter(hundreds); + a[1] = intToLetter(tens); + a[2] = intToLetter(ones); + + return a; +} + +__attribute__ ((visibility ("default"))) +int main() { + int fd; + int x; + + fd = open("stdout", 0x42); + + for (x = 0; x < 100; x++) { + int wrote = 0; + if (x % 3 == 0) { + wrote = 1; + write(fd, "Fizz", 4); + } + if (x % 5 == 0) { + wrote = 1; + write(fd, "Buzz", 4); + } + + if (wrote == 0) { + write(fd, makeIntString(x), 3); + } + + write(fd, "\n", 1); + } + + return 0; +}