11// vtest build: started_redis?
2+ import db.redis
23import os
4+ import rand
35import time
4- import db.redis
56
67const redis_password = os.getenv ('VREDIS_PASSWORD' )
78
@@ -291,31 +292,21 @@ fn test_large_binary_bulk_string() ! {
291292
292293 // Create a large binary payload (~200 KB) with a repeating pattern,
293294 // including zero bytes and CRLF sequences to exercise edge cases.
294- size := 200 * 1024 // 200 KiB
295- mut data := []u8 {len: size, init: u8 (index % 256 )}
295+ mut data := []u8 {len: 204800 , init: u8 (index & 0xFF )}
296296
297297 // inject some CRLF and zero-byte sequences at several spots
298- if size > 100 {
299- data[50 ] = `\r `
300- data[51 ] = `\n `
301- data[1000 ] = 0
302- data[1001 ] = `\r `
303- data[1002 ] = `\n `
304- }
298+ data[50 ] = `\r `
299+ data[51 ] = `\n `
300+ data[1000 ] = 0
301+ data[1001 ] = `\r `
302+ data[1002 ] = `\n `
305303
306304 // store binary data
307305 assert db.set ('bigbin' , data.clone ())! == 'OK'
308306
309307 // retrieve as []u8 using typed get
310308 got := db.get[[]u8 ]('bigbin' )!
311- assert got.len == data.len
312- // spot-check a few offsets to ensure exact match
313- assert got[0 ] == data[0 ]
314- assert got[50 ] == data[50 ]
315- assert got[51 ] == data[51 ]
316- assert got[1000 ] == data[1000 ]
317- assert got[1001 ] == data[1001 ]
318- assert got[1002 ] == data[1002 ]
309+ assert got == data
319310
320311 // also test with small binary containing embedded CRLF and NUL
321312 small := [u8 (0 ), `a` , `b` , `\r ` , `\n ` , `c` ]
@@ -338,7 +329,7 @@ fn test_very_large_payload() ! {
338329
339330 // Build a very large payload (> 1 MiB). Use ~1.2 MiB to be safely above 1 MiB.
340331 size := 1_200_000
341- mut big := []u8 {len: size, init: u8 (index % 256 )}
332+ mut big := []u8 {len: size, init: u8 (index & 0xFF )}
342333 // Put a few sentinel checks
343334 big[0 ] = 0
344335 big[1023 ] = `\r `
@@ -348,12 +339,7 @@ fn test_very_large_payload() ! {
348339 // store and retrieve
349340 assert db.set ('hugebin' , big.clone ())! == 'OK'
350341 got := db.get[[]u8 ]('hugebin' )!
351- assert got.len == big.len
352- // spot checks
353- assert got[0 ] == big[0 ]
354- assert got[1023 ] == big[1023 ]
355- assert got[1024 ] == big[1024 ]
356- assert got[size - 1 ] == big[size - 1 ]
342+ assert got == big
357343
358344 // cleanup
359345 db.del ('hugebin' )!
@@ -405,31 +391,20 @@ fn test_fuzz_random_binary_many() ! {
405391 db.cmd ('FLUSHALL' )!
406392
407393 // LCG PRNG seed using process id
408- seed := u64 (os.getpid ())
409- mut x := seed
394+ mut x := u64 (os.getpid ())
410395
411396 count := 50
412- for iter := 0 ; iter < count; iter ++ {
397+ for iter in 0 .. count {
413398 // size up to ~200 KiB
414399 size := int ((x % 200_000 ) + 1 )
415- mut data := []u8 {len: size}
416- for i in 0 .. size {
417- x = x * 6364136223846793005 + 1442695040888963407
418- data[i] = u8 ((x >> 16 ) & 0xFF )
419- }
400+ mut data := []u8 {len: size, init: rand.u8 ()}
420401 key := 'fuzz_big_${iter} '
421402 assert db.set (key, data.clone ())! == 'OK'
422403 got := db.get[[]u8 ](key)!
423- assert got.len == data.len
424- // quick spot-checks for integrity
425- if data.len > 3 {
426- assert got[0 ] == data[0 ]
427- assert got[data.len / 2 ] == data[data.len / 2 ]
428- assert got[data.len - 1 ] == data[data.len - 1 ]
429- }
404+ assert got == data
430405 // clean up
431406 db.del (key)!
432- // mix seed
407+
433408 x + = u64 (size) * u64 (iter + 1 )
434409 }
435410}
@@ -449,11 +424,7 @@ fn test_fuzz_crlf_random_positions() ! {
449424 for t in 0 .. trials {
450425 // size between 1 KiB and 32 KiB
451426 size := int ((x % 31_744 ) + 1024 )
452- mut data := []u8 {len: size}
453- for i in 0 .. size {
454- x = x * 6364136223846793005 + 1442695040888963407
455- data[i] = u8 ((x >> 8 ) & 0xFF )
456- }
427+ mut data := []u8 {len: size, init: rand.u8 ()}
457428 // place a CRLF at a pseudo-random position; sometimes force it near boundaries
458429 pos := int (x % u64 (size - 2 ))
459430 data[pos] = `\r `
@@ -466,13 +437,7 @@ fn test_fuzz_crlf_random_positions() ! {
466437 key := 'fuzz_crlf_${t} '
467438 assert db.set (key, data.clone ())! == 'OK'
468439 got := db.get[[]u8 ](key)!
469- assert got.len == data.len
470- assert got[pos] == `\r `
471- assert got[pos + 1 ] == `\n `
472- if t % 5 == 0 && size > 4097 {
473- assert got[4095 ] == `\r `
474- assert got[4096 ] == `\n `
475- }
440+ assert got == data
476441 db.del (key)!
477442 x + = u64 (pos) + 1
478443 }
@@ -519,12 +484,7 @@ fn test_fuzz_random_binary_small() {
519484 for iter := 0 ; iter < 20 ; iter++ {
520485 // pseudo-random size in [1, 4096]
521486 size := int ((x % 4096 ) + 1 )
522- mut data := []u8 {len: size}
523- for i in 0 .. size {
524- // LCG step
525- x = x * 6364136223846793005 + 1442695040888963407
526- data[i] = u8 ((x >> 32 ) & 0xFF )
527- }
487+ mut data := []u8 {len: size, init: rand.u32 ()}
528488 k := 'fuzz_small_${iter} '
529489 assert db.set (k, data.clone ())! == 'OK'
530490 got := db.get[[]u8 ](k)!
0 commit comments