mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
rand: add rand.ulid() (#5979)
* removed debug println * added newline to the end of the file * time: add .unix_time_milli() method; rand,time: add tests * rand: add more ulid tests; move tests to a separate file random_identifiers_test.v * run vfmt over vlib/rand/random_identifiers_test.v * speed up time.unix_time_milli * simplify and speedup time.unix_time/0 and time.new_time/1 * update comment about rand.ulid() * fix terminating 0 off by 1 issue in rand.ulid() * optimize time.new_time() * restore the master version of vlib/time/parse.v * make test_unix_time more robust Co-authored-by: Delyan Angelov <delian66@gmail.com>
This commit is contained in:
78
vlib/rand/random_identifiers_test.v
Normal file
78
vlib/rand/random_identifiers_test.v
Normal file
@ -0,0 +1,78 @@
|
||||
import time
|
||||
import rand
|
||||
|
||||
// uuid_v4:
|
||||
fn test_rand_uuid_v4() {
|
||||
uuid1 := rand.uuid_v4()
|
||||
uuid2 := rand.uuid_v4()
|
||||
uuid3 := rand.uuid_v4()
|
||||
assert uuid1 != uuid2
|
||||
assert uuid1 != uuid3
|
||||
assert uuid2 != uuid3
|
||||
assert uuid1.len == 36
|
||||
assert uuid2.len == 36
|
||||
assert uuid3.len == 36
|
||||
assert uuid1[14] == `4`
|
||||
assert uuid2[14] == `4`
|
||||
assert uuid3[14] == `4`
|
||||
}
|
||||
|
||||
// ulids:
|
||||
fn test_ulids_are_unique() {
|
||||
ulid1 := rand.ulid()
|
||||
ulid2 := rand.ulid()
|
||||
ulid3 := rand.ulid()
|
||||
assert ulid1.len == 26
|
||||
assert ulid2.len == 26
|
||||
assert ulid3.len == 26
|
||||
assert ulid1 != ulid2
|
||||
assert ulid1 != ulid3
|
||||
assert ulid2 != ulid3
|
||||
}
|
||||
|
||||
fn test_ulids_max_start_character_is_ok() {
|
||||
ulid1 := rand.ulid()
|
||||
// the largest valid ULID encoded in Base32 is 7ZZZZZZZZZZZZZZZZZZZZZZZZZ
|
||||
assert (int(ulid1[0]) - 48) <= 7
|
||||
}
|
||||
|
||||
fn test_ulids_generated_in_the_same_millisecond_have_the_same_prefix() {
|
||||
mut t1 := time.utc()
|
||||
mut t2 := time.utc()
|
||||
mut ulid1 := ''
|
||||
mut ulid2 := ''
|
||||
mut ulid3 := ''
|
||||
for {
|
||||
t1 = time.utc()
|
||||
ulid1 = rand.ulid()
|
||||
ulid2 = rand.ulid()
|
||||
ulid3 = rand.ulid()
|
||||
t2 = time.utc()
|
||||
if t1.unix_time_milli() == t2.unix_time_milli() {
|
||||
break
|
||||
}
|
||||
}
|
||||
ulid1_prefix := ulid1[0..10]
|
||||
ulid2_prefix := ulid2[0..10]
|
||||
ulid3_prefix := ulid3[0..10]
|
||||
assert ulid1_prefix == ulid2_prefix
|
||||
assert ulid1_prefix == ulid3_prefix
|
||||
}
|
||||
|
||||
fn test_ulids_should_be_lexicographically_ordered_when_not_in_same_millisecond() {
|
||||
ulid1 := rand.ulid()
|
||||
time.sleep_ms(1)
|
||||
ulid2 := rand.ulid()
|
||||
time.sleep_ms(1)
|
||||
ulid3 := rand.ulid()
|
||||
mut all := [ulid3, ulid2, ulid1]
|
||||
// eprintln('all before: $all')
|
||||
all.sort()
|
||||
// eprintln('all after: $all')
|
||||
s1 := all[0]
|
||||
s2 := all[1]
|
||||
s3 := all[2]
|
||||
assert s1 == ulid1
|
||||
assert s2 == ulid2
|
||||
assert s3 == ulid3
|
||||
}
|
Reference in New Issue
Block a user