|
7 | 7 | #
|
8 | 8 |
|
9 | 9 | import os
|
| 10 | +import random |
| 11 | +import uuid |
10 | 12 | import pyarrow as pa
|
11 | 13 | from datetime import date, datetime
|
| 14 | +from pytest import mark |
12 | 15 | from perspective.table import Table
|
13 | 16 |
|
14 | 17 | SOURCE_STREAM_ARROW = os.path.join(os.path.dirname(__file__), "arrow", "int_float_str.arrow")
|
@@ -476,3 +479,50 @@ def test_update_arrow_column_order_int(self, util):
|
476 | 479 | assert tbl.view().to_dict() == {
|
477 | 480 | name: data[0] for name in names
|
478 | 481 | }
|
| 482 | + |
| 483 | + def test_update_arrow_thread_safe_int_index(self, util): |
| 484 | + data = [["a", "b", "c"] for i in range(10)] |
| 485 | + data += [[1, 2, 3]] |
| 486 | + names = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "uid"] |
| 487 | + arrow = util.make_arrow(names, data) |
| 488 | + tbl = Table(arrow, index="uid") |
| 489 | + |
| 490 | + for i in range(100): |
| 491 | + idx = (1, 2, 3)[random.randint(0, 2)] |
| 492 | + update_data = [[str(uuid.uuid4()) + str(random.randint(100, 1000000000))], [idx]] |
| 493 | + update_names = [names[random.randint(0, 9)], "uid"] |
| 494 | + update_arrow = util.make_arrow(update_names, update_data) |
| 495 | + tbl.update(update_arrow) |
| 496 | + |
| 497 | + assert tbl.size() == 3 |
| 498 | + |
| 499 | + def test_update_arrow_thread_safe_datetime_index(self, util): |
| 500 | + data = [["a", "b", "c"] for i in range(10)] |
| 501 | + data += [[datetime(2020, 1, 15, 12, 17), datetime(2020, 1, 15, 12, 18), datetime(2020, 1, 15, 12, 19)]] |
| 502 | + names = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "uid"] |
| 503 | + arrow = util.make_arrow(names, data) |
| 504 | + tbl = Table(arrow, index="uid") |
| 505 | + |
| 506 | + for i in range(100): |
| 507 | + idx = (datetime(2020, 1, 15, 12, 17), datetime(2020, 1, 15, 12, 18), datetime(2020, 1, 15, 12, 19))[random.randint(0, 2)] |
| 508 | + update_data = [[str(uuid.uuid4()) + str(random.randint(100, 1000000000))], [idx]] |
| 509 | + update_names = [names[random.randint(0, 9)], "uid"] |
| 510 | + update_arrow = util.make_arrow(update_names, update_data) |
| 511 | + tbl.update(update_arrow) |
| 512 | + |
| 513 | + assert tbl.size() == 3 |
| 514 | + |
| 515 | + def test_update_arrow_thread_safe_str_index(self, util): |
| 516 | + data = [["a", "b", "c"] for i in range(11)] |
| 517 | + names = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "uid"] |
| 518 | + arrow = util.make_arrow(names, data) |
| 519 | + tbl = Table(arrow, index="uid") |
| 520 | + |
| 521 | + for i in range(100): |
| 522 | + idx = ("a", "b", "c")[random.randint(0, 2)] |
| 523 | + update_data = [[str(uuid.uuid4()) + str(random.randint(100, 1000000000))], [idx]] |
| 524 | + update_names = [names[random.randint(0, 9)], "uid"] |
| 525 | + update_arrow = util.make_arrow(update_names, update_data) |
| 526 | + tbl.update(update_arrow) |
| 527 | + |
| 528 | + assert tbl.size() == 3 |
0 commit comments