「Stackを使ってQueueを作る」をJSXで
発想がおもしろかったので JSX で実装してみました。
import "test-case.jsx"; class Queue.<T> { var _in = new Array.<T>; var _out = new Array.<T>; function constructor() { } function enqueue(value : T) : void { this._in.push(value); } function dequeue() : Nullable.<T> { if (this._out.length == 0) { if (this._in.length == 0) { throw new Error("Queue is empty!"); } while (this._in.length > 0) { this._out.push(this._in.pop()); } } return this._out.pop(); } } class _Test extends TestCase { function testQueue() : void { var q = new Queue.<number>; q.enqueue(10); q.enqueue(20); q.enqueue(30); this.expect(q.dequeue()).toBe(10); this.expect(q.dequeue()).toBe(20); this.expect(q.dequeue()).toBe(30); } } // vim: set tabstop=2 shiftwidth=2 expandtab:
実行:
$ jsx --test queue-with.stack.jsx 1..1 ok 1 ok 2 ok 3 1..3 ok 1 - testQueue