Skip to content

Instantly share code, notes, and snippets.

@jordwalke
Created April 17, 2016 09:19
Show Gist options
  • Save jordwalke/a1485d666d355eaf5dc712c176c9119e to your computer and use it in GitHub Desktop.
Save jordwalke/a1485d666d355eaf5dc712c176c9119e to your computer and use it in GitHub Desktop.
bucklescript output using conventional JS keys.
// Generated CODE, PLEASE EDIT WITH CARE
'use strict';
var invalid_argument = /* tuple */[
248,
"Invalid_argument",
-3
];
var not_found = /* tuple */[
248,
"Not_found",
-6
];
function height(param) {
if (param) {
return param.stringFour;
}
else {
return 0;
}
}
function create(l, x, d, r) {
var hl = height(l);
var hr = height(r);
return /* Node */{
"stringZero": l,
"stringOne": x,
"stringTwo": d,
"stringThree": r,
"stringFour": hl >= hr ? hl + 1 | 0 : hr + 1 | 0,
length: 5,
tag: 0
};
}
function bal(l, x, d, r) {
var hl = l ? l.stringFour : 0;
var hr = r ? r.stringFour : 0;
if (hl > (hr + 2 | 0)) {
if (l) {
var lr = l.stringThree;
var ld = l.stringTwo;
var lv = l.stringOne;
var ll = l.stringZero;
if (height(ll) >= height(lr)) {
return create(ll, lv, ld, create(lr, x, d, r));
}
else if (lr) {
return create(create(ll, lv, ld, lr.stringZero), lr.stringOne, lr.stringTwo, create(lr.stringThree, x, d, r));
}
else {
throw [
invalid_argument,
"Map.bal"
];
}
}
else {
throw [
invalid_argument,
"Map.bal"
];
}
}
else if (hr > (hl + 2 | 0)) {
if (r) {
var rr = r.stringThree;
var rd = r.stringTwo;
var rv = r.stringOne;
var rl = r.stringZero;
if (height(rr) >= height(rl)) {
return create(create(l, x, d, rl), rv, rd, rr);
}
else if (rl) {
return create(create(l, x, d, rl.stringZero), rl.stringOne, rl.stringTwo, create(rl.stringThree, rv, rd, rr));
}
else {
throw [
invalid_argument,
"Map.bal"
];
}
}
else {
throw [
invalid_argument,
"Map.bal"
];
}
}
else {
return /* Node */{
"stringZero": l,
"stringOne": x,
"stringTwo": d,
"stringThree": r,
"stringFour": hl >= hr ? hl + 1 | 0 : hr + 1 | 0,
length: 5,
tag: 0
};
}
}
function add(x, data, param) {
if (param) {
var r = param.stringThree;
var d = param.stringTwo;
var v = param.stringOne;
var l = param.stringZero;
var c = x - v | 0;
if (c) {
if (c < 0) {
return bal(add(x, data, l), v, d, r);
}
else {
return bal(l, v, d, add(x, data, r));
}
}
else {
return /* Node */{
"stringZero": l,
"stringOne": x,
"stringTwo": data,
"stringThree": r,
"stringFour": param.stringFour,
length: 5,
tag: 0
};
}
}
else {
return /* Node */{
"stringZero": /* Empty */0,
"stringOne": x,
"stringTwo": data,
"stringThree": /* Empty */0,
"stringFour": 1,
length: 5,
tag: 0
};
}
}
function find(x, _param) {
while(true) {
var param = _param;
if (param) {
var c = x - param.stringOne | 0;
if (c) {
_param = c < 0 ? param.stringZero : param.stringThree;
continue ;
}
else {
return param.stringTwo;
}
}
else {
throw not_found;
}
};
}
function test() {
var m = /* Empty */0;
for(var i = 0; i<= 1000000; ++i){
m = add(i, i, m);
}
for(var i$1 = 0; i$1<= 1000000; ++i$1){
find(i$1, m);
}
return /* () */0;
}
var start = Date.now();
test(/* () */0);
var end = Date.now();
console.log(end-start);
/* Not a pure module */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment