record: Nummern unter 1 und Text sind ein Fehler statt Zeilen vom Ende

This commit is contained in:
wkh
2026-10-11 22:48:42 +02:00
parent f83d1bd6f8
commit d5286c3600
3 changed files with 19 additions and 0 deletions
+3
View File
@@ -7,6 +7,9 @@ folgen [Semantic Versioning](https://semver.org/lang/de/). Die Version steht in
## [Unveröffentlicht] ## [Unveröffentlicht]
### Behoben
- `record 0`, `record -1` und `record abc` lieferten Zeilen vom Ende der Tabelle (negativer Index in Ruby). Jetzt ein Fehler; eine Nummer hinter dem Ende gibt weiterhin eine leere Tabelle.
### Hinzugefügt ### Hinzugefügt
- Steuertabellen 2026 für `tax`: `demo/taxDE2026`, `taxAT2026`, `taxCH2026` (nur Bundessteuer), `taxLI2026` (nur Landessteuer), erzeugt mit `tools/gen_tax_tables.rb`, mit Tests. - Steuertabellen 2026 für `tax`: `demo/taxDE2026`, `taxAT2026`, `taxCH2026` (nur Bundessteuer), `taxLI2026` (nur Landessteuer), erzeugt mit `tools/gen_tax_tables.rb`, mit Tests.
+2
View File
@@ -72,6 +72,8 @@ end
Rdb.register('record', 'Find and output a record from a table', 'record number < table') do |args| Rdb.register('record', 'Find and output a record from a table', 'record number < table') do |args|
die 'usage: record number < table' unless args.size == 1 die 'usage: record number < table' unless args.size == 1
die "'#{args[0]}' is not a record number (1, 2, 3 ...)" unless args[0].match?(/\A\d+\z/) && args[0].to_i.positive?
t = table_in t = table_in
row = t.rows[args[0].to_i - 1] row = t.rows[args[0].to_i - 1]
t.with(rows: row ? [row] : []).write t.with(rows: row ? [row] : []).write
+14
View File
@@ -5,6 +5,20 @@ require 'pty'
require_relative '../lib/rdb' require_relative '../lib/rdb'
class SelectionTest < RdbCase class SelectionTest < RdbCase
def test_record_rejects_numbers_below_one_and_junk
%w[0 -1 abc 2.5].each do |n|
out, err, st = run3('record', n, stdin: File.read(File.join(@dir, 'owners')))
refute st.success?, "record #{n} should fail"
assert_equal '', out
assert_match(/not a record number/, err)
end
end
def test_record_beyond_the_end_is_an_empty_table
assert_equal [], data(rdb('record', '9', file: 'owners'))
assert_equal [%w[6 cy]], data(rdb('record', '3', file: 'owners'))
end
def test_row_numeric_condition def test_row_numeric_condition
out = rdb('row', 'Cost > 5', file: 'inventory') out = rdb('row', 'Cost > 5', file: 'inventory')
assert_equal %w[3 6 7], data(out).map(&:first) assert_equal %w[3 6 7], data(out).map(&:first)