Verifies: SYS-REQ-116 (incremental array iteration) SYS-REQ-116:nominal:nominal reqproof:proptest:skip targeted streaming witness; not a property-test subject
(t *testing.T)
| 94 | // SYS-REQ-116:nominal:nominal |
| 95 | // reqproof:proptest:skip targeted streaming witness; not a property-test subject |
| 96 | func TestReaderParserArrayEach(t *testing.T) { |
| 97 | const elements = 20000 |
| 98 | var source strings.Builder |
| 99 | source.WriteByte('[') |
| 100 | for i := 0; i < elements; i++ { |
| 101 | if i > 0 { |
| 102 | source.WriteByte(',') |
| 103 | } |
| 104 | source.WriteString(strconv.Itoa(i)) |
| 105 | } |
| 106 | source.WriteByte(']') |
| 107 | |
| 108 | rp := NewReaderParser(strings.NewReader(source.String())) |
| 109 | count := 0 |
| 110 | err := rp.ArrayEach(func(value []byte, vt ValueType, err error) { |
| 111 | if err != nil { |
| 112 | t.Errorf("callback %d returned error: %v", count, err) |
| 113 | return |
| 114 | } |
| 115 | if vt != Number { |
| 116 | t.Errorf("callback %d type = %v, want Number", count, vt) |
| 117 | return |
| 118 | } |
| 119 | if got, want := string(value), strconv.Itoa(count); got != want { |
| 120 | t.Errorf("callback %d value = %q, want %q", count, got, want) |
| 121 | } |
| 122 | count++ |
| 123 | }) |
| 124 | if err != nil { |
| 125 | t.Fatalf("ArrayEach returned error: %v", err) |
| 126 | } |
| 127 | if count != elements { |
| 128 | t.Fatalf("ArrayEach callbacks = %d, want %d", count, elements) |
| 129 | } |
| 130 | if len(rp.buf) > defaultReaderBufferSize { |
| 131 | t.Fatalf("sliding buffer retained %d bytes after iteration, want at most %d", len(rp.buf), defaultReaderBufferSize) |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | // Verifies: SYS-REQ-116 (bounded window over a large stream) |
| 136 | // SYS-REQ-116:boundary:nominal |
nothing calls this directly
no test coverage detected