| 1 | import encoding.base64 |
| 2 | |
| 3 | fn test_long_encoding() { |
| 4 | repeats := 1000 |
| 5 | input_size := 3000 |
| 6 | |
| 7 | s_original := []u8{len: input_size, init: `a`} |
| 8 | s_encoded := base64.encode(s_original) |
| 9 | s_encoded_bytes := s_encoded.bytes() |
| 10 | s_decoded := base64.decode(s_encoded) |
| 11 | |
| 12 | assert s_encoded.len > s_original.len |
| 13 | assert s_original == s_decoded |
| 14 | |
| 15 | ebuffer := unsafe { malloc(s_encoded.len) } |
| 16 | dbuffer := unsafe { malloc(s_decoded.len) } |
| 17 | defer { |
| 18 | unsafe { free(ebuffer) } |
| 19 | unsafe { free(dbuffer) } |
| 20 | } |
| 21 | |
| 22 | encoded_size := base64.encode_in_buffer(s_original, ebuffer) |
| 23 | mut encoded_in_buf := []u8{len: encoded_size} |
| 24 | unsafe { vmemcpy(encoded_in_buf.data, ebuffer, encoded_size) } |
| 25 | assert input_size * 4 / 3 == encoded_size |
| 26 | assert encoded_in_buf[0] == `Y` |
| 27 | assert encoded_in_buf[1] == `W` |
| 28 | assert encoded_in_buf[2] == `F` |
| 29 | assert encoded_in_buf[3] == `h` |
| 30 | |
| 31 | assert encoded_in_buf[encoded_size - 4] == `Y` |
| 32 | assert encoded_in_buf[encoded_size - 3] == `W` |
| 33 | assert encoded_in_buf[encoded_size - 2] == `F` |
| 34 | assert encoded_in_buf[encoded_size - 1] == `h` |
| 35 | |
| 36 | assert encoded_in_buf == s_encoded_bytes |
| 37 | |
| 38 | decoded_size := base64.decode_in_buffer(s_encoded, dbuffer) |
| 39 | assert decoded_size == input_size |
| 40 | mut decoded_in_buf := []u8{len: decoded_size} |
| 41 | unsafe { vmemcpy(decoded_in_buf.data, dbuffer, decoded_size) } |
| 42 | assert decoded_in_buf == s_original |
| 43 | |
| 44 | mut s := 0 |
| 45 | for _ in 0 .. repeats { |
| 46 | resultsize := base64.encode_in_buffer(s_original, ebuffer) |
| 47 | s += resultsize |
| 48 | assert resultsize == s_encoded.len |
| 49 | } |
| 50 | |
| 51 | for _ in 0 .. repeats { |
| 52 | resultsize := base64.decode_in_buffer(s_encoded, dbuffer) |
| 53 | s += resultsize |
| 54 | assert resultsize == s_decoded.len |
| 55 | } |
| 56 | |
| 57 | println('Final s: ${s}') |
| 58 | // assert s == 39147008 |
| 59 | } |
| 60 | |