1
0
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:
penguindark
2020-07-26 12:10:56 +02:00
committed by GitHub
parent 9e652c4f40
commit 7d52d612ce
5 changed files with 161 additions and 36 deletions

View 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
}