From d7369a0f81cbe7c2e1d3db686fdcf45b322d01bc Mon Sep 17 00:00:00 2001 From: Muzammil Quadir Date: Wed, 8 May 2019 15:26:10 -0400 Subject: [PATCH 1/2] Initial Commit --- packages/ash/assembly/__tests__/sort.spec.ts | 7 +++++++ packages/ash/assembly/bin/sort.ts | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/ash/assembly/__tests__/sort.spec.ts create mode 100644 packages/ash/assembly/bin/sort.ts diff --git a/packages/ash/assembly/__tests__/sort.spec.ts b/packages/ash/assembly/__tests__/sort.spec.ts new file mode 100644 index 0000000..b08b2fa --- /dev/null +++ b/packages/ash/assembly/__tests__/sort.spec.ts @@ -0,0 +1,7 @@ +import { main as sort } from "../bin/sort"; + +import { Console, fs, Process, CommandLine } from '../../../assemblyscript/assembly/wasa/mock'; +import { FileDescriptor } from '../../../assemblyscript/assembly/wasa/mock/fs'; +import { openStdout, Hello, World, testFile } from './mocks'; + + diff --git a/packages/ash/assembly/bin/sort.ts b/packages/ash/assembly/bin/sort.ts new file mode 100644 index 0000000..17d167b --- /dev/null +++ b/packages/ash/assembly/bin/sort.ts @@ -0,0 +1,16 @@ + + + +export function main(args: string[]): void { + + + if (args[1] == "-n") { + let _args = args.slice(2).join(" "); + Console.write(_args, false) + } else { + let _args = args.slice(1).join(" ") + Console.log(_args); + } + + +} From 9be99616b8917e579cedd59dad637da484a881e7 Mon Sep 17 00:00:00 2001 From: Muzammil Quadir Date: Fri, 17 May 2019 11:48:16 -0400 Subject: [PATCH 2/2] Sort Added --- packages/ash/assembly/__tests__/simple_fs.ts | 2 +- packages/ash/assembly/__tests__/sort.spec.ts | 44 ++++++++++++++++-- packages/ash/assembly/bin/sort.ts | 48 +++++++++++++++++--- 3 files changed, 83 insertions(+), 11 deletions(-) diff --git a/packages/ash/assembly/__tests__/simple_fs.ts b/packages/ash/assembly/__tests__/simple_fs.ts index 5f4d797..22a9ede 100644 --- a/packages/ash/assembly/__tests__/simple_fs.ts +++ b/packages/ash/assembly/__tests__/simple_fs.ts @@ -16,6 +16,6 @@ export const fs_str = `\ }\ }\ },\ - "numbers": "0\\n1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12\\n13\\n14\\n15\\n16\\n17\\n18\\n19"\ + "numbers": "0\\n1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\\n12\\n13\\n14\\n15\\n16\\n17\\n18\\n19\\n"\ }\ ` \ No newline at end of file diff --git a/packages/ash/assembly/__tests__/sort.spec.ts b/packages/ash/assembly/__tests__/sort.spec.ts index b08b2fa..8a83a67 100644 --- a/packages/ash/assembly/__tests__/sort.spec.ts +++ b/packages/ash/assembly/__tests__/sort.spec.ts @@ -1,7 +1,45 @@ import { main as sort } from "../bin/sort"; +import { stdout, Hello, World, testFile, stderr, Hello_World } from './fixtures'; -import { Console, fs, Process, CommandLine } from '../../../assemblyscript/assembly/wasa/mock'; -import { FileDescriptor } from '../../../assemblyscript/assembly/wasa/mock/fs'; -import { openStdout, Hello, World, testFile } from './mocks'; +describe("sort", (): void => { + beforeEach((): void => { + stdout.reset() + Console.stdout.erase() //Erases and resets + stderr.reset(); + Console.stderr.erase() //Erases and resets + CommandLine.reset(); + CommandLine.push("sort"); + }); + + it("should write to stderr if file not found", () => { + CommandLine.push("/doesnotexist"); + sort(CommandLine.all()) + expect(Console.stderr.tell()).toBeGreaterThan(0); + expect(stderr.readString().result).toStrictEqual("sort: /doesnotexist: No such file or directory\n") + }); + + it("should write from multiple files", () => { + CommandLine.push("/test") + CommandLine.push("/numbers") + sort(CommandLine.all()) + log(stdout.readString().result); + expect(Console.stdout.tell()).toBeGreaterThan(Hello_World.lengthUTF8 - 1); + + let line = stdout.readString(); + while (!line.failed) { + + let line2 = stdout.readString(); + + if (line2.failed) { + break; + } + + expect(line.result).toBeLessThanOrEqualTo(line2.result); + + line = line2; + } + }); + +}) diff --git a/packages/ash/assembly/bin/sort.ts b/packages/ash/assembly/bin/sort.ts index 17d167b..f7415fd 100644 --- a/packages/ash/assembly/bin/sort.ts +++ b/packages/ash/assembly/bin/sort.ts @@ -1,16 +1,50 @@ +function stringcomp(s1: string, s2: string): i32 { + if (s1 > s2) { + return 1; + } else if (s1 < s2) { + return -1 + } + return 0; +} export function main(args: string[]): void { + if (args.length > 1) { + + let arr: string[] = []; + + for (let i: i32 = 1; i < args.length; i++) { + + let fd = fs.openFile(args[i]); + + if (!fd.failed) { + + let line = fd.result.readLine(); + while (!line.failed) { + arr.push(line.result); + line = fd.result.readLine(); + } + + } else { + Console.error("sort: " + args[i] + ": No such file or directory"); + } - if (args[1] == "-n") { - let _args = args.slice(2).join(" "); - Console.write(_args, false) - } else { - let _args = args.slice(1).join(" ") - Console.log(_args); - } + } + + let sorted = arr.sort(stringcomp); + + for (let j: i32 = 0; j < sorted.length; j++) { + // log(sorted[j]); + Console.write(sorted[j]); + + } + + + + } } +