/trunk/api/js/dojo1.0/dojox/encoding/tests/ascii85.js |
---|
New file |
0,0 → 1,35 |
if(!dojo._hasResource["dojox.encoding.tests.ascii85"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.ascii85"] = true; |
dojo.provide("dojox.encoding.tests.ascii85"); |
dojo.require("dojox.encoding.ascii85"); |
(function(){ |
var msg1 = "The rain in Spain falls mainly on the plain."; |
var msg2 = "The rain in Spain falls mainly on the plain.1"; |
var msg3 = "The rain in Spain falls mainly on the plain.ab"; |
var msg4 = "The rain in Spain falls mainly on the plain.!@#"; |
var dca = dojox.encoding.ascii85; |
var s2b = function(s){ |
var b = []; |
for(var i = 0; i < s.length; ++i){ |
b.push(s.charCodeAt(i)); |
} |
return b; |
}; |
var b2s = function(b){ |
var s = []; |
dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); }); |
return s.join(""); |
}; |
tests.register("dojox.encoding.tests.ascii85", [ |
function testMsg1(t){ t.assertEqual(msg1, b2s(dca.decode(dca.encode(s2b(msg1))))); }, |
function testMsg2(t){ t.assertEqual(msg2, b2s(dca.decode(dca.encode(s2b(msg2))))); }, |
function testMsg3(t){ t.assertEqual(msg3, b2s(dca.decode(dca.encode(s2b(msg3))))); }, |
function testMsg4(t){ t.assertEqual(msg4, b2s(dca.decode(dca.encode(s2b(msg4))))); } |
]); |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/encoding.js |
---|
New file |
0,0 → 1,15 |
if(!dojo._hasResource["dojox.encoding.tests.encoding"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.encoding"] = true; |
dojo.provide("dojox.encoding.tests.encoding"); |
try{ |
dojo.require("dojox.encoding.tests.ascii85"); |
dojo.require("dojox.encoding.tests.easy64"); |
dojo.require("dojox.encoding.tests.bits"); |
dojo.require("dojox.encoding.tests.splay"); |
dojo.require("dojox.encoding.tests.lzw"); |
}catch(e){ |
doh.debug(e); |
} |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/test.html |
---|
New file |
0,0 → 1,61 |
<html> |
<head> |
<title>Test colors</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<style type="text/css"> |
@import "../../../dojo/resources/dojo.css"; |
@import "../../../dijit/tests/css/dijitTests.css"; |
.pane { margin-top: 2em; } |
</style> |
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script> |
<script type="text/javascript" src="colors2.js"></script> |
<script type="text/javascript"> |
dojo.require("dojox.encoding.tests.colors"); |
//dojo.require("dojox.encoding.tests.colors2"); |
dojo.require("dojox.encoding.tests.colors3"); |
var dct = dojox.encoding.tests; |
var test = function(c1, c2, result){ |
var empty = {}; |
for(var i in c1){ |
if(i in empty){ continue; } |
if(!(i in c2)){ |
result.push("<div>" + i + " is missing.</div>"); |
continue; |
} |
var v1 = c1[i], v2 = c2[i]; |
if(v1[0] != v2[0] || v1[1] != v2[1] || v1[2] != v2[2]){ |
result.push("<div>" + i + " doesn't match.</div>"); |
continue; |
} |
result.push("<div style='color: green'>" + i + " is ok.</div>"); |
} |
}; |
var run = function(){ |
var result = []; |
result.push("<p><strong>Comparing colors to colors3.</strong></p>"); |
test(dct.colors, dct.colors3, result); |
result.push("<p><strong>Comparing colors3 to colors.</strong></p>"); |
test(dct.colors3, dct.colors, result); |
/* |
result.push("<p><strong>Comparing colors to colors2.</strong></p>"); |
test(dct.colors, dct.colors2, result); |
result.push("<p><strong>Comparing colors2 to colors.</strong></p>"); |
test(dct.colors2, dct.colors, result); |
*/ |
dojo.byId("status").innerHTML = result.join("\n"); |
}; |
dojo.addOnLoad(function(){ |
dojo.connect(dojo.byId("run"), "onclick", run); |
}); |
</script> |
</head> |
<body> |
<h1>Test colors</h1> |
<p><button id="run">Run</button></p> |
<div id="status" class="pane"><em>No status yet.</em></div> |
</body> |
</html> |
/trunk/api/js/dojo1.0/dojox/encoding/tests/splay.js |
---|
New file |
0,0 → 1,49 |
if(!dojo._hasResource["dojox.encoding.tests.splay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.splay"] = true; |
dojo.provide("dojox.encoding.tests.splay"); |
dojo.require("dojox.encoding.splay"); |
dojo.require("dojox.encoding.bits"); |
(function(){ |
var msg1 = "The rain in Spain falls mainly on the plain."; |
var msg2 = "The rain in Spain falls mainly on the plain.1"; |
var msg3 = "The rain in Spain falls mainly on the plain.ab"; |
var msg4 = "The rain in Spain falls mainly on the plain.!@#"; |
var dc = dojox.encoding, dcb = dc.bits; |
var s2b = function(s){ |
var b = []; |
for(var i = 0; i < s.length; ++i){ |
b.push(s.charCodeAt(i)); |
} |
return b; |
}; |
var b2s = function(b){ |
var s = []; |
dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); }); |
return s.join(""); |
}; |
var encode = function(msg){ |
var x = new dcb.OutputStream(), encoder = new dc.Splay(256); |
dojo.forEach(s2b(msg), function(v){ encoder.encode(v, x); }); |
console.debug("bits =", x.getWidth()); |
return x.getBuffer(); |
}; |
var decode = function(n, buf){ |
var x = new dcb.InputStream(buf, buf.length * 8), decoder = new dc.Splay(256), t = []; |
for(var i = 0; i < n; ++i){ t.push(decoder.decode(x)); } |
return b2s(t); |
}; |
tests.register("dojox.encoding.tests.splay", [ |
function testSplayMsg1(t){ t.assertEqual(msg1, decode(msg1.length, encode(msg1))); }, |
function testSplayMsg2(t){ t.assertEqual(msg2, decode(msg2.length, encode(msg2))); }, |
function testSplayMsg3(t){ t.assertEqual(msg3, decode(msg3.length, encode(msg3))); }, |
function testSplayMsg4(t){ t.assertEqual(msg4, decode(msg4.length, encode(msg4))); } |
]); |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/colors2.html |
---|
New file |
0,0 → 1,104 |
<html> |
<head> |
<title>Compress colors</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<style type="text/css"> |
@import "../../../dojo/resources/dojo.css"; |
@import "../../../dijit/tests/css/dijitTests.css"; |
.pane { margin-top: 2em; } |
</style> |
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script> |
<script type="text/javascript"> |
dojo.require("dojox.encoding.tests.colors"); |
dojo.require("dojox.encoding.ascii85"); |
dojo.require("dojox.encoding.bits"); |
dojo.require("dojox.encoding.splay"); |
dojo.require("dojox.encoding.lzw"); |
var dc = dojox.encoding, colors = dc.tests.colors; |
var run = function(){ |
var empty = {}, names = []; |
for(var i in colors){ |
if(i in empty){ continue; } |
names.push(i); |
} |
names.sort(); |
var output = new dc.bits.OutputStream(), result = []; |
// encode names |
var s = names.join("{"), encoder = new dc.lzw.Encoder(27); |
result.push("<div>Input is " + s.length + " bytes long.</div>"); |
result.push("<div>Input: " + s + ".</div>"); |
for(var i = 0; i < s.length; ++i){ |
var v = s.charCodeAt(i) - 97; |
if(v < 0 || v > 26) console.debug("error!", v); |
encoder.encode(v, output); |
} |
encoder.flush(output); |
var w = output.getWidth(); |
result.push("<div>Output is " + Math.ceil(w / 8) + " bytes (" + w + " bits) long.</div>"); |
var buf = output.getBuffer(); |
{ |
var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27); |
var t = []; |
for(var w = 0; w < s.length;){ |
var v = decoder.decode(input); |
t.push(v); |
w += v.length; |
} |
t = t.join(""); |
var p = []; |
for(var i = 0; i < t.length; ++i){ |
p.push(String.fromCharCode(t.charCodeAt(i) + 97)); |
} |
p = p.join(""); |
result.push("<div>Control: " + p + ".</div>"); |
} |
while(buf.length % 4){ buf.push(0); } |
var a85 = dc.ascii85.encode(buf); |
result.push("<div>Encoded output is " + a85.length + " bytes.</div>"); |
result.push("<div><textarea>" + a85 + "</textarea></div>"); |
// test |
{ |
var buf = dc.ascii85.decode(a85); |
var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27); |
var t = []; |
for(var w = 0; w < s.length;){ |
var v = decoder.decode(input); |
t.push(v); |
w += v.length; |
} |
t = t.join(""); |
var p = []; |
for(var i = 0; i < t.length; ++i){ |
p.push(String.fromCharCode(t.charCodeAt(i) + 97)); |
} |
p = p.join(""); |
result.push("<div>Control: " + p + ".</div>"); |
} |
// encode values |
buf = []; |
for(var i = 0; i < names.length; ++i){ |
var c = colors[names[i]]; |
buf.push(c[0], c[1], c[2]); |
} |
result.push("<div>Output is " + buf.length + " bytes long.</div>"); |
while(buf.length % 4){ buf.push(0); } |
a85 = dc.ascii85.encode(buf); |
result.push("<div>Encoded output is " + a85.length + " bytes.</div>"); |
result.push("<div><textarea>" + a85 + "</textarea></div>"); |
dojo.byId("status").innerHTML = result.join("\n"); |
}; |
dojo.addOnLoad(function(){ |
dojo.connect(dojo.byId("run"), "onclick", run); |
}); |
</script> |
</head> |
<body> |
<h1>Compress colors</h1> |
<p><button id="run">Run</button></p> |
<div id="status" class="pane"><em>No status yet.</em></div> |
</body> |
</html> |
/trunk/api/js/dojo1.0/dojox/encoding/tests/easy64.js |
---|
New file |
0,0 → 1,35 |
if(!dojo._hasResource["dojox.encoding.tests.easy64"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.easy64"] = true; |
dojo.provide("dojox.encoding.tests.easy64"); |
dojo.require("dojox.encoding.easy64"); |
(function(){ |
var msg1 = "The rain in Spain falls mainly on the plain."; |
var msg2 = "The rain in Spain falls mainly on the plain.1"; |
var msg3 = "The rain in Spain falls mainly on the plain.ab"; |
var msg4 = "The rain in Spain falls mainly on the plain.!@#"; |
var dce = dojox.encoding.easy64; |
var s2b = function(s){ |
var b = []; |
for(var i = 0; i < s.length; ++i){ |
b.push(s.charCodeAt(i)); |
} |
return b; |
}; |
var b2s = function(b){ |
var s = []; |
dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); }); |
return s.join(""); |
}; |
tests.register("dojox.encoding.tests.easy64", [ |
function testEasyMsg1(t){ t.assertEqual(msg1, b2s(dce.decode(dce.encode(s2b(msg1))))); }, |
function testEasyMsg2(t){ t.assertEqual(msg2, b2s(dce.decode(dce.encode(s2b(msg2))))); }, |
function testEasyMsg3(t){ t.assertEqual(msg3, b2s(dce.decode(dce.encode(s2b(msg3))))); }, |
function testEasyMsg4(t){ t.assertEqual(msg4, b2s(dce.decode(dce.encode(s2b(msg4))))); } |
]); |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/colors3.html |
---|
New file |
0,0 → 1,104 |
<html> |
<head> |
<title>Compress colors</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<style type="text/css"> |
@import "../../../dojo/resources/dojo.css"; |
@import "../../../dijit/tests/css/dijitTests.css"; |
.pane { margin-top: 2em; } |
</style> |
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script> |
<script type="text/javascript"> |
dojo.require("dojox.encoding.tests.colors"); |
dojo.require("dojox.encoding.easy64"); |
dojo.require("dojox.encoding.bits"); |
dojo.require("dojox.encoding.splay"); |
dojo.require("dojox.encoding.lzw"); |
var dc = dojox.encoding, colors = dc.tests.colors; |
var run = function(){ |
var empty = {}, names = []; |
for(var i in colors){ |
if(i in empty){ continue; } |
names.push(i); |
} |
names.sort(); |
var output = new dc.bits.OutputStream(), result = []; |
// encode names |
var s = names.join("{"), encoder = new dc.lzw.Encoder(27); |
result.push("<div>Input is " + s.length + " bytes long.</div>"); |
result.push("<div>Input: " + s + ".</div>"); |
for(var i = 0; i < s.length; ++i){ |
var v = s.charCodeAt(i) - 97; |
if(v < 0 || v > 26) console.debug("error!", v); |
encoder.encode(v, output); |
} |
encoder.flush(output); |
var w = output.getWidth(); |
result.push("<div>Output is " + Math.ceil(w / 8) + " bytes (" + w + " bits) long.</div>"); |
var buf = output.getBuffer(); |
{ |
var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27); |
var t = []; |
for(var w = 0; w < s.length;){ |
var v = decoder.decode(input); |
t.push(v); |
w += v.length; |
} |
t = t.join(""); |
var p = []; |
for(var i = 0; i < t.length; ++i){ |
p.push(String.fromCharCode(t.charCodeAt(i) + 97)); |
} |
p = p.join(""); |
result.push("<div>Control: " + p + ".</div>"); |
} |
while(buf.length % 3){ buf.push(0); } |
var e64 = dc.easy64.encode(buf); |
result.push("<div>Encoded output is " + e64.length + " bytes.</div>"); |
result.push("<div><textarea>" + e64 + "</textarea></div>"); |
// test |
{ |
var buf = dc.easy64.decode(e64); |
var input = new dc.bits.InputStream(buf, buf.length * 8), decoder = new dc.lzw.Decoder(27); |
var t = []; |
for(var w = 0; w < s.length;){ |
var v = decoder.decode(input); |
t.push(v); |
w += v.length; |
} |
t = t.join(""); |
var p = []; |
for(var i = 0; i < t.length; ++i){ |
p.push(String.fromCharCode(t.charCodeAt(i) + 97)); |
} |
p = p.join(""); |
result.push("<div>Control: " + p + ".</div>"); |
} |
// encode values |
buf = []; |
for(var i = 0; i < names.length; ++i){ |
var c = colors[names[i]]; |
buf.push(c[0], c[1], c[2]); |
} |
result.push("<div>Output is " + buf.length + " bytes long.</div>"); |
while(buf.length % 4){ buf.push(0); } |
e64 = dc.easy64.encode(buf); |
result.push("<div>Encoded output is " + e64.length + " bytes.</div>"); |
result.push("<div><textarea>" + e64 + "</textarea></div>"); |
dojo.byId("status").innerHTML = result.join("\n"); |
}; |
dojo.addOnLoad(function(){ |
dojo.connect(dojo.byId("run"), "onclick", run); |
}); |
</script> |
</head> |
<body> |
<h1>Compress colors</h1> |
<p><button id="run">Run</button></p> |
<div id="status" class="pane"><em>No status yet.</em></div> |
</body> |
</html> |
/trunk/api/js/dojo1.0/dojox/encoding/tests/lzw.js |
---|
New file |
0,0 → 1,54 |
if(!dojo._hasResource["dojox.encoding.tests.lzw"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.lzw"] = true; |
dojo.provide("dojox.encoding.tests.lzw"); |
dojo.require("dojox.encoding.lzw"); |
dojo.require("dojox.encoding.bits"); |
(function(){ |
var msg1 = "The rain in Spain falls mainly on the plain."; |
var msg2 = "The rain in Spain falls mainly on the plain.1"; |
var msg3 = "The rain in Spain falls mainly on the plain.ab"; |
var msg4 = "The rain in Spain falls mainly on the plain.!@#"; |
var dc = dojox.encoding, dcb = dc.bits, dcl = dc.lzw; |
var s2b = function(s){ |
var b = []; |
for(var i = 0; i < s.length; ++i){ |
b.push(s.charCodeAt(i)); |
} |
return b; |
}; |
var b2s = function(b){ |
var s = []; |
dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); }); |
return s.join(""); |
}; |
var encode = function(msg){ |
var x = new dcb.OutputStream(), encoder = new dcl.Encoder(128); |
dojo.forEach(s2b(msg), function(v){ encoder.encode(v, x); }); |
encoder.flush(x); |
console.debug("bits =", x.getWidth()); |
return x.getBuffer(); |
}; |
var decode = function(n, buf){ |
var x = new dcb.InputStream(buf, buf.length * 8), decoder = new dcl.Decoder(128), t = [], w = 0; |
while(w < n){ |
var v = decoder.decode(x); |
t.push(v); |
w += v.length; |
} |
return t.join(""); |
}; |
tests.register("dojox.encoding.tests.lzw", [ |
function testLzwMsg1(t){ t.assertEqual(msg1, decode(msg1.length, encode(msg1))); }, |
function testLzwMsg2(t){ t.assertEqual(msg2, decode(msg2.length, encode(msg2))); }, |
function testLzwMsg3(t){ t.assertEqual(msg3, decode(msg3.length, encode(msg3))); }, |
function testLzwMsg4(t){ t.assertEqual(msg4, decode(msg4.length, encode(msg4))); } |
]); |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/vq.html |
---|
New file |
0,0 → 1,185 |
<html> |
<head> |
<title>Compress colors using VQ</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<style type="text/css"> |
@import "../../../dojo/resources/dojo.css"; |
@import "../../../dijit/tests/css/dijitTests.css"; |
.pane { margin-top: 2em; } |
</style> |
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug: true"></script> |
<script type="text/javascript"> |
dojo.require("dojox.encoding.tests.colors"); |
dojo.require("dojox.encoding.splay"); |
dojo.require("dojox.encoding.bits"); |
var colors = dojox.encoding.tests.colors; |
var dist = function(a, b){ |
var r = a[0] - b[0], g = a[1] - b[1], b = a[2] - b[2]; |
return r * r + g * g + b * b; |
}; |
var hexcolor = function(c){ |
return "#" + (c[0] < 16 ? "0" : "") + c[0].toString(16) + |
(c[1] < 16 ? "0" : "") + c[1].toString(16) + |
(c[2] < 16 ? "0" : "") + c[2].toString(16); |
}; |
var maxdist = function(a, b, maxdist){ |
var r = Math.abs(a[0] - b[0]), g = Math.abs(a[1] - b[1]), b = Math.abs(a[2] - b[2]); |
++maxdist[bits(r)]; |
++maxdist[bits(g)]; |
++maxdist[bits(b)]; |
}; |
var encodeColor = function(a, b, splay, stream){ |
var r = a[0] - b[0], g = a[1] - b[1], b = a[2] - b[2]; |
stream.putBits(r < 0 ? 1 : 0, 1); |
splay.encode(Math.abs(r), stream); |
stream.putBits(g < 0 ? 1 : 0, 1); |
splay.encode(Math.abs(g), stream); |
stream.putBits(b < 0 ? 1 : 0, 1); |
splay.encode(Math.abs(b), stream); |
}; |
var bits = function(x){ |
var w = 1; |
for(var v = 2; x >= v; v <<= 1, ++w); |
return w; |
}; |
var runVQ = function(n){ |
dojo.byId("status").innerHTML = "<em>Initializing...</em>"; |
dojo.byId("report").innerHTML = "<em>Running VQ...</em>"; |
var clusters = []; |
// select initial cluster centers |
var empty = {}; |
for(var i in colors){ |
if(i in empty){ continue; } |
clusters.push({center: colors[i]}); |
if(clusters.length == n){ break; } |
} |
/* |
for(var i = 0; i < n; ++i){ |
var r = Math.floor(Math.random() * 256), g = Math.floor(Math.random() * 256), b = Math.floor(Math.random() * 256); |
clusters.push({center: [r, g, b]}); |
} |
*/ |
// do runs |
dojo.byId("status").innerHTML = "<div>Starting runs...</div>"; |
var jitter = 0, niter = 1; |
do { |
// save previous centers |
var old_clusters = []; |
dojo.forEach(clusters, function(c){ old_clusters.push({center: c.center}); c.members = []; }); |
// assign colors to clusters |
for(var i in colors){ |
if(i in empty){ continue; } |
var c = colors[i], k = -1, kd = Number.MAX_VALUE; |
for(var j = 0; j < clusters.length; ++j){ |
var jd = dist(clusters[j].center, c); |
if(jd < kd){ k = j, kd = jd; } |
} |
clusters[k].members.push(i); |
} |
// recalculate cluster centers |
for(var i = 0; i < clusters.length; ++i){ |
if(!clusters[i].members.length){ continue; } |
var r = 0, g = 0, b = 0; |
dojo.forEach(clusters[i].members, function(name){ |
var c = colors[name]; |
r += c[0]; |
g += c[1]; |
b += c[2]; |
}); |
r = Math.round(r / clusters[i].members.length); |
g = Math.round(g / clusters[i].members.length); |
b = Math.round(b / clusters[i].members.length); |
clusters[i].center = [r, g, b]; |
} |
// calculate the jitter |
jitter = 0; |
for(var i = 0; i < clusters.length; ++i){ |
jitter = Math.max(jitter, dist(clusters[i].center, old_clusters[i].center)); |
} |
var node = dojo.doc.createElement("div"); |
node.innerHTML = "Run #" + niter + ", jitter = " + jitter; |
dojo.byId("status").appendChild(node); |
++niter; |
}while(jitter > 1 && niter < 1000); |
// calculate the required number of bytes |
var output = new dojox.encoding.bits.OutputStream(), |
splay = new dojox.encoding.Splay(256); |
for(var i = 0; i < clusters.length; ++i){ |
var c = clusters[i], m = c.members, d = 0, ol = output.getWidth(); |
output.putBits(c.center[0], 8); |
output.putBits(c.center[1], 8); |
output.putBits(c.center[2], 8); |
splay.init(); |
c.maxdist = [0, 0, 0, 0, 0, 0, 0, 0, 0]; |
for(var j = 0; j < m.length; ++j){ |
var color = colors[m[j]]; |
maxdist(c.center, color, c.maxdist); |
encodeColor(c.center, color, splay, output); |
} |
c.bits = output.getWidth() - ol; |
} |
var node = dojo.doc.createElement("div"); |
node.innerHTML = "Required " + Math.ceil(output.getWidth() / 8) + " bytes"; |
dojo.byId("status").appendChild(node); |
// generate color tables |
var reps = []; |
for(var i = 0; i < clusters.length; ++i){ |
var c = clusters[i], m = c.members; |
reps.push("<p>Cluster #" + i + " contains " + m.length + " members. Length histogram:"); |
for(var j = 0; j < c.maxdist.length; ++j){ |
if(c.maxdist[j]){ |
reps.push(" " + j + "—" + c.maxdist[j]); |
} |
} |
reps.push(". It requires " + c.bits + " bits (" + Math.ceil(c.bits / 8) + " bytes) to be encoded.</p>"); |
reps.push("<table>"); |
var wd = dist([255,255,255], c.center), bd = dist([0,0,0], c.center); |
reps.push("<tr><td style='background: " + hexcolor(c.center) + "; color: " + |
(wd < bd ? "black" : "white") + "'><strong>CENTER</strong></td><td>" + |
c.center[0] + "</td><td>" + c.center[1] + "</td><td>" + c.center[2] + "</td></tr>"); |
for(var j = 0; j < m.length; ++j){ |
var color = colors[m[j]]; |
wd = dist([255,255,255], color); |
bd = dist([0,0,0], color); |
reps.push("<tr><td style='background: " + m[j] + "; color: " + |
(wd < bd ? "black" : "white") + "'><strong>" + m[j] + "</strong></td><td>" + |
color[0] + "</td><td>" + color[1] + "</td><td>" + color[2] + "</td></tr>"); |
} |
reps.push("</table>"); |
} |
dojo.byId("report").innerHTML = reps.join("\n"); |
}; |
run = function(){ |
var n = parseInt(dojo.byId("ncluster").value); |
runVQ(n); |
}; |
dojo.addOnLoad(function(){ |
dojo.connect(dojo.byId("run"), "onclick", run); |
}); |
</script> |
</head> |
<body> |
<h1>Compress colors using VQ</h1> |
<p>Select desirable number of clusters: <select id="ncluster"> |
<option value="1">1</option> |
<option value="2">2</option> |
<option value="4">4</option> |
<option value="8">8</option> |
<option value="16">16</option> |
<option value="32">32</option> |
<option value="64">64</option> |
</select> <button id="run">Run</button></p> |
<div id="status" class="pane"><em>No status yet.</em></div> |
<div id="report" class="pane"><em>No results yet.</em></div> |
</body> |
</html> |
/trunk/api/js/dojo1.0/dojox/encoding/tests/runTests.html |
---|
New file |
0,0 → 1,9 |
<html> |
<head> |
<title>DojoX Compression Unit Test Runner</title> |
<meta http-equiv="REFRESH" content="0;url=../../../util/doh/runner.html?testModule=dojox.encoding.tests.encoding" /> |
</head> |
<body> |
<p>Redirecting to D.O.H runner.</p> |
</body> |
</html> |
/trunk/api/js/dojo1.0/dojox/encoding/tests/bits.js |
---|
New file |
0,0 → 1,74 |
if(!dojo._hasResource["dojox.encoding.tests.bits"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.bits"] = true; |
dojo.provide("dojox.encoding.tests.bits"); |
dojo.require("dojox.encoding.bits"); |
(function(){ |
var msg1 = "The rain in Spain falls mainly on the plain."; |
var msg2 = "The rain in Spain falls mainly on the plain.1"; |
var msg3 = "The rain in Spain falls mainly on the plain.ab"; |
var msg4 = "The rain in Spain falls mainly on the plain.!@#"; |
var dcb = dojox.encoding.bits; |
var s2b = function(s){ |
var b = []; |
for(var i = 0; i < s.length; ++i){ |
b.push(s.charCodeAt(i)); |
} |
return b; |
}; |
var b2s = function(b){ |
var s = []; |
dojo.forEach(b, function(c){ s.push(String.fromCharCode(c)); }); |
return s.join(""); |
}; |
var testOut = function(msg){ |
var a = new dojox.encoding.bits.OutputStream(); |
for(var i = 0; i < msg.length; ++i){ |
var v = msg.charCodeAt(i); |
var j = Math.floor(Math.random() * 7) + 1; |
a.putBits(v >>> (8 - j), j); |
a.putBits(v, 8 - j); |
} |
return b2s(a.getBuffer()); |
}; |
var testIn = function(msg){ |
var a = new dojox.encoding.bits.InputStream(s2b(msg), msg.length * 8); |
var r = []; |
for(var i = 0; i < msg.length; ++i){ |
var j = Math.floor(Math.random() * 7) + 1; |
r.push((a.getBits(j) << (8 - j)) | a.getBits(8 - j)); |
} |
return b2s(r); |
}; |
var test = function(msg){ |
var a = new dojox.encoding.bits.InputStream(s2b(msg), msg.length * 8); |
var o = new dojox.encoding.bits.OutputStream(); |
while(a.getWidth() > 0){ |
var w = Math.min(a.getWidth(), 3); |
o.putBits(a.getBits(w), w); |
} |
return b2s(o.getBuffer()); |
}; |
tests.register("dojox.encoding.tests.bits", [ |
function testBitsOut1(t){ t.assertEqual(msg1, testOut(msg1)); }, |
function testBitsOut2(t){ t.assertEqual(msg2, testOut(msg2)); }, |
function testBitsOut3(t){ t.assertEqual(msg3, testOut(msg3)); }, |
function testBitsOut4(t){ t.assertEqual(msg4, testOut(msg4)); }, |
function testBitsIn1(t){ t.assertEqual(msg1, testIn(msg1)); }, |
function testBitsIn2(t){ t.assertEqual(msg2, testIn(msg2)); }, |
function testBitsIn3(t){ t.assertEqual(msg3, testIn(msg3)); }, |
function testBitsIn4(t){ t.assertEqual(msg4, testIn(msg4)); }, |
function testBits1(t){ t.assertEqual(msg1, test(msg1)); }, |
function testBits2(t){ t.assertEqual(msg2, test(msg2)); }, |
function testBits3(t){ t.assertEqual(msg3, test(msg3)); }, |
function testBits4(t){ t.assertEqual(msg4, test(msg4)); } |
]); |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/colors.js |
---|
New file |
0,0 → 1,156 |
if(!dojo._hasResource["dojox.encoding.tests.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.colors"] = true; |
dojo.provide("dojox.encoding.tests.colors"); |
// all CSS3 colors |
dojox.encoding.tests.colors = { |
aliceblue: [240,248,255], |
antiquewhite: [250,235,215], |
aqua: [0,255,255], |
aquamarine: [127,255,212], |
azure: [240,255,255], |
beige: [245,245,220], |
bisque: [255,228,196], |
black: [0,0,0], |
blanchedalmond: [255,235,205], |
blue: [0,0,255], |
blueviolet: [138,43,226], |
brown: [165,42,42], |
burlywood: [222,184,135], |
cadetblue: [95,158,160], |
chartreuse: [127,255,0], |
chocolate: [210,105,30], |
coral: [255,127,80], |
cornflowerblue: [100,149,237], |
cornsilk: [255,248,220], |
crimson: [220,20,60], |
cyan: [0,255,255], |
darkblue: [0,0,139], |
darkcyan: [0,139,139], |
darkgoldenrod: [184,134,11], |
darkgray: [169,169,169], |
darkgreen: [0,100,0], |
darkgrey: [169,169,169], |
darkkhaki: [189,183,107], |
darkmagenta: [139,0,139], |
darkolivegreen: [85,107,47], |
darkorange: [255,140,0], |
darkorchid: [153,50,204], |
darkred: [139,0,0], |
darksalmon: [233,150,122], |
darkseagreen: [143,188,143], |
darkslateblue: [72,61,139], |
darkslategray: [47,79,79], |
darkslategrey: [47,79,79], |
darkturquoise: [0,206,209], |
darkviolet: [148,0,211], |
deeppink: [255,20,147], |
deepskyblue: [0,191,255], |
dimgray: [105,105,105], |
dimgrey: [105,105,105], |
dodgerblue: [30,144,255], |
firebrick: [178,34,34], |
floralwhite: [255,250,240], |
forestgreen: [34,139,34], |
fuchsia: [255,0,255], |
gainsboro: [220,220,220], |
ghostwhite: [248,248,255], |
gold: [255,215,0], |
goldenrod: [218,165,32], |
gray: [128,128,128], |
green: [0,128,0], |
greenyellow: [173,255,47], |
grey: [128,128,128], |
honeydew: [240,255,240], |
hotpink: [255,105,180], |
indianred: [205,92,92], |
indigo: [75,0,130], |
ivory: [255,255,240], |
khaki: [240,230,140], |
lavender: [230,230,250], |
lavenderblush: [255,240,245], |
lawngreen: [124,252,0], |
lemonchiffon: [255,250,205], |
lightblue: [173,216,230], |
lightcoral: [240,128,128], |
lightcyan: [224,255,255], |
lightgoldenrodyellow: [250,250,210], |
lightgray: [211,211,211], |
lightgreen: [144,238,144], |
lightgrey: [211,211,211], |
lightpink: [255,182,193], |
lightsalmon: [255,160,122], |
lightseagreen: [32,178,170], |
lightskyblue: [135,206,250], |
lightslategray: [119,136,153], |
lightslategrey: [119,136,153], |
lightsteelblue: [176,196,222], |
lightyellow: [255,255,224], |
lime: [0,255,0], |
limegreen: [50,205,50], |
linen: [250,240,230], |
magenta: [255,0,255], |
maroon: [128,0,0], |
mediumaquamarine: [102,205,170], |
mediumblue: [0,0,205], |
mediumorchid: [186,85,211], |
mediumpurple: [147,112,219], |
mediumseagreen: [60,179,113], |
mediumslateblue: [123,104,238], |
mediumspringgreen: [0,250,154], |
mediumturquoise: [72,209,204], |
mediumvioletred: [199,21,133], |
midnightblue: [25,25,112], |
mintcream: [245,255,250], |
mistyrose: [255,228,225], |
moccasin: [255,228,181], |
navajowhite: [255,222,173], |
navy: [0,0,128], |
oldlace: [253,245,230], |
olive: [128,128,0], |
olivedrab: [107,142,35], |
orange: [255,165,0], |
orangered: [255,69,0], |
orchid: [218,112,214], |
palegoldenrod: [238,232,170], |
palegreen: [152,251,152], |
paleturquoise: [175,238,238], |
palevioletred: [219,112,147], |
papayawhip: [255,239,213], |
peachpuff: [255,218,185], |
peru: [205,133,63], |
pink: [255,192,203], |
plum: [221,160,221], |
powderblue: [176,224,230], |
purple: [128,0,128], |
red: [255,0,0], |
rosybrown: [188,143,143], |
royalblue: [65,105,225], |
saddlebrown: [139,69,19], |
salmon: [250,128,114], |
sandybrown: [244,164,96], |
seagreen: [46,139,87], |
seashell: [255,245,238], |
sienna: [160,82,45], |
silver: [192,192,192], |
skyblue: [135,206,235], |
slateblue: [106,90,205], |
slategray: [112,128,144], |
slategrey: [112,128,144], |
snow: [255,250,250], |
springgreen: [0,255,127], |
steelblue: [70,130,180], |
tan: [210,180,140], |
teal: [0,128,128], |
thistle: [216,191,216], |
tomato: [255,99,71], |
turquoise: [64,224,208], |
violet: [238,130,238], |
wheat: [245,222,179], |
white: [255,255,255], |
whitesmoke: [245,245,245], |
yellow: [255,255,0], |
yellowgreen: [154,205,50] |
}; |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/colors2.js |
---|
New file |
0,0 → 1,64 |
if(!dojo._hasResource["dojox.encoding.tests.colors2"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.colors2"] = true; |
dojo.provide("dojox.encoding.tests.colors2"); |
// all CSS3 colors |
dojox.encoding.tests.colors2 = {}; |
(function(){ |
var n = "!mi-='%@Md%8;F\"=E5(:$@nHf!(;HYAOL),#XJKa#UHDMYQ0@q6C8='JBa#m1`YRS;3_\\P=@.(bN\\!)0d:Nar*Fo]]G`\\[X7Cb@r#pc;D3!k*8^\"bS8DAYbu'J5[`7Fh5S1e8`@1^N\"n8R:+ZQt]Ab.S>NP-jkO\"N$oQpbVbYtZl1&rSs%_;'!e8\"ij:*R!%9&P.+o0%cF&0F<\"eWn+rm!a<(02!d\\-J\\O@`K![IaPrqh6H4S!U<Nh]PS,\"!C;0W&Y]X[<[E&`1gQ?_;g\\mbQn^c!eV!05V['T@)Lio1O0QV>7CU!\"5jICR2\\X?!FilaO:$aE\"G1NIfMJ<.)1d;?OH9VU%LiGhi9=d?$EjW!BM0)1mGfg@\"os1\\E*A>+>YdjUK:P>T'7tj.UQ?<89]$:\\Li]GF*H8o*Z,o]Q_E]tq?C^%'^cfU9B9sH-^t.-R;J6P9!buNg*%$9#>Y'*n;MPc7=>*]sb&NmgKSZcd2nWt6I@SX7agi3!0)M'T3O@@/>W+I:H9?@A7tjT8':(9PG\\m@_T8Ws\\\".VLCkg7IYKZ7M3.XQqX$4V`bEQF?<#jJ>#4Z#6:ZeYffa.W#0CW3@s2*ESkiD6hN#EAhXBm5F%&U_=k*tFq@rYS/!:$=M9epZ<`=HN:X\"!CRI(`>iqTRe(S@A\"&0!Dib&)1p9P)$NZb^e+i_UHHq\\_8AYC+oiIMLj_TW=u'3Nn?c=#_6Z^s/;EY/3Z(cZ\"CaOq6g>>I+;'H>Nh`>\"-3N</&5*&\\7KQKk5tM(]O9-gi%iL^#RH+KW@$+oOOO9;*#)6$,]ge#)$j.>DnX+!(g67=pRcf38l7XNQ:_FJ,l2V)C@@A;H1dN#\\$n75qg6-:\".KQkn!?a7e\"J7C0p3Pn`]hKrG_4WG*5qo\\tH,20o2QOZljnj_lZ&C6!.u8Qu:_L$8$4.[V@`&A0J,fQL"; |
var c = "nG*%[ldl.:s*t'unGiO]p\"]T._uKc;s6Io0!<7p,ih\\+ShRJ>JStLT5!7GR&s*mjUQ0nVHgtWT+!<<'!!/gi8Mn\"KLWMuisA,rU.WP,cVMZAZ8CG5^H!1>UdMZ<bAQ?nV)O%;El02G@s:JUu9d?FX[rtLXs^]/\"^Bk_9q*g$E-+sR'`n03c7rrE)Sgt_]\"s8U[Ng8,pBJ:IWM!3Q8SJ:N1>s7$&&[*;i\\9)sSDs7#O?N99:!s7#]/quHcnc)oX\\n:6&Is8VrldaQ[oORA4Ze'n?*_>g0S+L8#&cMDa@R<OITYf,Dus53nW!&DeSqXEYI!<7QL!+sKU!!(9T<R[.NgH;f^HYDgIqO0t&bf:HP)&[Dds8)cViW%uHs5'jX!.b%@k(%s^CQ9Y>V#^Na!8;DCmc^[<qj=STmb;]Es6nM<g:>I^5QAOBh4WT.i9#OiJH#TL]T8+>C#Ot='Dd6\"oV>kIMc]rOm\\!H0^qda@cKf4Kc#A2pE.F&MqYC3lIn#$sd^4r5J:Q:ef`,GO5iC#WK'r<gZiC(*p%A\"XrrAM41&q:S"; |
var a = function(s){ |
var n = s.length, r = [], b = [0, 0, 0, 0, 0], i, j, t, x, y, d; |
for(i = 0; i < n; i += 5){ |
for(j = 0; j < 5; ++j){ b[j] = s.charCodeAt(i + j) - 33; } |
t = (((b[0] * 85 + b[1]) * 85 + b[2]) * 85 + b[3]) * 85 + b[4]; |
x = t & 255; t >>>= 8; y = t & 255; t >>>= 8; |
r.push(t >>> 8, t & 255, y, x); |
} |
return r; |
}; |
var B = function(f){ this.f = f; this.y = this.t = 0; }; |
B.prototype.g = function(b){ |
var r = 0; |
while(b){ |
var w = Math.min(b, 8 - this.t), v = this.f[this.y] >>> (8 - this.t - w); |
r <<= w; r |= v & ~(~0 << w); |
if((this.t += w) == 8){ ++this.y; this.t = 0; } |
b -= w; |
} |
return r; |
}; |
var D = function(n, w){ |
this.c = new Array(n); this.w = w; this.p = -1; |
for(var i = 0; i < n; ++i){ this.c[i] = [i + 97]; } |
}; |
D.prototype.d = function(s){ |
var c = s.g(this.w), v; |
if(c < this.c.length){ |
v = this.c[c]; |
if(this.p >= 0){ |
this.c.push(this.c[this.p].concat(v[0])); |
} |
}else{ |
this.c.push([]); |
++this.w; |
return []; |
} |
this.p = c; |
return v; |
}; |
var i = new B(a(n)), d = new D(27, 5), t = []; |
while(t.length < 1455){ |
var v = d.d(i); |
dojo.forEach(v, function(x){ t.push(x); }); |
} |
var n2 = dojo.map(t, function(x){ return String.fromCharCode(x); }).join("").split("{"); |
i = a(c); |
for(var j = 0, k = 0; j < n2.length; ++j){ |
dojox.encoding.tests.colors2[n2[j]] = [i[k++], i[k++], i[k++]]; |
} |
})(); |
} |
/trunk/api/js/dojo1.0/dojox/encoding/tests/colors3.js |
---|
New file |
0,0 → 1,53 |
if(!dojo._hasResource["dojox.encoding.tests.colors3"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. |
dojo._hasResource["dojox.encoding.tests.colors3"] = true; |
dojo.provide("dojox.encoding.tests.colors3"); |
// all CSS3 colors |
dojox.encoding.tests.colors3 = {}; |
(function(){ |
var n = "!N!C@\",5%;!.4)1D7()4E!K!FS-!2).Q:52E`!B\"!;!)*+I!M!#&'E+9%(#!T9Q=.\"TE5F'6%$B91H/)DCQW=^&G#QY>:\"!!?*#D.57Z.]5**+0]/!G!!,X=/%2O'%1U&#W9%%86_BQU3#!N.!DA-%F>X'#9;6\"%+EK)X#A+A;+-+\"G\"T$76:L1;)'+?ENA1%L+C\\O+U+\"Q!+#,E+.E1H-[VA#\"5%O\\X)BS:%V2&2#,3I0NWE%F7?L8U!U\\\\B3C_GZ?P3N]A3\\]$)%TUK$E9EL6ZA`T%IFY$Q?/3;=Q)$QE#AQ\\11$&M!'$$XK!T?2%C7QU\"110A#/#:'U=C!7,\"=*!+BQ)%AG[)W&#CFBG\"A!/1E!5/$AU\"A/$J:*E+LQ77;%M6H/XD,H1'!)#U=&K1\"&R02U'$H5*[%Y+$3;/1'#\"-XQV8C(/GABVQQW+RS5U3QE!V<6[=YS@!0=1!:Z=93M$7W\":3;!Z0!GJM'\"QGAJ*=3(C&5I=0,6AP6H4+=:M:B)CO-D?]<,2^H-`7S<E8%#\\\\G=1ZM^B)8$9VJHI]>EB(B5N5%Z9P!8BM`FK@D!9*!ZQ]]/D1SF[%RG.D+HO(8QI.BK.RS*/C#/GJOTUU/WSTX19$R[$T#'P&L\"]V03\\_Y5_UH!?/!;\"J>YHO%8S_`2]/H`T_'%?B4?AX!.:^X!Z9E0A!!S\"5M\"A:2^?AA2R*9;!.!!&1!!E:AN)7'16,AM\"+\"Y'D0.'*Q=.%!S)!'*S)@5*$7D*9H@#U710\"MUG4,)<Q;DI95OE%9DY\"1_I4E3!2C7+/I[+\"*A0E!\"\",!>Z'!F-%15E\"\"J!#+$A0':>#G?1%8G#29I31U:2H\"I:3A<V'DC!-!RB2]:BI;>K4C&C;ZY\"J[C]HG6!3&*4K!!AP9:IA#T2\"'A%-+9]WWJ*MU3I\"MWY\")$79\"*]QZ@:[ZZ#^43G=Q;!P)E%QN3RZQ4!Y.KP\"J_8\\B/3RD#S6+YB]*&!3M6A+#2Q'9M-&DI!!"; |
var c = "]0D`_OP8!0``@``5]0``^@8=`_4%!!!!`_P.!!$`CCPCJ3IKXLC(8Z[A@`]!UGE?`X^1:*8N``D=X\"1]!0``!!#,!)O,O)9,K;GJ!'1!K;GJP<>LCQ#,67MP`YQ!G4,-CQ!![::[D\\S03$W,,U^0,U^0!-\\2F!$4`R34!,``;7FJ;7FJ(J$`MC)C``LQ)IMC`Q$`X.T=_0D``^=!WK5AA)#!!)!!L@]PA)#!]0`Q`WGUT6R=3Q##```Q]/;-ZO<[``$V@0Q!``L.L>DG])#!Y0``_PL3U^04E/[1U^04`\\<\"`[\"[),+KB]\\[>YC:>YC:M-4?```A!0]!-MUS_P$G`Q$`A!!!:MWK!!$.OF84EX$<0,.R?WDO!0K;3.(-RR7&'2FQ^@`[`_4B`_3V`^[N!!#!`@8GA)!!;YYD`[5!`U5!WH$7\\OCKG0O9L_\\OWX#4`_`6`^KZT95``]$,X;$>M/$GA!#!`Q!!P)_017HBCU54_I\"S^+2A,IN8``8OI&)NQ-$!B]\\L;FL.=)#1=)#1``L[!0^`2I+UUL3-!)#!W,`9`W.(1/$1\\I,O^>[T````^@8V``]!GMUS!!!!"; |
var B = function(f){ var t = this; t.f = f; t.y = t.t = 0; t.x = f.charCodeAt(0) - 33; }; |
B.prototype.g = function(b){ |
var r = 0, t = this; |
while(b){ |
var w = Math.min(b, 6 - t.t), v = t.x >>> (6 - t.t - w); |
r <<= w; r |= v & ~(~0 << w); |
if((t.t += w) == 6){ t.x = t.f.charCodeAt(++t.y) - 33; t.t = 0; } |
b -= w; |
} |
return r; |
}; |
var D = function(n, w){ |
this.c = new Array(n); this.w = w; this.p = -1; |
for(var i = 0; i < n; ++i){ this.c[i] = [i + 97]; } |
}; |
D.prototype.d = function(s){ |
var c = s.g(this.w), t = this, v; |
if(c < t.c.length){ |
v = t.c[c]; |
if(t.p >= 0){ |
t.c.push(t.c[t.p].concat(v[0])); |
} |
}else{ |
t.c.push([]); |
++t.w; |
return []; |
} |
t.p = c; |
return v; |
}; |
var i = new B(n), d = new D(27, 5), t = []; |
while(t.length < 1455){ |
var v = d.d(i); |
dojo.forEach(v, function(x){ t.push(x); }); |
} |
var n2 = dojo.map(t, function(x){ return String.fromCharCode(x); }).join("").split("{"); |
i = new B(c); |
for(var j = 0; j < n2.length; ++j){ |
dojox.encoding.tests.colors3[n2[j]] = [i.g(8), i.g(8), i.g(8)]; |
} |
})(); |
} |