1package table23import (4 "testing"56 "gno.land/p/nt/uassert/v0"7 "gno.land/p/nt/urequire/v0"8)910func TestNew(t *testing.T) {11 header := []string{"Name", "Age", "Country"}12 rows := [][]string{13 {"Alice", "30", "USA"},14 {"Bob", "25", "UK"},15 }1617 table, err := New(header, rows)18 urequire.NoError(t, err)1920 uassert.Equal(t, len(header), len(table.header))21 uassert.Equal(t, len(rows), len(table.rows))22}2324func Test_AddRow(t *testing.T) {25 header := []string{"Name", "Age"}26 rows := [][]string{27 {"Alice", "30"},28 {"Bob", "25"},29 }3031 table, err := New(header, rows)32 urequire.NoError(t, err)3334 // Add a valid row35 err = table.AddRow([]string{"Charlie", "28"})36 urequire.NoError(t, err)3738 expectedRows := [][]string{39 {"Alice", "30"},40 {"Bob", "25"},41 {"Charlie", "28"},42 }43 uassert.Equal(t, len(expectedRows), len(table.rows))4445 // Attempt to add a row with a different number of columns46 err = table.AddRow([]string{"David"})47 uassert.Error(t, err)48}4950func Test_AddColumn(t *testing.T) {51 header := []string{"Name", "Age"}52 rows := [][]string{53 {"Alice", "30"},54 {"Bob", "25"},55 }5657 table, err := New(header, rows)58 urequire.NoError(t, err)5960 // Add a valid column61 err = table.AddColumn("Country", []string{"USA", "UK"})62 urequire.NoError(t, err)6364 expectedHeader := []string{"Name", "Age", "Country"}65 expectedRows := [][]string{66 {"Alice", "30", "USA"},67 {"Bob", "25", "UK"},68 }69 uassert.Equal(t, len(expectedHeader), len(table.header))70 uassert.Equal(t, len(expectedRows), len(table.rows))7172 // Attempt to add a column with a different number of values73 err = table.AddColumn("City", []string{"New York"})74 uassert.Error(t, err)75}7677func Test_RemoveRow(t *testing.T) {78 header := []string{"Name", "Age", "Country"}79 rows := [][]string{80 {"Alice", "30", "USA"},81 {"Bob", "25", "UK"},82 }8384 table, err := New(header, rows)85 urequire.NoError(t, err)8687 // Remove the first row88 err = table.RemoveRow(0)89 urequire.NoError(t, err)9091 expectedRows := [][]string{92 {"Bob", "25", "UK"},93 }94 uassert.Equal(t, len(expectedRows), len(table.rows))9596 // Attempt to remove a row out of range97 err = table.RemoveRow(5)98 uassert.Error(t, err)99}100101func Test_RemoveColumn(t *testing.T) {102 header := []string{"Name", "Age", "Country"}103 rows := [][]string{104 {"Alice", "30", "USA"},105 {"Bob", "25", "UK"},106 }107108 table, err := New(header, rows)109 urequire.NoError(t, err)110111 // Remove the second column (Age)112 err = table.RemoveColumn(1)113 urequire.NoError(t, err)114115 expectedHeader := []string{"Name", "Country"}116 expectedRows := [][]string{117 {"Alice", "USA"},118 {"Bob", "UK"},119 }120 uassert.Equal(t, len(expectedHeader), len(table.header))121 uassert.Equal(t, len(expectedRows), len(table.rows))122123 // Attempt to remove a column out of range124 err = table.RemoveColumn(5)125 uassert.Error(t, err)126}127128func Test_Validate(t *testing.T) {129 header := []string{"Name", "Age", "Country"}130 rows := [][]string{131 {"Alice", "30", "USA"},132 {"Bob", "25"},133 }134135 table, err := New(header, rows[:1])136 urequire.NoError(t, err)137138 // Validate should pass139 err = table.Validate()140 urequire.NoError(t, err)141142 // Add an invalid row and validate again143 table.rows = append(table.rows, rows[1])144 err = table.Validate()145 uassert.Error(t, err)146}147Signatures reconstructed verbatim from vm/qfuncs — interface params keep their inline definitions.