summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/oktavia/test/test-wavelet-matrix.jsx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--web/server/h2o/libh2o/misc/oktavia/test/test-wavelet-matrix.jsx143
1 files changed, 143 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/misc/oktavia/test/test-wavelet-matrix.jsx b/web/server/h2o/libh2o/misc/oktavia/test/test-wavelet-matrix.jsx
new file mode 100644
index 00000000..049d18d8
--- /dev/null
+++ b/web/server/h2o/libh2o/misc/oktavia/test/test-wavelet-matrix.jsx
@@ -0,0 +1,143 @@
+/**
+ * This is a JSX version of shellinford library:
+ * https://code.google.com/p/shellinford/
+ *
+ * License: http://shibu.mit-license.org/
+ */
+
+import "test-case.jsx";
+import "wavelet-matrix.jsx";
+
+class _Test extends TestCase
+{
+ var test_src : string;
+ var wm : WaveletMatrix;
+ var rd : int[][];
+ var sd : int[][];
+ var td : int[][];
+
+ override function setUp () : void
+ {
+ this.test_src = "abracadabra mississippi";
+ this.wm = new WaveletMatrix();
+ this.wm.build(this.test_src);
+ this.rd = [] : int[][];
+ this.sd = [] : int[][];
+ this.td = [] : int[][];
+
+ for (var i = 0; i < 256; i++)
+ {
+ this.rd.push([0] : int[]);
+ this.td.push([0] : int[]);
+ this.sd.push([] : int[]);
+ }
+
+ for (var i = 0; i < this.test_src.length; i++)
+ {
+ for (var c = 0; c < 256; c++)
+ {
+ this.rd[c].push(this.rd[c][i]);
+ this.td[c].push(this.td[c][i]);
+ if (this.test_src.charCodeAt(i) == c)
+ {
+ this.rd[c][i + 1]++;
+ this.sd[c].push(i);
+ }
+ if (this.test_src.charCodeAt(i) < c)
+ {
+ this.td[c][i + 1]++;
+ }
+ }
+ }
+ }
+
+ function test_size () : void
+ {
+ this.expect(this.wm.size()).toBe(this.test_src.length);
+ for (var c = 0; c < 256; c++)
+ {
+ this.expect(this.wm.size(c)).toBe(this.rd[c][this.wm.size()]);
+ }
+ }
+
+ function test_get() : void
+ {
+ for (var i = 0; i < this.wm.size(); i++)
+ {
+ this.expect(this.wm.get(i)).toBe(this.test_src.charCodeAt((i)));
+ }
+ }
+
+ function test_rank() : void
+ {
+ for (var c = 0; c < 256; c++)
+ {
+ for (var i = 0; i <= this.wm.size(); i++)
+ {
+ this.expect(this.wm.rank(i, c)).toBe(this.rd[c][i]);
+ }
+ }
+ }
+
+ function test_rank_less_than() : void
+ {
+ for (var c = 0; c < 256; c++)
+ {
+ for (var i = 0; i <= this.wm.size(); i++)
+ {
+ this.expect(this.wm.rank_less_than(i, c)).toBe(this.td[c][i]);
+ }
+ }
+ }
+
+ function test_load_dump_and_size () : void
+ {
+ var dump = this.wm.dump();
+ this.wm.load(dump);
+
+ this.expect(this.wm.size()).toBe(this.test_src.length);
+ for (var c = 0; c < 256; c++)
+ {
+ this.expect(this.wm.size(c)).toBe(this.rd[c][this.wm.size()]);
+ }
+ }
+
+ function test_load_dump_and_get() : void
+ {
+ var dump = this.wm.dump();
+ this.wm.load(dump);
+
+ for (var i = 0; i < this.wm.size(); i++)
+ {
+ this.expect(this.wm.get(i)).toBe(this.test_src.charCodeAt((i)));
+ }
+ }
+
+ function test_load_dump_and_rank() : void
+ {
+ var dump = this.wm.dump();
+ this.wm.load(dump);
+
+ for (var c = 0; c < 256; c++)
+ {
+ for (var i = 0; i <= this.wm.size(); i++)
+ {
+ this.expect(this.wm.rank(i, c)).toBe(this.rd[c][i]);
+ }
+ }
+ }
+
+ function test_load_dump_and_rank_less_than() : void
+ {
+ var dump = this.wm.dump();
+ this.wm.load(dump);
+
+ for (var c = 0; c < 256; c++)
+ {
+ for (var i = 0; i <= this.wm.size(); i++)
+ {
+ this.expect(this.wm.rank_less_than(i, c)).toBe(this.td[c][i]);
+ }
+ }
+ }
+}