sunspider-access-binary-trees.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /* The Great Computer Language Shootout
  2. http://shootout.alioth.debian.org/
  3. contributed by Isaac Gouy */
  4. function TreeNode(left,right,item){
  5. this.left = left;
  6. this.right = right;
  7. this.item = item;
  8. }
  9. TreeNode.prototype.itemCheck = function(){
  10. if (this.left==null) return this.item;
  11. else return this.item + this.left.itemCheck() - this.right.itemCheck();
  12. }
  13. function bottomUpTree(item,depth){
  14. if (depth>0){
  15. return new TreeNode(
  16. bottomUpTree(2*item-1, depth-1)
  17. ,bottomUpTree(2*item, depth-1)
  18. ,item
  19. );
  20. }
  21. else {
  22. return new TreeNode(null,null,item);
  23. }
  24. }
  25. startTest("sunspider-access-binary-trees");
  26. var ret;
  27. test( "Binary Trees", function(){
  28. for ( var n = 4; n <= 5; n += 1 ) {
  29. var minDepth = 4;
  30. var maxDepth = Math.max(minDepth + 2, n);
  31. var stretchDepth = maxDepth + 1;
  32. var check = bottomUpTree(0,stretchDepth).itemCheck();
  33. var longLivedTree = bottomUpTree(0,maxDepth);
  34. for (var depth=minDepth; depth<=maxDepth; depth+=2){
  35. var iterations = 1 << (maxDepth - depth + minDepth);
  36. check = 0;
  37. for (var i=1; i<=iterations; i++){
  38. check += bottomUpTree(i,depth).itemCheck();
  39. check += bottomUpTree(-i,depth).itemCheck();
  40. }
  41. }
  42. ret = longLivedTree.itemCheck();
  43. }
  44. });
  45. endTest();