string-builder.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import * as B from 'benchmark'
  2. import SB from 'mol-util/string-builder'
  3. export namespace Test {
  4. function createData(n: number) {
  5. const ret: string[] = [];
  6. for (let i = 0; i < n; i++) {
  7. ret[i] = '' + ((100000000 * Math.random() + 1) | 0);
  8. }
  9. return ret;
  10. }
  11. function build(data: string[], chunkSize: number): SB {
  12. const sb = SB.create(chunkSize);
  13. for (let i = 0, _i = data.length; i < _i; i++) {
  14. SB.writeSafe(sb, data[i]);
  15. SB.whitespace1(sb);
  16. }
  17. return sb;
  18. }
  19. function buildWS(data: string[], chunkSize: number): SB {
  20. const sb = SB.create(chunkSize);
  21. for (let i = 0, _i = data.length; i < _i; i++) {
  22. SB.writeSafe(sb, data[i] + ' ');
  23. }
  24. return sb;
  25. }
  26. // function naive(data: string[]) {
  27. // let ret = '';
  28. // for (let i = 0, _i = data.length; i < _i; i++) ret += data[i];
  29. // return ret;
  30. // }
  31. // function join(data: string[]) {
  32. // let ret = [];
  33. // for (let i = 0, _i = data.length; i < _i; i++) ret[i] = data[i];
  34. // return ret.join('');
  35. // }
  36. export function run() {
  37. const data = createData(26 * 100000);
  38. const N = 512;
  39. const suite = new B.Suite();
  40. suite
  41. // .add(`naive`, () => naive(data))
  42. // .add(`join`, () => join(data))
  43. //.add(`${N} chunks`, () => SB.getChunks(build(data, N)))
  44. .add(`${N} str`, () => SB.getString(build(data, N)))
  45. .add(`${N} str ws`, () => SB.getString(buildWS(data, N)))
  46. .on('cycle', (e: any) => console.log(String(e.target)))
  47. .run();
  48. }
  49. }
  50. Test.run();