Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2025
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VeriLog 2.52 KB | Source Code | 0 0
  1. // Results when compiled with -prod, on Ubuntu 20.04, with latest V 0.4.11 7e35d40, on i3-3225,
  2. //  cc is the stock gcc-10 (`cc (Ubuntu 10.5.0-1ubuntu1~20.04) 10.5.0`):
  3. /*
  4. ```
  5. #0 11:57:02 ^ master ~/v>alias xtime='/usr/bin/time -f "CPU: %Us\tReal: %es\tElapsed: %E\tRAM: %MKB\t%C"'
  6. #0 11:57:08 ^ master ~/v>v -prod /home/delian/code/misc/2025_07_03__08/xx_v_iterator_atof_quick.v
  7. #0 11:57:23 ^ master ~/v>xtime /home/delian/code/misc/2025_07_03__08/xx_v_iterator_atof_quick 10
  8. 1th speed: 123632950.29 l/s
  9. 2th speed: 123553007.41 l/s
  10. 3th speed: 123801582.11 l/s
  11. 4th speed: 121633929.99 l/s
  12. 5th speed: 120313187.74 l/s
  13. 6th speed: 121775120.81 l/s
  14. 7th speed: 122016272.04 l/s
  15. 8th speed: 121878149.10 l/s
  16. 9th speed: 119665317.17 l/s
  17. 10th speed: 123450181.73 l/s
  18. average speed: 122171969.84 lines/s
  19. CPU: 2.44s      Real: 2.57s     Elapsed: 0:02.57        RAM: 402980KB   /home/delian/code/misc/2025_07_03__08/xx_v_iterator_atof_quick 10
  20. #0 11:57:44 ^ master ~/v>
  21. ```
  22. */
  23. module main
  24.  
  25. import os
  26. import strconv
  27. import time
  28. import rand
  29.  
  30. const count_lines = 10_000_000
  31.  
  32. fn generate_fake_code() string {
  33.     mut b := []u8{cap: count_lines * 10}
  34.     for _ in 0 .. count_lines {
  35.         b << rand.f32().str().bytes()
  36.         b << `\n`
  37.     }
  38.     return b.bytestr()
  39. }
  40.  
  41. fn parse(code string) u32 {
  42.     mut total := f64(0)
  43.     _ = total
  44.     mut count := u32(0)
  45.     for line in new_line_iter(code) {
  46.         if line.len == 0 {
  47.             continue
  48.         }
  49.         total += strconv.atof_quick(line)
  50.         count++
  51.     }
  52.     return count
  53. }
  54.  
  55. fn main() {
  56.     mut arr := []f64{}
  57.     times := u32(os.args[1].f32())
  58.     code := generate_fake_code()
  59.  
  60.     for _ in 0 .. times {
  61.         start := time.now().unix_nano()
  62.         lines := parse(code)
  63.         close := time.now().unix_nano()
  64.  
  65.         seconds := f64(close - start) / 1e9
  66.         speed := f64(lines) / seconds
  67.         arr << speed
  68.     }
  69.  
  70.     mut total := f64(0)
  71.     for i, val in arr {
  72.         total += val
  73.         println('${i + 1}th speed: ${val:.2f} l/s')
  74.     }
  75.     avg := total / f64(arr.len)
  76.  
  77.     println('average speed: ${avg:.2f} lines/s')
  78. }
  79.  
  80. struct LineIter {
  81.     text string
  82. mut:
  83.     ptr &u8
  84.     end &u8
  85. }
  86.  
  87. fn new_line_iter(text string) LineIter {
  88.     return unsafe {
  89.         LineIter{
  90.             text: text
  91.             ptr:  text.str
  92.             end:  text.str + text.len
  93.         }
  94.     }
  95. }
  96.  
  97. @[direct_array_access]
  98. fn (mut it LineIter) next() ?string {
  99.     unsafe {
  100.         if it.ptr >= it.end {
  101.             return none
  102.         }
  103.         start := it.ptr
  104.         for it.ptr < it.end && *it.ptr != `\n` {
  105.             it.ptr++
  106.         }
  107.         line_len := it.ptr - start
  108.         line := tos(start, int(line_len))
  109.         if it.ptr < it.end && *it.ptr == `\n` {
  110.             it.ptr++
  111.         }
  112.         return line
  113.     }
  114. }
  115.  
Tags: vlang
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement