/js/src/metrics/jint/sunspider/string-fasta.js

http://github.com/zpao/v8monkey · JavaScript · 95 lines · 70 code · 11 blank · 14 comment · 11 complexity · f225e9eda5edea06b2e858d667f3552f MD5 · raw file

  1. // The Great Computer Language Shootout
  2. // http://shootout.alioth.debian.org
  3. //
  4. // Contributed by Ian Osgood
  5. var last = 42, A = 3877, C = 29573, M = 139968;
  6. function rand(max) {
  7. last = (last * A + C) % M;
  8. return max * last / M;
  9. }
  10. var ALU =
  11. "GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG" +
  12. "GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA" +
  13. "CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT" +
  14. "ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA" +
  15. "GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG" +
  16. "AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC" +
  17. "AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA";
  18. var IUB = {
  19. a:0.27, c:0.12, g:0.12, t:0.27,
  20. B:0.02, D:0.02, H:0.02, K:0.02,
  21. M:0.02, N:0.02, R:0.02, S:0.02,
  22. V:0.02, W:0.02, Y:0.02
  23. }
  24. var HomoSap = {
  25. a: 0.3029549426680,
  26. c: 0.1979883004921,
  27. g: 0.1975473066391,
  28. t: 0.3015094502008
  29. }
  30. function makeCumulative(table) {
  31. var last = null;
  32. /* BEGIN LOOP */
  33. for (var c in table) {
  34. if (last) table[c] += table[last];
  35. last = c;
  36. }
  37. /* END LOOP */
  38. }
  39. function fastaRepeat(n, seq) {
  40. var seqi = 0, lenOut = 60;
  41. /* BEGIN LOOP */
  42. while (n>0) {
  43. if (n<lenOut) lenOut = n;
  44. if (seqi + lenOut < seq.length) {
  45. ret = seq.substring(seqi, seqi+lenOut);
  46. seqi += lenOut;
  47. } else {
  48. var s = seq.substring(seqi);
  49. seqi = lenOut - s.length;
  50. ret = s + seq.substring(0, seqi);
  51. }
  52. n -= lenOut;
  53. }
  54. /* END LOOP */
  55. }
  56. function fastaRandom(n, table) {
  57. var line = new Array(60);
  58. makeCumulative(table);
  59. /* BEGIN LOOP */
  60. while (n>0) {
  61. if (n<line.length) line = new Array(n);
  62. /* BEGIN LOOP */
  63. for (var i=0; i<line.length; i++) {
  64. var r = rand(1);
  65. /* BEGIN LOOP */
  66. for (var c in table) {
  67. if (r < table[c]) {
  68. line[i] = c;
  69. break;
  70. }
  71. }
  72. /* END LOOP */
  73. }
  74. /* END LOOP */
  75. ret = line.join('');
  76. n -= line.length;
  77. }
  78. /* END LOOP */
  79. }
  80. var ret;
  81. var count = 7;
  82. ret = fastaRepeat(2*count*100000, ALU);
  83. ret = fastaRandom(3*count*1000, IUB);
  84. ret = fastaRandom(5*count*1000, HomoSap);