summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorJoe Wilm <joe@jwilm.com>2018-05-19 11:18:37 -0700
committerJoe Wilm <joe@jwilm.com>2018-06-02 09:56:50 -0700
commitc61a912f6221a320ec4787cd883527b0e7f26a8e (patch)
tree6eed1e00673b08885b57d5f5d8c24738b49758e4 /scripts
parent4b1a3b1e929bbf580de7106a688043bb44523a7f (diff)
Optimize Row::reset
Now, only cells that have been used are cleared. This is achieved by using a "occupied" memo on the Row itself. The value, `occ`, is updated wherever the Row is accessed mutably, and it's cleared to zero in Row::reset. The tests for grid scroll_up and scroll_down were updated to include a test on the value `occ` and slightly refactored, but are otherwise equivalent to the previous implementation of those tests. Because of the change to the `Row` struct, the ref tests were updated so Deserialization keeps working as expected.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/migrate_ref_tests.rb23
1 files changed, 18 insertions, 5 deletions
diff --git a/scripts/migrate_ref_tests.rb b/scripts/migrate_ref_tests.rb
index b6c89bfe..5ed02893 100755
--- a/scripts/migrate_ref_tests.rb
+++ b/scripts/migrate_ref_tests.rb
@@ -3,18 +3,31 @@
require 'json'
Dir.glob('./tests/ref/**/grid.json').each do |path|
+ puts "Migrating #{path}"
+
# Read contents
s = File.open(path) { |f| f.read }
# Parse
grid = JSON.parse(s)
- # Check if it's already migrated / make this migration idempotent
- next if grid['raw'][0][0].is_a? Array
+ # Normalize Storage serialization
+ if grid['raw'].is_a? Array
+ grid['raw'] = {
+ 'inner' => grid['raw'][0],
+ 'zero' => grid['raw'][1],
+ 'visible_lines' => grid['raw'][2]
+ }
+ end
- # Transform
- grid['raw'].reverse!
- grid['raw'] = [grid['raw'], 0, grid['lines'] - 1]
+ # Migrate Row serialization
+ grid['raw']['inner'].map! do |row|
+ if row.is_a? Hash
+ row
+ else
+ { inner: row, occ: row.length }
+ end
+ end
# Write updated grid
File.open(path, 'w') { |f| f << JSON.generate(grid) }