「Stackを使ってQueueを作る」をJSXで

Stackを使ってQueueを作る - くまメモ

発想がおもしろかったので 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