mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
746b26be19
Summary: Convert recursion to while loop with stack of things to invalidate. Test Plan: Loan tracker example works now Reviewers: dsagal Reviewed By: dsagal Differential Revision: https://phab.getgrist.com/D2867
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
import testutil
|
|
import test_engine
|
|
|
|
class TestDependencies(test_engine.EngineTestCase):
|
|
sample_desc = {
|
|
"SCHEMA": [
|
|
[1, "Table1", [
|
|
[1, "Prev", "Ref:Table1", True, "Table1.lookupOne(id=$id-1)", "", ""],
|
|
[2, "Value", "Numeric", False, "", "", ""],
|
|
[3, "Sum", "Numeric", True, "($Prev.Sum or 0) + $Value", "", ""],
|
|
]]
|
|
],
|
|
"DATA": {
|
|
"Table1": [
|
|
["id","Value"],
|
|
] + [[n + 1, n + 1] for n in range(3200)]
|
|
}
|
|
}
|
|
|
|
def test_recursive_column_dependencies(self):
|
|
sample = testutil.parse_test_sample(self.sample_desc)
|
|
self.load_sample(sample)
|
|
self.apply_user_action(['Calculate'])
|
|
|
|
# The Sum column contains a cumulative total of the Value column
|
|
self.assertTableData("Table1", cols="subset", rows="subset", data=[
|
|
["id", "Value", "Sum"],
|
|
[1, 1, 1],
|
|
[2, 2, 3],
|
|
[3, 3, 6],
|
|
[3200, 3200, 5121600],
|
|
])
|
|
|
|
# Updating the first Value causes a cascade of changes to Sum,
|
|
# invalidating dependencies one cell at a time.
|
|
# Previously this cause a recursion error.
|
|
self.update_record("Table1", 1, Value=11)
|
|
self.assertTableData("Table1", cols="subset", rows="subset", data=[
|
|
["id", "Value", "Sum"],
|
|
[1, 11, 11],
|
|
[2, 2, 13],
|
|
[3, 3, 16],
|
|
[3200, 3200, 5121610],
|
|
])
|