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 new file mode 100644 index 0000000..8a83a67 --- /dev/null +++ b/packages/ash/assembly/__tests__/sort.spec.ts @@ -0,0 +1,45 @@ +import { main as sort } from "../bin/sort"; +import { stdout, Hello, World, testFile, stderr, Hello_World } from './fixtures'; + + +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 new file mode 100644 index 0000000..f7415fd --- /dev/null +++ b/packages/ash/assembly/bin/sort.ts @@ -0,0 +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"); + } + + + + } + + let sorted = arr.sort(stringcomp); + + for (let j: i32 = 0; j < sorted.length; j++) { + // log(sorted[j]); + Console.write(sorted[j]); + + } + + + + } +} +