feat: add optional offset parameter to File.readBytes method
Extend File.readBytes with a second overload accepting an offset argument, allowing reads to start at any byte position from the beginning of the file. The existing single-argument variant now delegates to the new two-argument version with offset 0. Validation for the offset parameter mirrors the existing count checks, aborting on non-numeric, non-integer, or negative values. The underlying C implementation passes the offset directly to uv_fs_read, replacing the previous hardcoded zero. Documentation in the io module markdown is updated with usage examples for both signatures, and the old TODO comment about missing offset support is removed. New test files cover offset-based reads, edge cases (zero offset, past-end offset, zero count with offset), and error conditions for invalid offset arguments.
This commit is contained in:
@@ -10,4 +10,10 @@ System.print(file.readBytes(7)) // expect: this is
|
||||
// Allows zero.
|
||||
System.print(file.readBytes(0).bytes.count) // expect: 0
|
||||
|
||||
// A longer number reads the whole file.
|
||||
System.print(file.readBytes(100)) // expect: this is a text file
|
||||
|
||||
// Reading past the end truncates the buffer.
|
||||
System.print(file.readBytes(100).bytes.count) // expect: 19
|
||||
|
||||
file.close()
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
|
||||
// Zero starts at the beginning.
|
||||
System.print(file.readBytes(3, 0)) // expect: thi
|
||||
|
||||
// Starts at the offset.
|
||||
System.print(file.readBytes(8, 3)) // expect: s is a t
|
||||
|
||||
// Allows zero.
|
||||
System.print(file.readBytes(0, 4).bytes.count) // expect: 0
|
||||
|
||||
// A longer number length reads until the end.
|
||||
System.print(file.readBytes(100, 2)) // expect: is is a text file
|
||||
|
||||
// An offset past the end returns an empty string.
|
||||
System.print(file.readBytes(100, 30).bytes.count) // expect: 0
|
||||
|
||||
file.close()
|
||||
@@ -0,0 +1,6 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.close()
|
||||
|
||||
file.readBytes(3, 0) // expect runtime error: File is not open.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes(-1, 0) // expect runtime error: Count cannot be negative.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes(1.2, 0) // expect runtime error: Count must be an integer.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes("not num", 0) // expect runtime error: Count must be an integer.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes(1, -1) // expect runtime error: Offset cannot be negative.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes(1, 1.2) // expect runtime error: Offset must be an integer.
|
||||
@@ -0,0 +1,4 @@
|
||||
import "io" for File
|
||||
|
||||
var file = File.open("test/io/file/file.txt")
|
||||
file.readBytes(1, "not num") // expect runtime error: Offset must be an integer.
|
||||
Reference in New Issue
Block a user