libvips Validation
Port build from safelibs/port-libvips at commit db239e6f7842 (release build-db239e6f7842)
Tests
libvips C API compile smoke Original / libvips / c-api-compile-smoke Passed
Vips introspection smoke Original / libvips / gir-introspection-smoke Passed
vips metadata header checks Original / libvips / metadata-header-checks Passed
vipsthumbnail behavior Original / libvips / thumbnail-behavior Passed
vips CLI load save Original / libvips / vips-cli-load-save Passed
ruby-vips abs of signed image Original / libvips / usage-ruby-vips-abs-of-signed-image Passed
Casts a uchar image to signed char, subtracts a constant to introduce negative pixel values, then applies Vips::Image#abs and verifies that all output pixels are non-negative and equal to the magnitude of the signed input.
ruby-vips generated add constant Original / libvips / usage-ruby-vips-add-constant-generated Passed
ruby-vips generated add constant tenth Original / libvips / usage-ruby-vips-add-constant-tenth Passed
Adds a scalar constant to a generated image with ruby-vips in the tenth batch and verifies each output pixel equals the input plus the constant.
ruby-vips generated add image Original / libvips / usage-ruby-vips-add-image-generated Passed
ruby-vips affine 90 degree rotation Original / libvips / usage-ruby-vips-affine-rotation Passed
Rotates a generated image by 90 degrees with the affine operator and verifies that pixel positions are swapped accordingly.
ruby-vips affine shear transform Original / libvips / usage-ruby-vips-affine-shear Passed
Applies a horizontal shear via Vips::Image#affine with matrix [1, 0.5, 0, 1] to a small uchar image and verifies the output canvas is wider than the original while preserving the band count, then writes the result to PNG and reloads it.
ruby-vips image multiply and divide arithmetic Original / libvips / usage-ruby-vips-arithmetic-multiply-divide Passed
Combines two synthetic images with multiply and divide and confirms exact pixel values via getpoint.
ruby-vips arrayjoin 2x2 grid Original / libvips / usage-ruby-vips-arrayjoin-grid Passed
Combines four single-band tiles into a 2x2 grid via Vips::Image.arrayjoin with across:2 and verifies grid dimensions and per-quadrant pixel values.
ruby-vips arrayjoin vertical stack with across:1 Original / libvips / usage-ruby-vips-arrayjoin-vertical-stack Passed
Stacks three single-band tiles vertically by passing across:1 to Vips::Image.arrayjoin and verifies that the resulting image is one tile wide, three tiles tall, and that the per-tile bands appear in the expected vertical positions.
ruby-vips autorot identity on unrotated image Original / libvips / usage-ruby-vips-autorot-no-orientation Passed
Loads a synthetic image written via Vips::Image#write_to_file and verifies that Vips::Image#autorot is a no-op when the image carries no EXIF orientation tag, preserving width, height, and exact pixel values.
ruby-vips average image Original / libvips / usage-ruby-vips-average-image Passed
ruby-vips average generated image Original / libvips / usage-ruby-vips-avg-generated Passed
ruby-vips generated avg scalar Original / libvips / usage-ruby-vips-avg-scalar-generated Passed
Computes the scalar avg of a generated image with ruby-vips and verifies the mean matches the arithmetic average of the pixel values.
ruby-vips generated bitwise and Original / libvips / usage-ruby-vips-bandbool-and-generated Passed
Combines two generated images with ruby-vips bitwise AND and verifies the per-pixel bitwise minimum payload.
ruby-vips bandfold and bandunfold round-trip Original / libvips / usage-ruby-vips-bandfold-roundtrip Passed
Folds a wide single-band image into a multi-band image with Vips::Image#bandfold(factor: 3), verifies the resulting width and band count, then unfolds it back and checks that the round-trip restores the original layout pixel-for-pixel.
ruby-vips bandjoin constant Original / libvips / usage-ruby-vips-bandjoin-constant Passed
ruby-vips bandjoin then extract_band roundtrip Original / libvips / usage-ruby-vips-bandjoin-extract-roundtrip Passed
Joins three single-band images, extracts each band back out, and verifies the recovered scalar values.
ruby-vips generated bandjoin image Original / libvips / usage-ruby-vips-bandjoin-image-generated Passed
Bandjoins two generated grayscale images with ruby-vips and verifies the resulting multiband channel payload.
ruby-vips bandjoin image Original / libvips / usage-ruby-vips-bandjoin-image Passed
ruby-vips bandjoin three Original / libvips / usage-ruby-vips-bandjoin-three Passed
ruby-vips bandmean generated Original / libvips / usage-ruby-vips-bandmean-generated Passed
Computes a band-mean image from generated RGB data with ruby-vips and verifies the result becomes single-band.
ruby-vips RGB bandmean Original / libvips / usage-ruby-vips-bandmean-rgb-batch11 Passed
ruby-vips generated bitwise or Original / libvips / usage-ruby-vips-bandor-generated Passed
Combines two generated images with ruby-vips bitwise OR and verifies the per-pixel bitwise union payload.
ruby-vips bandrank computes per-pixel median across images Original / libvips / usage-ruby-vips-bandrank-median Passed
Stacks three single-band images via Vips::Image#bandrank and verifies the per-pixel result equals the elementwise median of the inputs at multiple sample locations, including pixels where the median is the smallest, middle, or largest input.
ruby-vips generated bandsplit Original / libvips / usage-ruby-vips-bandsplit-generated Passed
ruby-vips generated bandsplit three Original / libvips / usage-ruby-vips-bandsplit-three-generated Passed
Calls bandsplit on a generated three-band image with ruby-vips and verifies it returns three single-band images with the original per-channel values.
ruby-vips black dimensions Original / libvips / usage-ruby-vips-black-dimensions-batch11 Passed
ruby-vips boolean AND between two images Original / libvips / usage-ruby-vips-boolean-and-image Passed
Builds two single-band uchar images with distinct bit patterns and verifies that Vips::Image#boolean(:and) computes the per-pixel bitwise AND of the two inputs at every sample position.
ruby-vips canny edge detection Original / libvips / usage-ruby-vips-canny-edges Passed
Runs Vips::Image#canny on a synthetic image with a hard vertical edge and verifies the response is non-zero along the edge and zero in flat regions.
ruby-vips cast to double preserves precision Original / libvips / usage-ruby-vips-cast-double-precision Passed
Casts a uchar image divided by a non-power-of-two scalar to :double and verifies the result reports the double format and preserves a fractional pixel value beyond uchar precision.
ruby-vips generated cast int Original / libvips / usage-ruby-vips-cast-int-generated Passed
Casts a generated uchar image to int format with ruby-vips and verifies the resulting image reports the int pixel format.
ruby-vips casts image Original / libvips / usage-ruby-vips-cast-uchar Passed
ruby-vips ceil on fractional pixels Original / libvips / usage-ruby-vips-ceil-fractional Passed
Applies Vips::Image#ceil to a synthetic float image with positive and negative fractional values and verifies ceil rounds toward positive infinity for each sampled pixel.
ruby-vips colourspace sRGB to B_W Original / libvips / usage-ruby-vips-colourspace-bw Passed
Converts an sRGB image to B_W with colourspace and verifies the result has a single band plus a plausible luminance value.
ruby-vips colourspace HSV round trip Original / libvips / usage-ruby-vips-colourspace-hsv-roundtrip Passed
Converts an sRGB image to HSV with Vips::Image#colourspace and back to sRGB, verifying that band count is preserved and that the round-tripped pixels remain close to the originals.
ruby-vips complexform pairs bands and complexget extracts real Original / libvips / usage-ruby-vips-complex-form-real Passed
Builds a complex-valued image from two real-valued single-band images via Vips::Image#complexform (the libvips operation name is one word; complex_form is not a registered operation) and verifies that complexget(:real) recovers the original real channel pixel-for-pixel.
ruby-vips composite over with alpha Original / libvips / usage-ruby-vips-composite-over Passed
Composites a translucent overlay over an opaque background with mode :over and confirms band count plus center pixel blending.
ruby-vips conv with custom kernel matrix Original / libvips / usage-ruby-vips-conv-custom-kernel Passed
Convolves a uniform image with a 3x3 box-blur kernel built via Vips::Image.new_from_array and verifies the result preserves the original constant value.
ruby-vips generated copy resolution Original / libvips / usage-ruby-vips-copy-resolution-generated Passed
Copies a generated image with ruby-vips while overriding its resolution metadata and verifies the new xres and yres values.
ruby-vips countlines vertical transitions Original / libvips / usage-ruby-vips-countlines-vertical Passed
Builds a small binary image containing a known number of horizontal stripe transitions and verifies that Vips::Image#countlines reports the expected count for vertical-direction line counting.
ruby-vips create image Original / libvips / usage-ruby-vips-create-image Passed
ruby-vips crop generated image Original / libvips / usage-ruby-vips-crop-generated Passed
ruby-vips crop image Original / libvips / usage-ruby-vips-crop-image Passed
ruby-vips crop sample JPEG Original / libvips / usage-ruby-vips-crop-sample-jpeg Passed
ruby-vips generated deviate zero Original / libvips / usage-ruby-vips-deviate-zero-generated Passed
Computes the deviate (standard deviation) of a uniform generated image with ruby-vips and verifies the result is essentially zero.
ruby-vips morphological dilate with 3x3 square mask Original / libvips / usage-ruby-vips-dilate-cross-mask Passed
Dilates a binary image containing a single white pixel with a 3x3 all-255 square structuring element via Vips::Image#dilate and verifies the result is exactly a 3x3 square stamped at the original location. (A 4-connected cross mask cannot be expressed in vips morph without rewriting the don't-care/must-not-be-set flags, which is a different behaviour; the square dilation of a single bright pixel is the canonical dilation case.)
ruby-vips generated divide constant Original / libvips / usage-ruby-vips-divide-constant-generated Passed
Divides a generated image by a scalar constant with ruby-vips and verifies the resulting pixel values.
ruby-vips draw_circle on a mutable image Original / libvips / usage-ruby-vips-draw-circle-mutable Passed
Mutates an image in place via Vips::MutableImage#draw_circle and verifies the centre and an off-circle pixel reflect the painted ink and untouched background respectively.
ruby-vips draw_line on a mutable image Original / libvips / usage-ruby-vips-draw-line-mutable Passed
Mutates a black canvas via Vips::MutableImage#draw_line! to paint a horizontal stroke and verifies pixels along the stroke carry the painted ink while pixels off the stroke remain at the background value.
ruby-vips draw_rect filled rectangle Original / libvips / usage-ruby-vips-draw-rect-mutable Passed
Paints a filled rectangle on a mutable canvas via Vips::MutableImage#draw_rect! and verifies that pixels strictly inside the rectangle carry the ink while pixels just outside the rectangle remain at the background value.
ruby-vips embed background Original / libvips / usage-ruby-vips-embed-background-batch11 Passed
ruby-vips embed extend background color Original / libvips / usage-ruby-vips-embed-extend-background-color Passed
Embeds a 3-band sRGB image onto a larger canvas using Vips::Image#embed with extend :background and a non-default RGB triple, then verifies the canvas border carries the requested color while the original payload sits at the requested offset.
ruby-vips embed extend copy and white Original / libvips / usage-ruby-vips-embed-extend-modes Passed
Embeds a small image onto a larger canvas using extend copy and extend white modes and asserts boundary pixel values.
ruby-vips embed generated image Original / libvips / usage-ruby-vips-embed-generated Passed
Embeds a generated image inside a larger canvas with ruby-vips and verifies the expanded output size.
ruby-vips morphological erode with 3x3 square mask Original / libvips / usage-ruby-vips-erode-cross-mask Passed
Erodes a binary image containing a centred 3x3 white block with a 3x3 all-255 square structuring element via Vips::Image#erode and verifies the eroded image keeps only the centre pixel. (A 4-connected cross mask requires don't-care semantics that vips morph does not implement, so the canonical 3x3 square erosion is used here.)
ruby-vips extract area generated Original / libvips / usage-ruby-vips-extract-area-generated Passed
Crops a generated image with ruby-vips extract_area and verifies the selected output dimensions.
ruby-vips generated extract band Original / libvips / usage-ruby-vips-extract-band-generated Passed
Extracts a selected band from a generated multiband image with ruby-vips and verifies the resulting grayscale payload.
ruby-vips extract_band range with n parameter Original / libvips / usage-ruby-vips-extract-band-range-n Passed
Builds a four-band image with distinct per-band constants, calls Vips::Image#extract_band(1, n: 2) to pull two contiguous bands, and verifies the resulting image has exactly two bands and the correct middle-band values at every pixel.
ruby-vips extract_band n=2 starting at offset 1 Original / libvips / usage-ruby-vips-extract-band-two-at-offset Passed
Builds a 4-band image with distinct per-band values and uses Vips::Image#extract_band with n=2 starting at band 1 to slice out a 2-band image, verifying band count and the surviving channel values.
ruby-vips extract band Original / libvips / usage-ruby-vips-extract-band Passed
ruby-vips extract corner Original / libvips / usage-ruby-vips-extract-corner-batch11 Passed
ruby-vips falsecolour expands grayscale to RGB Original / libvips / usage-ruby-vips-falsecolour-grayscale Passed
Applies Vips::Image#falsecolour to a single-band grayscale ramp and verifies the result is a three-band sRGB image of the same dimensions whose colours differ across distinct grayscale inputs.
ruby-vips find_trim bounding box Original / libvips / usage-ruby-vips-find-trim-bbox Passed
Embeds a smaller content rectangle inside a uniform background and verifies Vips::Image#find_trim returns the expected bounding box left/top/width/height tuple.
ruby-vips find_trim with custom threshold Original / libvips / usage-ruby-vips-find-trim-custom-threshold Passed
Embeds a slightly off-background content rectangle inside a near-uniform canvas and uses Vips::Image#find_trim with an explicit threshold parameter to verify that the bounding box only includes pixels that exceed the threshold delta.
ruby-vips flatten alpha Original / libvips / usage-ruby-vips-flatten-alpha Passed
ruby-vips flatten background Original / libvips / usage-ruby-vips-flatten-background Passed
Flattens a generated RGBA image onto a solid background with ruby-vips and verifies the alpha channel is removed.
ruby-vips flatten white Original / libvips / usage-ruby-vips-flatten-white-batch11 Passed
ruby-vips generated flip horizontal Original / libvips / usage-ruby-vips-flip-horizontal-generated Passed
ruby-vips generated flip vertical Original / libvips / usage-ruby-vips-flip-vertical-generated Passed
ruby-vips horizontal flip sample Original / libvips / usage-ruby-vips-fliphor-sample Passed
Flips the bundled PNG sample horizontally with ruby-vips and verifies the image dimensions stay unchanged.
ruby-vips vertical flip sample Original / libvips / usage-ruby-vips-flipver-sample Passed
Flips the bundled PNG sample vertically with ruby-vips and verifies the image dimensions stay unchanged.
ruby-vips floor on fractional pixels Original / libvips / usage-ruby-vips-floor-fractional Passed
Applies Vips::Image#floor to a synthetic float image with positive and negative fractional values and verifies floor rounds toward negative infinity for each sampled pixel.
ruby-vips gamma with explicit exponent Original / libvips / usage-ruby-vips-gamma-explicit-exponent Passed
Applies Vips::Image#gamma with an explicit exponent of 2.2 to a uniform grey image and verifies the result is brighter than the input via avg().
ruby-vips Gaussian blur image Original / libvips / usage-ruby-vips-gaussblur-image Passed
ruby-vips gaussblur sample Original / libvips / usage-ruby-vips-gaussblur-sample Passed
Applies Gaussian blur to a PNG fixture with ruby-vips and verifies the dimensions stay constant.
ruby-vips gaussmat kernel image Original / libvips / usage-ruby-vips-gaussmat-kernel Passed
Generates a Gaussian kernel image with Vips::Image.gaussmat, verifies it is square with odd side length, that its peak value sits at the centre, and that the kernel is symmetric under horizontal flip.
ruby-vips gaussnoise generator Original / libvips / usage-ruby-vips-gaussnoise-generator Passed
Creates a Gaussian-noise image with Vips::Image.gaussnoise and verifies dimensions, band count, and that the per-pixel mean is close to the requested mean while the pixels themselves are not constant.
ruby-vips gravity east and west alignment Original / libvips / usage-ruby-vips-gravity-east-west Passed
Pads a 2x2 source image into a 4x4 canvas with Vips::Image#gravity using east and west placements and verifies the source pixels land vertically centred against the requested edge.
ruby-vips generated gravity crop Original / libvips / usage-ruby-vips-gravity-generated Passed
Crops a generated grayscale image with ruby-vips gravity and verifies the centered pixel payload.
ruby-vips gravity placement directions Original / libvips / usage-ruby-vips-gravity-placement Passed
Pads a small image with Vips::Image.gravity using north-west and south-east placements and verifies that the original pixels land in the expected corners.
ruby-vips grid relays a tall image into tiles Original / libvips / usage-ruby-vips-grid-tile-layout Passed
Stacks four 6x6 tiles vertically via arrayjoin then uses Vips::Image#grid to relay them into a 2x2 layout, verifying final dimensions and per-tile sentinel pixels.
ruby-vips hist_cum produces cumulative histogram Original / libvips / usage-ruby-vips-hist-cum-cumulative Passed
Computes the histogram of a small grayscale image with hist_find and applies hist_cum, verifying the cumulative histogram is monotonically non-decreasing across all 256 bins and that the final bin equals the total pixel count.
ruby-vips histogram equalisation Original / libvips / usage-ruby-vips-hist-equal-histogram Passed
Builds a low-contrast synthetic image, applies Vips::Image#hist_equal, and verifies the equalised image keeps shape and bands while spreading pixel values to a wider range than the input.
ruby-vips hist_local local histogram equalisation Original / libvips / usage-ruby-vips-hist-local-equalisation Passed
Builds a 32x32 low-contrast image, applies Vips::Image#hist_local with a 7x7 window, and verifies the result preserves dimensions and band count while spreading pixel values across a wider range than the input.
ruby-vips hist_norm stretch to full range Original / libvips / usage-ruby-vips-hist-norm-stretch Passed
Builds a low-contrast 8-bit image, applies Vips::Image#hist_norm, and verifies that the normalised image has the same dimensions and band count as the input while spanning a noticeably wider value range than the source.
ruby-vips histogram image Original / libvips / usage-ruby-vips-histogram-image Passed
ruby-vips ifthenelse with computed comparison condition Original / libvips / usage-ruby-vips-ifthenelse-comparison-mask Passed
Builds a single-band gradient image, derives the boolean condition mask from a relational comparison, and uses Vips::Image#ifthenelse to select between two single-band sources, verifying the per-pixel selection follows the comparison.
ruby-vips generated ifthenelse Original / libvips / usage-ruby-vips-ifthenelse-generated Passed
Applies ruby-vips ifthenelse to generated mask and image inputs and verifies the selected pixel payload.
ruby-vips ifthenelse with two multi-band source images Original / libvips / usage-ruby-vips-ifthenelse-multiband-sources Passed
Builds a 1-band mask with two distinct regions plus two 3-band sRGB source images and uses Vips::Image#ifthenelse to splice the sources, verifying per-region pixel triples and the band count of the composited output.
ruby-vips insert corner Original / libvips / usage-ruby-vips-insert-corner-batch11 Passed
ruby-vips generated overlay insert Original / libvips / usage-ruby-vips-insert-generated-overlay Passed
ruby-vips insert generated image Original / libvips / usage-ruby-vips-insert-generated Passed
Inserts a smaller synthetic image into a base canvas with ruby-vips and verifies the output dimensions.
ruby-vips invert image Original / libvips / usage-ruby-vips-invert-image Passed
ruby-vips invert twice equals identity Original / libvips / usage-ruby-vips-invert-roundtrip-identity Passed
Inverts a synthetic uchar image twice via Vips::Image#invert and asserts the result equals the original pixel-for-pixel by checking the max of the absolute difference is zero.
ruby-vips horizontal join Original / libvips / usage-ruby-vips-join-horizontal Passed
ruby-vips generated vertical join Original / libvips / usage-ruby-vips-join-vertical-generated Passed
Joins two generated images vertically with ruby-vips and verifies the stacked pixel payload and output dimensions.
ruby-vips JPEG buffer round trip Original / libvips / usage-ruby-vips-jpeg-buffer-roundtrip Passed
ruby-vips JPEG buffer Original / libvips / usage-ruby-vips-jpeg-buffer Passed
ruby-vips JPEG file output Original / libvips / usage-ruby-vips-jpeg-file-output Passed
ruby-vips JPEG quality buffer roundtrip Original / libvips / usage-ruby-vips-jpeg-quality-buffer Passed
Encodes a synthetic image to JPEG buffers at two quality levels, confirms the high-quality buffer is larger, and reloads each via new_from_buffer.
ruby-vips colourspace LAB to XYZ Original / libvips / usage-ruby-vips-lab-to-xyz Passed
Builds a synthetic LAB image with known L*=50, a*=0, b*=0 and converts it to XYZ via Vips::Image#colourspace, verifying band count, interpretation, and that Y lands close to the published value for a neutral 50%% lightness.
ruby-vips linear constant Original / libvips / usage-ruby-vips-linear-constant Passed
ruby-vips linear image Original / libvips / usage-ruby-vips-linear-image Passed
ruby-vips linear offset Original / libvips / usage-ruby-vips-linear-offset-batch11 Passed
ruby-vips math log followed by exp roundtrip Original / libvips / usage-ruby-vips-math-log-exp Passed
Applies Vips::Image#math(:log) to a positive double image and then math(:exp) to the result, verifying that the recovered values match the original samples within floating-point tolerance.
ruby-vips math sin and cos in degrees Original / libvips / usage-ruby-vips-math-sin-cos Passed
Builds a single-band float image holding angles in degrees and verifies that Vips::Image#math with :sin and :cos produces values matching Ruby's Math.sin and Math.cos at multiple sample angles within floating-point tolerance.
ruby-vips matrixload reads external matrix file Original / libvips / usage-ruby-vips-matrixload-external-file Passed
Writes a small 3x2 matrix to disk in libvips matrix-text format, loads it back through Vips::Image.matrixload, and verifies dimensions plus individual cell values via getpoint.
ruby-vips generated max Original / libvips / usage-ruby-vips-max-generated Passed
ruby-vips generated max scalar Original / libvips / usage-ruby-vips-max-scalar-generated Passed
Computes the scalar max of a generated three-pixel image with ruby-vips and verifies it returns the largest pixel value.
ruby-vips measure colour chart patches Original / libvips / usage-ruby-vips-measure-grid-patches Passed
Builds a synthetic four-patch grayscale chart, measures it with Vips::Image#measure(4, 1), and verifies that the returned matrix carries one row per patch with the expected mean intensities.
ruby-vips PNG memory roundtrip Original / libvips / usage-ruby-vips-memory-png-roundtrip-batch11 Passed
ruby-vips PPM memory roundtrip Original / libvips / usage-ruby-vips-memory-ppm-roundtrip-batch11 Passed
ruby-vips generated min Original / libvips / usage-ruby-vips-min-generated Passed
ruby-vips generated min scalar Original / libvips / usage-ruby-vips-min-scalar-generated Passed
Computes the scalar min of a generated three-pixel image with ruby-vips and verifies it returns the smallest pixel value.
ruby-vips generated multiply constant Original / libvips / usage-ruby-vips-multiply-constant-generated Passed
ruby-vips generated multiply constant tenth Original / libvips / usage-ruby-vips-multiply-constant-tenth Passed
Multiplies a generated image by a scalar constant with ruby-vips in the tenth batch and verifies each output pixel equals the input scaled by the constant.
ruby-vips new_from_array pixel payload Original / libvips / usage-ruby-vips-new-from-array-pixels Passed
Builds a small image with Vips::Image.new_from_array and verifies dimensions and per-pixel values via getpoint.
ruby-vips PNG buffer round trip Original / libvips / usage-ruby-vips-png-buffer-roundtrip Passed
ruby-vips PNG file output Original / libvips / usage-ruby-vips-png-file-output Passed
Saves a synthetic PNG with ruby-vips, reloads it, and verifies the output file is nonempty and decodable.
ruby-vips premultiply unpremultiply roundtrip Original / libvips / usage-ruby-vips-premultiply-roundtrip Passed
Premultiplies an RGBA image and unpremultiplies the result, verifying that the recovered RGB values match the original within rounding tolerance.
ruby-vips profile reports first non-zero pixel positions Original / libvips / usage-ruby-vips-profile-first-non-zero Passed
Builds a synthetic image with a single off-axis bright pixel and uses Vips::Image#profile to obtain the per-row/per-column index of the first non-zero pixel, verifying both the column and row profiles match the expected coordinates.
ruby-vips project row and column sums Original / libvips / usage-ruby-vips-project-row-column-sums Passed
Builds a small grayscale image with known per-row and per-column sums, calls Vips::Image#project, and verifies that the returned columns image is one row tall, the rows image is one column wide, and that the sums match the analytic expectations.
ruby-vips boolean_const bitwise AND with scalar mask Original / libvips / usage-ruby-vips-r10-boolean-const-andconst Passed
Applies Vips::Image#boolean_const(:and, [0x0F]) to mask the low nibble of a uint8 image and verifies the output bytes equal the bitwise AND of each sample with the scalar.
ruby-vips buildlut interpolates piecewise control points Original / libvips / usage-ruby-vips-r10-buildlut-piecewise Passed
Builds a 256-entry LUT from three control points via Vips::Image.buildlut and verifies the LUT exactly matches the control values at the input rows and linearly interpolates between them.
ruby-vips byteswap on 16-bit data is its own inverse Original / libvips / usage-ruby-vips-r10-byteswap-uint16-roundtrip Passed
Constructs a uint16 image, applies Vips::Image#byteswap twice, and verifies the round-trip restores the original samples while a single byteswap reorders the byte pairs.
ruby-vips compass directional edge response Original / libvips / usage-ruby-vips-r10-compass-edge-detect Passed
Convolves a step-edge image with a horizontal-derivative mask via Vips::Image#compass and verifies the maximum response sits on the edge column rather than in the flat regions.
ruby-vips identity LUT maps inputs to themselves Original / libvips / usage-ruby-vips-r10-identity-lut-shape Passed
Builds an 8-bit identity LUT with Vips::Image.identity, verifies the dimensions are 256x1, and checks several sampled positions return their own index value.
ruby-vips mapim identity warp returns the input Original / libvips / usage-ruby-vips-r10-mapim-identity-warp Passed
Builds a two-band index image equal to (x, y) and verifies Vips::Image#mapim warps a 3x3 source through the identity coordinate map back to the original pixels.
ruby-vips morph binary erode shrinks foreground square Original / libvips / usage-ruby-vips-r10-morph-binary-erode Passed
Constructs a 5x5 binary image with a 3x3 foreground square and applies Vips::Image#morph with an erode 3x3 cross mask, verifying the foreground collapses to the centre pixel only.
ruby-vips relational_const less than scalar Original / libvips / usage-ruby-vips-r10-relational-const-lessconst Passed
Compares an integer image against a scalar threshold via Vips::Image#relational_const(:less, [...]) and verifies the output marks samples below the threshold with 255 and the rest with 0.
ruby-vips shrinkh horizontal-only block reduction Original / libvips / usage-ruby-vips-r10-shrinkh-horizontal Passed
Calls Vips::Image#shrinkh on a 4x1 row to reduce horizontally by a factor of 2 and verifies the two output samples equal the block means of the input.
ruby-vips zone test-pattern shape and centre symmetry Original / libvips / usage-ruby-vips-r10-zone-test-pattern Passed
Generates a zone-plate test pattern with Vips::Image.zone(64, 64) and verifies the result is a single-band 64x64 float-format image whose centre row exhibits left-right symmetry.
ruby-vips Image#add_alpha bumps a 3-band image to 4 bands with opaque alpha Original / libvips / usage-ruby-vips-r11-add-alpha-three-to-four-bands Passed
Bandjoins a 3-band uchar image and verifies Image#add_alpha yields a 4-band image whose new band is the type-max (255) opaque alpha.
ruby-vips Image#asin of 0.5 yields 30 degrees Original / libvips / usage-ruby-vips-r11-asin-half-degrees-thirty Passed
Builds a 4x4 image of constant 0.5 and verifies Image#asin returns 30 (vips asin emits degrees, not radians) within 1e-6 tolerance.
ruby-vips Image#bandeor xors all bands together Original / libvips / usage-ruby-vips-r11-bandeor-yields-bitwise-xor Passed
Builds a 1x1 two-band image with bytes 0xff and 0x0f and verifies Image#bandeor returns the single-band byte 0xf0 (bitwise xor).
ruby-vips Image#cosh of zero yields one Original / libvips / usage-ruby-vips-r11-cosh-zero-equals-one Passed
Builds a 4x4 zero image as double and verifies Image#cosh returns the constant 1.0 (per the identity cosh(0)=1) within 1e-9 tolerance.
ruby-vips fwfft followed by invfft preserves the input mean Original / libvips / usage-ruby-vips-r11-fwfft-invfft-roundtrip Passed
Computes the forward FFT of a constant-100 8x8 double image then the inverse FFT and verifies the real component recovers the constant 100 within 1e-6.
ruby-vips Image#log10 of 100 yields 2 Original / libvips / usage-ruby-vips-r11-log10-hundred-equals-two Passed
Builds a 4x4 constant-100 double image and verifies Image#log10 returns the constant 2.0 (per log10(100)=2) within 1e-9 tolerance.
ruby-vips Image#maxpos returns value and (x,y) of brightest pixel Original / libvips / usage-ruby-vips-r11-maxpos-locates-bright-pixel Passed
Draws a single 255 pixel at column 7 row 2 on a black 10x10 canvas and verifies Image#maxpos returns the triple [255, 7, 2].
ruby-vips Image#minpos returns value and (x,y) of darkest pixel Original / libvips / usage-ruby-vips-r11-minpos-locates-dark-pixel Passed
Draws a single 0 pixel at column 3 row 4 on a uniform-100 10x10 canvas and verifies Image#minpos returns the triple [0, 3, 4].
ruby-vips Image#scaleimage normalizes a 2x3 ramp to the full 0..255 uchar range Original / libvips / usage-ruby-vips-r11-scaleimage-normalizes-to-uchar Passed
Builds a 2x3 integer ramp 10..60 via Image.new_from_array and verifies Image#scaleimage emits a uchar image whose extrema are exactly 0 and 255.
ruby-vips Image#similarity at 45 degrees grows the bounding box from 8x8 to 11x11 Original / libvips / usage-ruby-vips-r11-similarity-rotate-45-bbox Passed
Rotates an 8x8 constant image via Image#similarity(angle: 45) and verifies the output bounding box is 11x11 (ceil(8*sqrt(2)) = 12 minus the 1-pixel inner overlap that vips emits).
ruby-vips Image#+ on identical images doubles each pixel value Original / libvips / usage-ruby-vips-r12-add-image-doubles-pixel-values Passed
Builds a 4x4 constant-50 uchar image and verifies (img + img).avg returns 100.0 within 1e-9, asserting libvips elementwise addition behaves as expected when the operands are identical buffers and the format is promoted to short to hold the sum without overflow.
ruby-vips Image#colourspace srgb to b-w yields a single-band image Original / libvips / usage-ruby-vips-r12-colourspace-srgb-to-bw-one-band Passed
Builds a 3-band uchar sRGB image with green-dominant pixels and verifies Image#colourspace(:b_w) returns a 1-band image whose mean is in (0, 255), asserting the libvips greyscale conversion path is exercised through the Ruby colour transform binding.
ruby-vips Image#composite2 over preserves the base image dimensions and bands Original / libvips / usage-ruby-vips-r12-composite-over-yields-input-bands Passed
Builds two 16x16 RGBA uchar images and verifies base.composite2(top, :over) yields an output of the same width, height, and 4 bands, asserting libvips' default 'over' alpha compositor returns a buffer matching the base layer's geometry.
ruby-vips Image#dilate with a 3x3 ones mask grows a single hot pixel to a 3x3 block Original / libvips / usage-ruby-vips-r12-dilate-grows-single-pixel Passed
Builds a 7x7 black image with a single 255 pixel at (3,3), morphs dilate with a 3x3 ones structuring element, and verifies the four-neighbours of the original pixel are all 255, asserting libvips morphology dilates points under a flat mask.
ruby-vips Image#erode with a 3x3 ones mask shrinks a single-pixel hot dot to zero Original / libvips / usage-ruby-vips-r12-erode-removes-pepper-pixel Passed
Builds a 7x7 black uchar image with a single 255 pixel at (3,3), morphs erode with a 3x3 ones structuring element, and verifies the centre pixel becomes 0, asserting libvips morphology erodes isolated pixels under a flat mask.
ruby-vips Image#gaussblur preserves the mean of a uniform image within 1.0 Original / libvips / usage-ruby-vips-r12-gaussblur-preserves-mean Passed
Builds an 8x8 constant-100 uchar image, applies Image#gaussblur(2.0), and verifies the output's mean stays within 1.0 of the original 100, asserting libvips Gaussian blur is mean-preserving on a uniform input.
ruby-vips Image#linear(2, 5) maps mean 10 to 25 Original / libvips / usage-ruby-vips-r12-linear-affine-mean-shift Passed
Builds a 5x5 constant-10 uchar image and verifies linear(a:2, b:5).avg == 25.0 exactly, asserting libvips' affine pixel transform applies a*x+b uniformly across the band.
ruby-vips Image#* by 3 triples a constant-10 image to mean 30 Original / libvips / usage-ruby-vips-r12-multiply-constant-three-triples-mean Passed
Builds a 6x4 constant-10 uchar image and verifies (img * 3).avg == 30.0 exactly, asserting libvips scalar multiplication promotes safely and produces the expected arithmetic mean.
ruby-vips Image#resize 0.5 halves both dimensions of a 40x20 image to 20x10 Original / libvips / usage-ruby-vips-r12-resize-half-shape Passed
Builds a 40x20 constant uchar image and verifies Image#resize(0.5).width == 20 and .height == 10, asserting libvips' resize honours the scalar scale factor in both axes.
ruby-vips Image#sharpen preserves the mean of a uniform LAB image Original / libvips / usage-ruby-vips-r12-sharpen-preserves-mean Passed
Builds an 8x8 sRGB constant image, converts to LAB-PQ format, applies Image#sharpen, converts back to sRGB and verifies the mean stays within 2 units of the original, asserting libvips' unsharp mask is mean-preserving on a uniform input.
ruby-vips bandjoin of three single-band uchar images yields a 3-band image with stacked pixels Original / libvips / usage-ruby-vips-r13-bandjoin-three-uchar-bands Passed
Builds three 3x3 single-band uchar images of constants 11, 22, 33, joins them with bandjoin, and verifies the resulting image has bands == 3 and getpoint(1, 1) returns [11.0, 22.0, 33.0], asserting libvips stacks the operands in band order.
ruby-vips Image#cast(:ushort) promotes the format from uchar to ushort Original / libvips / usage-ruby-vips-r13-cast-uchar-to-ushort-promotes-format Passed
Builds a 4x4 uchar image with constant 100, casts to :ushort, and verifies the cast image's format is :ushort and the mean is still 100.0, asserting libvips Cast widens the storage without scaling the pixel values.
ruby-vips Image#cast(:float) preserves the mean when widening from ushort Original / libvips / usage-ruby-vips-r13-cast-ushort-to-float-keeps-mean Passed
Builds a 4x4 ushort image with constant 1000, casts to :float, and verifies the cast image's format is :float and the mean is still 1000.0, asserting libvips Cast to float widens the storage without scaling the pixel values.
ruby-vips Image#embed places a 4x4 image into a 10x10 canvas at offset (3,3) Original / libvips / usage-ruby-vips-r13-embed-extends-to-larger-canvas Passed
Builds a 4x4 single-band uchar image of constant 200 and verifies embed(3, 3, 10, 10) returns an image with width == 10 and height == 10, asserting libvips' embed produces the expected canvas dimensions when extending with the default background.
ruby-vips Image#extract_area pulls a 2x2 region with the requested width and height Original / libvips / usage-ruby-vips-r13-extract-area-2x2-from-corner Passed
Builds an 8x8 constant uchar image and verifies extract_area(1, 2, 2, 2).width == 2 and .height == 2, asserting libvips' rectangle-extract honours the (left, top, width, height) arguments.
ruby-vips extract_band(1) on a 3-band image returns the middle band as a 1-band image Original / libvips / usage-ruby-vips-r13-extract-band-index-one-of-three Passed
Builds a 3-band image by bandjoining constants 10, 20, 30, calls extract_band(1), and verifies the result has bands == 1 and getpoint(0, 0) == [20.0], asserting libvips' band slicing returns the requested zero-indexed channel.
ruby-vips two horizontal flips restore the original byte order Original / libvips / usage-ruby-vips-r13-flip-horizontal-restores-via-double-flip Passed
Builds a 1x3 single-band uchar image with values [10, 20, 30] and verifies that two consecutive flip(:horizontal) calls restore the original write_to_memory bytes [10, 20, 30], asserting libvips horizontal flip is its own inverse.
ruby-vips write_to_file then new_from_file roundtrip a 12x8 JPEG Original / libvips / usage-ruby-vips-r13-jpeg-file-write-then-read-back Passed
Saves a 12x8 single-band uchar image to a JPEG file via write_to_file and verifies the on-disk file is non-empty, then reloads it with Vips::Image.new_from_file and asserts the reload preserves the 12x8 dimensions, exercising the libvips JPEG file IO path.
ruby-vips write_to_buffer(.png) followed by new_from_buffer recovers width and height Original / libvips / usage-ruby-vips-r13-png-buffer-roundtrip-via-bytes Passed
Builds a 5x4 single-band uchar image, writes a PNG to an in-memory buffer with write_to_buffer('.png'), reloads the buffer with Vips::Image.new_from_buffer, and verifies the reload preserves the original 5x4 dimensions, asserting the libvips PNG buffer roundtrip without disk IO.
ruby-vips two rot180 calls return the original 2x2 pixel buffer Original / libvips / usage-ruby-vips-r13-rot180-roundtrip-identity Passed
Builds a 2x2 single-band uchar image with bytes [1, 2, 3, 4] and verifies rot180.rot180.write_to_memory.bytes is again [1, 2, 3, 4], asserting libvips' 180-degree rotation is its own inverse on a square buffer.
ruby-vips Image#copy_memory preserves dimensions, bands, and mean Original / libvips / usage-ruby-vips-r14-copy-memory-preserves-shape-and-mean Passed
Builds a 7x5 single-band uchar constant image, calls Vips::Image#copy_memory to materialise it into RAM, and verifies the returned image has the same dimensions, band count, and average pixel value as the source, asserting libvips' copy_memory marker is value-preserving and does not change the image's logical shape.
ruby-vips Image.gaussmat produces a square mask with an odd side length Original / libvips / usage-ruby-vips-r14-gaussmat-square-odd-side Passed
Generates a Gaussian kernel image with Vips::Image.gaussmat(2.0, 0.1) and verifies the result is square (width == height), has odd side length, and the centre pixel value strictly exceeds the corner pixel, asserting libvips' Gaussian mask generator returns a peaked, symmetric kernel suitable for convolution.
ruby-vips Image.gaussnoise mean stays close to the requested target Original / libvips / usage-ruby-vips-r14-gaussnoise-mean-near-target Passed
Creates a 64x64 Gaussian noise image with mean=100 and sigma=15 via Vips::Image.gaussnoise and verifies dimensions are 64x64 with bands == 1, the per-pixel average is within +/-5 of the requested mean (broad tolerance for a stochastic generator), and the spread is non-zero (max > min after casting to uchar), asserting libvips emits a noise image with the requested distribution parameters.
ruby-vips Image.identity returns a 256x1 single-band uchar identity LUT Original / libvips / usage-ruby-vips-r14-identity-lut-256-by-1 Passed
Builds an 8-bit identity LUT with Vips::Image.identity and verifies the dimensions are 256x1, the band count is 1, and probing index 100 with getpoint returns 100.0, asserting libvips' identity LUT generator yields the canonical (x -> x) mapping.
ruby-vips Image#morph erode shrinks a 3x3 foreground square to its centre pixel Original / libvips / usage-ruby-vips-r14-morph-erode-shrinks-square-foreground Passed
Constructs a 9x9 binary single-band uchar image with a 3x3 foreground square (255) centred at (4,4) on a 0 background, applies Vips::Image#morph(cross, :erode) with a 3x3 cross-shaped structuring element, and verifies the centre pixel stays 255 while each of the four arm pixels of the original block fall to 0, asserting libvips' morph erode collapses the foreground exactly along the structuring element.
ruby-vips Image#rank with index 0 and 3x3 window picks the per-window minimum Original / libvips / usage-ruby-vips-r14-rank-min-of-3x3-window Passed
Builds a 5x5 uniform-grey single-band uchar image with a single pepper pixel of value 5 in the centre, applies Vips::Image#rank(3, 3, 0) (rank-0 of a 3x3 window is the minimum), and verifies the centre pixel becomes 5 (the pepper) and an unaffected far-corner pixel remains the background grey value, asserting libvips' rank operator selects the windowed minimum exactly.
ruby-vips Image#subsample(3, 3) reduces a 9x9 image to 3x3 Original / libvips / usage-ruby-vips-r14-subsample-by-three-shrinks-dimensions Passed
Builds a 9x9 single-band uchar constant image and applies Vips::Image#subsample(3, 3), verifying the result is 3x3 with bands == 1 and the average matches the source (since subsampling a constant image does not alter values), asserting libvips' subsample picks every Nth column/row exactly.
ruby-vips Image#tilecache preserves pixels through the cache stage Original / libvips / usage-ruby-vips-r14-tilecache-preserves-pixels Passed
Pushes a 6x6 single-band uchar image with a known per-pixel pattern through Vips::Image#tilecache(tile_width: 2, tile_height: 2, max_tiles: 9), then verifies dimensions are unchanged, bands are unchanged, and getpoint at three sampled coordinates returns the same values as the uncached source, asserting libvips' tilecache is value-preserving.
ruby-vips write_to_buffer('.jpg') with low Q is smaller than with high Q for noisy input Original / libvips / usage-ruby-vips-r14-write-to-buffer-jpeg-quality-affects-size Passed
Generates a 64x64 Gaussian noise image (which is incompressible enough that JPEG quality clearly impacts size), writes it to a JPEG buffer with Q=10 and Q=95 via write_to_buffer('.jpg', Q: ...), and verifies both buffers are non-empty and the Q=10 buffer is strictly smaller than the Q=95 buffer, asserting libvips honours the Q quality parameter on the JPEG encoder.
ruby-vips Image#zoom(3, 2) magnifies a 4x4 image to 12x8 Original / libvips / usage-ruby-vips-r14-zoom-3-by-2-magnifies-dimensions Passed
Builds a 4x4 single-band uchar constant image and applies Vips::Image#zoom(3, 2), verifying the result is 12x8 with bands == 1 and the average matches the source (since zooming a constant image is value-preserving), asserting libvips' zoom replicates each input pixel into an XxY block exactly.
ruby-vips Image#affine with the identity matrix preserves dimensions and mean Original / libvips / usage-ruby-vips-r15-affine-identity-preserves-dimensions Passed
Builds an 8x8 single-band uchar constant image, applies Vips::Image#affine([1, 0, 0, 1]) (the identity transform), and verifies the result has the same 8x8 dimensions, bands == 1, and the same mean as the source, asserting libvips' affine transform with the identity matrix is value-preserving and shape-preserving.
ruby-vips Image#cast(:uchar) clamps an out-of-range float pixel of 300 down to 255 Original / libvips / usage-ruby-vips-r15-cast-float-to-uchar-saturates-300-to-255 Passed
Builds a 4x4 single-band float image with constant 300 (well outside the uchar [0,255] range), casts to :uchar, and verifies the cast image's format is :uchar and the mean is 255.0, asserting libvips' Cast saturates over-range float values to the uchar maximum rather than wrapping or NaN-ing.
ruby-vips Image#cast(:double) widens uchar to double without scaling Original / libvips / usage-ruby-vips-r15-cast-uchar-to-double-keeps-mean Passed
Builds a 3x3 single-band uchar image with constant 70, casts to :double, and verifies the cast image's format is :double and the mean is still 70.0, asserting libvips Cast widens the storage from uchar to double without scaling the pixel values.
ruby-vips Image#deviate of a flat uchar image is exactly 0.0 Original / libvips / usage-ruby-vips-r15-deviate-flat-image-zero-stdev Passed
Builds a 4x4 single-band uchar image with constant 50 (zero variance) and verifies Vips::Image#deviate returns 0.0, asserting libvips' standard-deviation reducer is exactly zero on a constant image rather than a small floating-point epsilon.
ruby-vips Image / 2 halves the mean of a flat uchar image Original / libvips / usage-ruby-vips-r15-divide-by-two-halves-mean Passed
Builds a 4x4 single-band uchar image with constant 100, divides by 2 via the Ruby operator, and verifies the result's mean is 50.0, asserting libvips' arithmetic-divide on a uchar source halves the per-pixel value as expected.
ruby-vips Image#invert maps a flat uchar 30 image to a flat 225 image Original / libvips / usage-ruby-vips-r15-invert-uchar-30-becomes-225 Passed
Builds a 4x4 single-band uchar image with constant 30, applies Vips::Image#invert, and verifies the result has the same dimensions, bands == 1, and an average of 225.0 (i.e. 255 - 30), asserting libvips' invert performs the per-pixel uchar two's-complement-style negation 255 - x.
ruby-vips Image * 2 doubles the mean of a flat uchar image Original / libvips / usage-ruby-vips-r15-multiply-by-two-doubles-mean Passed
Builds a 4x4 single-band uchar image with constant 30, multiplies by 2 via the Ruby operator, and verifies the result's mean is 60.0, asserting libvips' arithmetic-multiply with a scalar doubles each per-pixel value as expected.
ruby-vips Image#rot90 chained four times restores the original dimensions and mean Original / libvips / usage-ruby-vips-r15-rot90-applied-four-times-equals-identity Passed
Builds an 8x8 single-band uchar constant image, applies Vips::Image#rot90 four times in succession, and verifies the result has the same 8x8 dimensions, bands == 1, and the same mean as the source, asserting libvips' 90-degree rotation composes to identity over four applications.
ruby-vips Image#min returns exactly the darkest pixel value of a deterministic image Original / libvips / usage-ruby-vips-r15-stats-min-matches-darkest-pixel Passed
Constructs a 5x5 single-band uchar image whose 25 pixel values are a deterministic permutation in [0, 200), verifies Vips::Image#min equals the analytic minimum computed in pure Ruby over the same pixel array (5.0 for ((i*11)+7) % 200 over i in 0..24), asserting libvips' min reducer agrees with the input pixel data.
ruby-vips write_to_buffer('.tif') then new_from_buffer recovers width and height Original / libvips / usage-ruby-vips-r15-tiff-buffer-write-then-read-back Passed
Builds a 6x5 single-band uchar image, writes a TIFF to an in-memory buffer with write_to_buffer('.tif'), reloads the buffer with Vips::Image.new_from_buffer, and verifies the reload preserves the original 6x5 dimensions, asserting the libvips TIFF buffer roundtrip without disk IO.
ruby-vips Image + scalar shifts the mean of a flat uchar image by the constant Original / libvips / usage-ruby-vips-r16-add-scalar-shifts-mean-by-constant Passed
Builds an 8x8 single-band uchar image with constant value 30, adds 25 via the Ruby operator, and asserts the result's mean is exactly 55.0 with identical 8x8 dimensions, exercising libvips' arithmetic-add with a scalar.
ruby-vips colourspace srgb to b_w reduces a 3-band image to a 1-band grayscale image Original / libvips / usage-ruby-vips-r16-colourspace-srgb-to-bw-one-band Passed
Builds a 6x6 three-band uchar image via bandjoin with constants (100, 150, 200), calls colourspace(:b_w, source_space: :srgb), and asserts the output image has bands 1 with 6x6 dimensions, exercising libvips' colour-space conversion from srgb to b_w (avoiding the unsupported :labs / :multiband routes).
ruby-vips Image#extract_area returns the requested subregion with exact width and height Original / libvips / usage-ruby-vips-r16-extract-area-window-dimensions Passed
Builds a 16x16 single-band uchar constant image, calls extract_area(3, 4, 6, 5), and asserts the resulting region has width 6, height 5, bands 1, and the same mean as the source — exercising libvips' extract_area operator with explicit offsets.
ruby-vips Image#insert places a small image into a canvas without changing canvas dimensions Original / libvips / usage-ruby-vips-r16-insert-at-offset-keeps-canvas-size Passed
Builds a 20x20 single-band uchar canvas with constant 10 and a 4x4 sub-image with constant 200, calls canvas.insert(sub, 5, 6), and asserts the result has width 20, height 20, bands 1, and a mean strictly greater than the canvas mean (10.0) — exercising libvips' insert operator with explicit offsets.
ruby-vips Image#invert maps a uchar constant 70 image to a uchar constant 185 image Original / libvips / usage-ruby-vips-r16-invert-uchar-inverts-pixel-range Passed
Builds a 5x5 single-band uchar image with constant value 70, calls Image#invert, and asserts the result has the same 5x5 dimensions and an average of exactly 185.0 (255 - 70), exercising libvips' invert operator over the uchar range.
ruby-vips Image#multiply(2.0) doubles the mean of a flat uchar image Original / libvips / usage-ruby-vips-r16-multiply-by-two-doubles-mean Passed
Builds a 5x5 single-band uchar image with constant 40, calls Image#multiply(2.0), and asserts the result has 5x5 dimensions and a mean of exactly 80.0 — exercising libvips' multiply operator with a scalar via the explicit method form.
ruby-vips Image#resize 0.5 halves both width and height of a uchar source Original / libvips / usage-ruby-vips-r16-resize-half-halves-width Passed
Builds a 32x24 single-band uchar image with constant value 40, calls Image#resize(0.5), and asserts the result has width 16, height 12, and bands 1, exercising libvips' resize operator with a fractional factor.
ruby-vips Image#rot90 on a 20x12 image yields a 12x20 image with preserved mean Original / libvips / usage-ruby-vips-r16-rotate-90-swaps-width-and-height Passed
Builds a 20x12 single-band uchar constant image with value 25, applies Vips::Image#rot90, and asserts the result has width 12, height 20, bands 1, and identical mean — exercising libvips' 90-degree rotation operator's geometry change.
ruby-vips Vips::Image.text renders 'Hello' into an image with positive width and height Original / libvips / usage-ruby-vips-r16-text-hello-image-has-positive-width Passed
Calls Vips::Image.text('Hello'), asserts the returned image has width and height greater than zero, bands equal to 1 (alpha mask), and that the mean across the image is strictly between 0 and 255, asserting libvips' Pango-backed text rasterizer emits a non-trivial alpha image.
ruby-vips Image#write_to_buffer('.png') emits a buffer whose first 8 bytes are the PNG magic Original / libvips / usage-ruby-vips-r16-write-to-buffer-png-has-png-magic Passed
Builds a 6x6 single-band uchar image, encodes via Image#write_to_buffer('.png'), asserts the resulting buffer is non-empty and its first 8 bytes equal the canonical PNG magic signature \x89PNG\r\n\x1a\n — exercising libvips' PNG buffer encoder.
ruby-vips Image#boolean(:and, self) yields a pixel-equal image (bitwise-AND identity) Original / libvips / usage-ruby-vips-r17-boolean-and-self-identity Passed
Builds an 8x8 uchar image filled with value 170 (binary 10101010), computes image.boolean(:and, image), and asserts the result has identical dimensions, format, and average pixel value 170 — exercising libvips' bitwise-AND of an image with itself as identity.
ruby-vips Image#cache returns an image with identical dimensions and mean Original / libvips / usage-ruby-vips-r17-cache-returns-equivalent-image Passed
Builds a 12x12 uchar image with constant value 77, calls cache(), and asserts the cached image has identical width, height, bands, format, and average pixel value as the source, confirming libvips' tile cache wrapper preserves pixel semantics.
ruby-vips Image#cast(:uchar) preserves width, height, and band count Original / libvips / usage-ruby-vips-r17-cast-uchar-preserves-dimensions Passed
Builds a 17x11 single-band black image, casts it to :uchar, and asserts the result has identical width (17), height (11), bands (1), and format :uchar, confirming libvips' format-cast operation leaves geometry untouched.
ruby-vips Image#embed at (0,0) keeps the original pixel at the (0,0) corner intact Original / libvips / usage-ruby-vips-r17-embed-preserves-corner-pixel Passed
Builds a 4x4 uchar image with the (0,0) pixel set to 200 via draw_rect!, embeds the image into an 8x8 canvas at offset (0,0) with extend :black, and asserts getpoint(0,0)[0] equals 200 — confirming libvips' embed places the input at the specified origin without modification.
ruby-vips Image#flip(:horizontal) applied twice restores pixel-equal output Original / libvips / usage-ruby-vips-r17-flip-horizontal-double-restores Passed
Builds a 4x4 uchar image filled with constant value 90, flips it horizontally twice, computes the sum of absolute differences between the doubly-flipped output and the original via (out - src).abs.avg, and asserts the average pixel-difference is exactly 0.0 — confirming libvips' horizontal flip is an involution.
ruby-vips Image#gaussblur(1.0) preserves the width and height of the input Original / libvips / usage-ruby-vips-r17-gaussblur-preserves-dimensions Passed
Builds a 16x16 uchar image with a constant value, applies gaussblur(1.0), and asserts the output retains the 16x16 dimensions and remains single-band uchar, confirming libvips' Gaussian blur does not crop the canvas.
ruby-vips Image#hist_find on a uchar image yields a 256-bin histogram Original / libvips / usage-ruby-vips-r17-histogram-bins-length Passed
Builds a 32x32 uchar image, runs hist_find to compute the per-bin histogram, and asserts the resulting histogram image has width 256 (one bin per uchar value) and height 1, confirming libvips' histogram bin layout for 8-bit input.
ruby-vips Image#linear with all-twos slopes doubles the mean of a flat uchar image Original / libvips / usage-ruby-vips-r17-linear-triple-doubles-mean Passed
Builds an 8x8 single-band uchar image with constant value 40, applies linear([2.0, 2.0, 2.0], [0.0, 0.0, 0.0]) to scale per band, asserts the result preserves the 8x8 dimensions and the average pixel value equals exactly 80.0, exercising libvips' linear operation.
ruby-vips Image#replicate(2,1) doubles the width and preserves the height Original / libvips / usage-ruby-vips-r17-replicate-doubles-width Passed
Builds an 8x6 uchar image, calls replicate(2, 1) to tile the input 2-wide by 1-tall, and asserts the result has width 16 (2x), height 6 (1x), and the same band count as the input, confirming libvips' tiling-replicate geometry.
ruby-vips Image#shrink(2,2) halves the width and height of the input Original / libvips / usage-ruby-vips-r17-shrink-halves-both-axes Passed
Builds a 32x16 uchar image, calls shrink(2,2), and asserts the output has width 16 and height 8 (each axis halved by the integer shrink factor), confirming libvips' shrink-by-integer-factor downsampling geometry.
ruby-vips Image.arrayjoin([a, b]) horizontally concatenates and doubles total width Original / libvips / usage-ruby-vips-r18-arrayjoin-pair-doubles-width Passed
Builds two 6x4 uchar images, calls Vips::Image.arrayjoin([a, b], across: 2) to lay them out side-by-side in a single row, and asserts the result has width 12 (2 * 6), height 4, and the same band count as the inputs, confirming libvips' arrayjoin lays out tiles in a fixed across-count grid.
ruby-vips Image#bandjoin with two extra single-band images yields a 3-band output Original / libvips / usage-ruby-vips-r18-bandjoin-three-images-makes-three-bands Passed
Builds three independent 5x5 single-band uchar images, calls bandjoin([b, c]) on the first to stack the channels, and asserts the result has width 5, height 5, bands 3, and per-band averages equal to the originals' avg values (10, 20, 30), confirming libvips' band concatenation order and pixel pass-through.
ruby-vips Image#extract_area returns an image with the requested width and height Original / libvips / usage-ruby-vips-r18-extract-area-returns-requested-rect Passed
Builds a 20x12 uchar image, calls extract_area(3, 2, 7, 5) to pull a 7x5 sub-rectangle starting at (3, 2), and asserts the result has width 7, height 5, and the same band count as the input, confirming libvips' rectangular extraction preserves geometry exactly.
ruby-vips Image#find_trim on a black-padded constant image returns the inner bounding box Original / libvips / usage-ruby-vips-r18-find-trim-on-padded-image-locates-content Passed
Builds a 4x4 uchar constant image (value 200), embeds it at (3, 2) into a 10x8 canvas with extend :black, calls find_trim with background: [0] and threshold: 1 to locate non-background content, and asserts the returned [left, top, width, height] equals [3, 2, 4, 4], confirming libvips' find_trim bounding-box detection against a black background.
ruby-vips Image#flip(:vertical) applied twice restores the original avg/min/max Original / libvips / usage-ruby-vips-r18-flip-vertical-double-restores-identity Passed
Builds a 12x6 uchar image with a constant value 70, flips vertically with flip(:vertical) twice, and asserts the result has identical width/height/bands and identical avg/min/max statistics to the input, confirming libvips' vertical flip is a self-inverse operation.
ruby-vips Image#gamma(exponent: 1.0) leaves the image avg unchanged on a constant image Original / libvips / usage-ruby-vips-r18-gamma-of-one-preserves-mean Passed
Builds a 12x12 uchar image with constant value 100, applies gamma(exponent: 1.0) which corresponds to the identity power transform, and asserts the result has the same width, height, band count, and avg as the input (avg == 100.0), confirming libvips' gamma operator is a no-op when the exponent is exactly 1.
ruby-vips Image#rot(:d90) swaps width and height of a non-square input Original / libvips / usage-ruby-vips-r18-rot-d90-swaps-dimensions Passed
Builds a 9x4 uchar image (non-square so rotation effects are observable), rotates by 90 degrees with rot(:d90), and asserts the result has width 4, height 9, and the same band count as the input, confirming libvips' lossless 90-degree rotation transposes the canvas dimensions.
ruby-vips Image#subsample(2, 2) halves the width and height of an input Original / libvips / usage-ruby-vips-r18-subsample-by-two-halves-dimensions Passed
Builds a 16x10 uchar image, calls subsample(2, 2) to take every second pixel along each axis, and asserts the result has width 8 (16/2), height 5 (10/2), and the same band count as the input, confirming libvips' point-sampled downsample geometry.
ruby-vips Image#wrap by half width and height preserves dimensions and statistics Original / libvips / usage-ruby-vips-r18-wrap-half-preserves-dimensions Passed
Builds a 10x8 uchar image with constant value 55, calls wrap(5, 4) to cyclically shift the image by half its width and half its height, and asserts the result has the same width, height, band count, and avg/min/max as the input, confirming libvips' wrap is a cyclic permutation that preserves all per-pixel statistics on a constant image.
ruby-vips Image#zoom(2, 2) doubles width and height with nearest-neighbour replication Original / libvips / usage-ruby-vips-r18-zoom-doubles-both-axes Passed
Builds an 8x6 uchar image, calls zoom(2, 2) to nearest-neighbour replicate each pixel, and asserts the result has width 16 (2x), height 12 (2x), the same band count, and the same avg as the input since nearest-neighbour replication preserves the mean exactly.
ruby-vips Image#abs flips the sign of a negative signed-format image to positive Original / libvips / usage-ruby-vips-r19-abs-of-negative-constant Passed
Builds an 8x6 image with constant value -40 cast to signed :char format, calls abs, and asserts the result has the same width, height, and band count as the input, asserts every pixel value in the result equals 40 (avg=40, min=40, max=40), confirming libvips' absolute-value operator correctly negates signed pixels.
ruby-vips Image#bandor on a three-band image returns the bitwise OR across bands Original / libvips / usage-ruby-vips-r19-bandbool-or-yields-bitwise-or Passed
Builds a 4x4 RGB image where the three bands carry constant values 1, 2, and 4 respectively, calls bandbool(:or) (equivalent to bandor) to fold the three bands with bitwise OR, asserts the result has one band and the same width and height as the source, and asserts every output pixel equals 1|2|4 = 7 (avg=7, min=7, max=7), confirming libvips' bitwise band-fold reduction.
ruby-vips Image#boolean_const with :eor and constant 255 inverts a uchar image Original / libvips / usage-ruby-vips-r19-boolean-eor-const-xor Passed
Builds a 4x4 uchar image with constant value 0x0F (15), calls boolean_const(:eor, [0xFF]) to bitwise-XOR every pixel with 255, asserts the result has the same dimensions and band count as the input, and asserts every output pixel equals 0xF0 (240) via avg, min, and max checks, confirming libvips' boolean_const XOR (eor) operator semantics.
ruby-vips Image#embed with extend :white pads the canvas margin with 255 (uchar white) Original / libvips / usage-ruby-vips-r19-embed-extend-white-fills-margin Passed
Builds a 4x4 uchar image with constant value 80, calls embed(2, 2, 8, 8, extend: :white) to place the source at (2,2) on an 8x8 canvas, asserts the result is 8x8 with the same band count as the source, asserts the maximum pixel value is 255 (the white margin) and the minimum is 80 (the inset content), confirming libvips' :white extend mode fills the surrounding margin with 255 for uchar input.
ruby-vips Image#flip vertical+horizontal yields the same image as rot(:d180) Original / libvips / usage-ruby-vips-r19-flip-vertical-then-horizontal-equals-rot180 Passed
Loads the sample JPEG, computes a = src.flip(:vertical).flip(:horizontal), computes b = src.rot(:d180), asserts both have the same width, height, and bands as the source, and asserts the per-band avg of a equals the per-band avg of b (within 0.001), confirming the algebraic identity that two perpendicular flips compose into a 180-degree rotation under libvips.
ruby-vips Image#ifthenelse with an all-true mask returns the then-branch verbatim Original / libvips / usage-ruby-vips-r19-ifthenelse-true-mask-selects-then Passed
Builds a 4x4 uchar all-ones mask (value 1) and two distinct constant uchar images "thn" (value 90) and "els" (value 30), calls mask.ifthenelse(thn, els), and asserts the result has the same dimensions as the inputs and that every output pixel equals 90 (avg=min=max=90), confirming libvips' conditional selection routes every position into the then-branch when the predicate is non-zero everywhere.
ruby-vips Image#minpos returns the coordinate of the darkest pixel in a planted-spot image Original / libvips / usage-ruby-vips-r19-minpos-locates-dark-pixel Passed
Builds a 6x6 uchar image with constant value 200, draws a single pixel of value 5 at (4, 1) via draw_rect on a mutable copy, calls minpos on the result, asserts the returned (min_value, x, y) tuple equals (5, 4, 1), confirming libvips' min-position locator picks the correct minimum coordinate against a planted dark spot.
ruby-vips Image#relational_const :moreeq with constant equal to pixel value returns all 255 Original / libvips / usage-ruby-vips-r19-relational-const-moreeq-flat Passed
Builds a 5x5 uchar image with constant value 50, calls relational_const(:moreeq, [50]) to test pixel-wise (pixel >= 50), asserts the result has the same width, height, and bands as the input and that every output pixel equals 255 (libvips relational truth value), and asserts a second call with constant 51 (strictly greater) yields all-zero output, confirming the inclusive >= threshold semantics.
ruby-vips Image#replicate(1, 3) preserves width and triples height Original / libvips / usage-ruby-vips-r19-replicate-doubles-height Passed
Builds a 7x5 uchar image, calls replicate(1, 3) to tile 1-wide by 3-tall, asserts the result has width 7 (unchanged), height 15 (3x), and the same band count as the input, and asserts the mean is preserved (constant input -> constant output), confirming libvips' vertical replicate geometry.
ruby-vips Image.xyz produces a 2-band uint coordinate image with mean equal to half the max coordinate Original / libvips / usage-ruby-vips-r19-xyz-default-bands-and-mean Passed
Builds a 10x8 coordinate image with Vips::Image.xyz(10, 8), asserts the result has width 10, height 8, and exactly 2 bands (x and y coordinates), and asserts band 0 has min 0 and max 9 (10 columns) and band 1 has min 0 and max 7 (8 rows), confirming libvips' canonical 2-band coordinate generator.
ruby-vips Image#ceil on a constant 2.3 float yields 3 Original / libvips / usage-ruby-vips-r20-ceil-of-fractional-2-3-equals-3 Passed
Builds a 4x4 image with constant value 2.3 cast to float, calls .ceil, and asserts the result avg, min, and max are all exactly 3.0 (ceil(2.3)==3), confirming libvips' ceil operator rounds upward toward positive infinity for a positive fractional input.
ruby-vips Image#cos on a zero-valued image returns one Original / libvips / usage-ruby-vips-r20-cos-of-zero-equals-one Passed
Builds a 6x6 black (all zero) image cast to float, calls .cos, and asserts the avg, min, and max of the result are all within 1e-9 of 1.0 (cos(0)==1), confirming libvips' libm-backed cosine operator returns the documented constant-input value.
ruby-vips Image#floor on a constant 2.7 float yields 2 Original / libvips / usage-ruby-vips-r20-floor-of-fractional-2-7-equals-2 Passed
Builds a 4x4 image with constant value 2.7 cast to float, calls .floor, and asserts the result avg, min, and max are all exactly 2.0 (floor(2.7)==2), confirming libvips' floor operator correctly truncates toward negative infinity on a positive fractional.
ruby-vips Image#getpoint(0, 0) on a constant image returns the constant value Original / libvips / usage-ruby-vips-r20-getpoint-corner-pixel-from-constant Passed
Builds an 8x8 image with every pixel equal to 123 (uchar), calls .getpoint(0, 0), and asserts the returned array has length equal to the band count and the sole value equals 123.0, confirming libvips' single-pixel sampling API returns the underlying pixel for the trivial constant case.
ruby-vips Image#round on a constant 1.7 float rounds to 2 Original / libvips / usage-ruby-vips-r20-round-of-half-rounds-up Passed
Builds an 8x4 image with constant value 1.7 cast to float, calls .round(:rint), and asserts the result avg, min, and max are all exactly 2.0 (1.7 rounds to nearest integer 2), confirming libvips' :rint rounding mode follows standard round-to-nearest-even semantics for fractional > 0.5.
ruby-vips Image#sign on a positive-constant image returns 1 Original / libvips / usage-ruby-vips-r20-sign-of-positive-yields-one Passed
Builds a 5x5 image with constant value 42 cast to float, calls .sign, and asserts the avg/min/max of the result are all exactly 1.0, confirming libvips' sign-of operator returns +1 for strictly positive input.
ruby-vips Image#sin on a zero-valued image returns zero Original / libvips / usage-ruby-vips-r20-sin-of-zero-equals-zero Passed
Builds an 8x8 black (all zero) image, casts to float, calls .sin, and asserts the result avg, min, and max are all within 1e-9 of 0.0 (sin(0)==0), confirming libvips' libm-backed sine operator zeroes out the trivial constant.
ruby-vips Image#** 0.5 on a constant-4 image yields 2.0 Original / libvips / usage-ruby-vips-r20-sqrt-of-constant-four-equals-two Passed
Builds an 6x6 image filled with constant value 4 cast to float, raises it to the 0.5 power (square root), and asserts the result avg, min, and max are all within 1e-6 of 2.0, confirming libvips' libm-backed pow operator computes the principal square root correctly across the whole image.
ruby-vips Image#stats on a flat constant-50 image reports mean 50 and stdev 0 Original / libvips / usage-ruby-vips-r20-stats-on-flat-image-mean-equals-constant Passed
Builds an 8x8 image with every pixel equal to 50 (uchar), calls .stats, reads the resulting 1x6 stats image row 0 (whose layout per libvips docs is min/max/sum/sum-of-squares/mean/stdev), and asserts mean equals 50.0 and stdev equals 0.0 (flat image), confirming libvips' summary statistics operator on a constant input.
ruby-vips Image#write_to_memory length equals width*height*bands for uchar Original / libvips / usage-ruby-vips-r20-write-to-memory-bytes-equal-pixel-count Passed
Builds a 9x5 single-band uchar image, calls .write_to_memory, and asserts the resulting binary string has bytesize equal to 9*5*1 (no padding) and the first byte equals the constant pixel value 33, confirming libvips' raw memory write yields a contiguous pixel buffer with no row padding.
ruby-vips Image#cast from float to uchar preserves the mean for in-range constant pixels Original / libvips / usage-ruby-vips-r21-cast-from-float-to-uchar-preserves-mean Passed
Builds an 8x8 image with constant value 75 in float format, casts it to uchar, and asserts the resulting format is :uchar and the avg equals 75 (no saturation), validating libvips' format conversion when no pixel exceeds [0, 255].
ruby-vips Image#composite2 :over preserves the input band count after compositing two RGBA images Original / libvips / usage-ruby-vips-r21-composite2-over-mode-bands Passed
Builds two 6x6 4-band uchar images (RGBA), tags them as sRGB with alpha via colourspace conversion, calls bottom.composite2(top, :over), and asserts the output has the same width, height, and bands as the bottom layer, exercising libvips' alpha-aware compositing.
ruby-vips Image#extract_area 1x1 at (0,0) yields a single-pixel image matching the source corner Original / libvips / usage-ruby-vips-r21-extract-area-zero-zero-corner-pixel Passed
Builds a 5x5 uchar image with constant value 123, calls extract_area(0, 0, 1, 1), and asserts the resulting image has width 1, height 1, and getpoint(0, 0)[0] equals 123, validating libvips' boundary extraction at the origin.
ruby-vips Image#find_trim on a flat-background image reports no content area Original / libvips / usage-ruby-vips-r21-find-trim-on-flat-image-returns-zero-area Passed
Builds a 10x10 uchar image filled with constant 255 (interpreted as background), calls find_trim with the default background, and asserts the returned [left, top, width, height] yields a width or height of 0 (no content), exercising libvips' background trim detection on a fully-background image.
ruby-vips Image#hist_find on a uchar image produces a 256-wide one-pixel-tall histogram Original / libvips / usage-ruby-vips-r21-hist-find-bin-count-256 Passed
Constructs a 16x16 uchar image of constant value 42, calls hist_find, and asserts the histogram image is 256 wide, 1 tall, single-banded, with the only non-zero bin at column 42 equal to 16*16=256, exercising libvips' histogram bucketing operation.
ruby-vips Image#interpretation is :srgb for a 3-band uchar PNG round-trip Original / libvips / usage-ruby-vips-r21-interpretation-srgb-on-png-load Passed
Builds a 4x4 three-band uchar image, encodes it as PNG via write_to_buffer, decodes back via new_from_buffer, casts to the srgb colourspace, and asserts the resulting interpretation is :srgb, exercising libvips' colourspace tagging plumbing.
ruby-vips Image#linear applies separate affine constants to each band Original / libvips / usage-ruby-vips-r21-linear-applies-affine-per-band Passed
Builds a 4x4 three-band uchar image with band values 10, 20, 30, calls linear([2.0, 3.0, 1.0], [1.0, 2.0, 0.0]) to apply ax+b independently per band, asserts the result averages 113/3 (= (10*2+1 + 20*3+2 + 30*1+0)/3 = (21+62+30)/3), exercising libvips' per-band affine transform.
ruby-vips Image.new_from_buffer round-trips a PNG-encoded blob via write_to_buffer Original / libvips / usage-ruby-vips-r21-new-from-buffer-png-roundtrip Passed
Builds an 8x6 uchar constant-99 image, encodes it to a PNG byte string with write_to_buffer('.png'), decodes the bytes back via Image.new_from_buffer(bytes, ''), and asserts the reconstructed image has identical width, height, and avg pixel value, exercising libvips' in-memory PNG codec round-trip.
ruby-vips Image#smartcrop with interesting :low returns the requested crop dimensions Original / libvips / usage-ruby-vips-r21-smartcrop-low-shape Passed
Builds a 32x24 single-band uchar image with constant value 60, calls smartcrop(16, 12, interesting: :low), and asserts the result is exactly 16x12 with the same band count as the source, exercising libvips' attention-model-independent crop sizing.
ruby-vips tiffsave_buffer with compression :deflate roundtrips an image without losing pixel mean Original / libvips / usage-ruby-vips-r21-tiffsave-buffer-deflate-roundtrip Passed
Builds a 10x10 uchar image with constant value 55, encodes it to a TIFF byte string via tiffsave_buffer with compression: :deflate, decodes via new_from_buffer, and asserts width, height, and avg pixel value match the source, exercising libvips' deflate-compressed TIFF write path.
ruby-vips PNG buffer roundtrip Original / libvips / usage-ruby-vips-r9-buffer-png-roundtrip Passed
Encodes an image to a PNG buffer with write_to_buffer, decodes it with new_from_buffer and verifies dimensions and band count are preserved.
ruby-vips cast to uchar clips overflow Original / libvips / usage-ruby-vips-r9-cast-clip-overflow Passed
Adds a constant that pushes pixel values above 255 and casts to uchar, verifying the cast clips at 255.
ruby-vips extract_area crops region Original / libvips / usage-ruby-vips-r9-extract-area Passed
Extracts a 4x4 sub-region from a 16x16 image via extract_area and verifies the output dimensions and that pixels match the original at the offset.
ruby-vips extract_band selects single channel Original / libvips / usage-ruby-vips-r9-extract-band-channel Passed
Builds a 3-band RGB image with distinct values per band and extracts band 1 (green) using extract_band, asserting bands becomes 1 and the pixel equals the green component.
ruby-vips flatten removes alpha against background Original / libvips / usage-ruby-vips-r9-flatten-alpha Passed
Flattens an RGBA image with a fully transparent area against a red background and verifies the resulting RGB pixel matches the background colour.
ruby-vips getpoint reports RGB triple Original / libvips / usage-ruby-vips-r9-getpoint-rgb Passed
Builds a uniform RGB image with known component values and asserts getpoint returns those exact values at multiple coordinates.
ruby-vips linear scales then offsets pixels Original / libvips / usage-ruby-vips-r9-linear-mul-add Passed
Applies the linear operation a*x+b on a uniform 50-valued image and asserts the resulting pixel equals 2*50+5 = 105.
ruby-vips PNG to JPEG roundtrip Original / libvips / usage-ruby-vips-r9-png-jpeg-roundtrip Passed
Writes a generated 32x32 RGB image to PNG, reloads it, writes JPEG, reloads JPEG and verifies dimensions and band count are preserved.
ruby-vips resize halves dimensions Original / libvips / usage-ruby-vips-r9-resize-half Passed
ruby-vips rot 90 swaps dimensions Original / libvips / usage-ruby-vips-r9-rot-90-shape Passed
ruby-vips rank median filter removes salt noise Original / libvips / usage-ruby-vips-rank-median-filter Passed
Builds a uniform-grey image with a single bright salt pixel and verifies that Vips::Image#rank with a 3x3 window and median index restores the salt pixel to the surrounding grey value while leaving the background untouched.
ruby-vips read JPEG buffer Original / libvips / usage-ruby-vips-read-buffer-jpeg Passed
ruby-vips read PNG buffer Original / libvips / usage-ruby-vips-read-buffer-png Passed
Writes a synthetic PNG buffer with ruby-vips, reloads it from memory, and verifies the decoded dimensions.
ruby-vips reads sample JPEG Original / libvips / usage-ruby-vips-read-sample-jpeg Passed
ruby-vips reads sample PNG Original / libvips / usage-ruby-vips-read-sample-png Passed
ruby-vips recomb 3x3 color matrix Original / libvips / usage-ruby-vips-recomb-color-matrix Passed
Applies a 3x3 channel recombination matrix to a synthetic 3-band sRGB image with Vips::Image#recomb and verifies that the per-band swap produces the expected pixel triple.
ruby-vips reduce with explicit xfac and yfac Original / libvips / usage-ruby-vips-reduce-xfac-yfac Passed
Calls Vips::Image#reduce with distinct xfac and yfac values and verifies the resulting dimensions are scaled independently on each axis.
ruby-vips relational lesseq between two images Original / libvips / usage-ruby-vips-relational-lesseq-image Passed
Compares two single-band images via Vips::Image#relational(:lesseq) and verifies the output is 255 where the left input is less than or equal to the right input and 0 elsewhere across every sample position.
ruby-vips relational more produces boolean mask Original / libvips / usage-ruby-vips-relational-more Passed
Compares two synthetic images with relational :more and verifies the boolean mask is 255 where lhs > rhs and 0 elsewhere.
ruby-vips replicates image Original / libvips / usage-ruby-vips-replicate-image Passed
ruby-vips replicate sample Original / libvips / usage-ruby-vips-replicate-sample Passed
ruby-vips resize generated image Original / libvips / usage-ruby-vips-resize-generated Passed
ruby-vips resize image Original / libvips / usage-ruby-vips-resize-image Passed
ruby-vips resize with cubic kernel Original / libvips / usage-ruby-vips-resize-kernel-cubic Passed
Downscales a uniform synthetic image with Vips::Image#resize using kernel: :cubic and asserts the rescaled dimensions and that the average pixel value is preserved within tolerance.
ruby-vips resize with linear kernel Original / libvips / usage-ruby-vips-resize-kernel-linear Passed
Downscales a uniform synthetic image with Vips::Image#resize using kernel: :linear and asserts the rescaled dimensions and that the average pixel value is preserved within tolerance.
ruby-vips resize sample PNG Original / libvips / usage-ruby-vips-resize-sample-png Passed
ruby-vips rint rounds to nearest with banker rounding Original / libvips / usage-ruby-vips-rint-banker Passed
Applies Vips::Image#rint to a synthetic float image including half-integer ties and verifies the result rounds to the nearest integer using libvips' banker (round-half-to-even) rule for ties.
ruby-vips 180 degree rotation Original / libvips / usage-ruby-vips-rot180-sample Passed
Rotates the bundled JPEG sample by 180 degrees with ruby-vips and verifies the image dimensions remain stable.
ruby-vips rot270 generated image Original / libvips / usage-ruby-vips-rot270-generated Passed
ruby-vips generated rot90 Original / libvips / usage-ruby-vips-rot90-generated Passed
ruby-vips rotate sample PNG Original / libvips / usage-ruby-vips-rot90-sample-png Passed
ruby-vips rotate image Original / libvips / usage-ruby-vips-rotate-image Passed
ruby-vips save png Original / libvips / usage-ruby-vips-save-png Passed
ruby-vips scharr edge detection Original / libvips / usage-ruby-vips-scharr-edges Passed
Runs Vips::Image#scharr on a synthetic image with a vertical step and verifies the response peaks along the step column and is near zero in flat regions.
ruby-vips sharpen roundtrip Original / libvips / usage-ruby-vips-sharpen-roundtrip Passed
Applies sharpen to a synthetic RGB image, writes the result as TIFF, and re-reads it to verify dimensions and band count.
ruby-vips sign of negative zero positive Original / libvips / usage-ruby-vips-sign-three-states Passed
Constructs an image whose pixels span negative, zero, and positive values, applies Vips::Image#sign, and verifies that the output contains exactly the three values -1, 0, and 1 in the expected positions.
ruby-vips similarity rotation by 30 degrees Original / libvips / usage-ruby-vips-similarity-rotate-30 Passed
Rotates a synthetic single-band image by 30 degrees via Vips::Image#similarity and verifies the rotated canvas grows beyond the original square dimensions.
ruby-vips similarity with idx/idy translation Original / libvips / usage-ruby-vips-similarity-with-translation Passed
Applies Vips::Image#similarity with explicit idx/idy translation offsets in addition to a scaling factor and verifies that the output canvas grows according to the scale and that the underlying pixel value survives.
ruby-vips sines synthetic generator produces a cosine wave Original / libvips / usage-ruby-vips-sines-generator Passed
Generates a 2D cosine wave image with Vips::Image.sines at a known horizontal frequency and verifies the output dimensions, format, and the period of the wave along a horizontal scanline.
ruby-vips smartcrop attention strategy Original / libvips / usage-ruby-vips-smartcrop-attention Passed
Crops a non-square synthetic RGB image into a square thumb using Vips::Image#smartcrop with the :attention strategy and verifies output dimensions and band count.
ruby-vips sobel edge magnitude Original / libvips / usage-ruby-vips-sobel-edges Passed
Runs Vips::Image#sobel on an image with a sharp vertical step and verifies the response peaks along the step column and is near zero in flat regions.
ruby-vips stats per-band statistics Original / libvips / usage-ruby-vips-stats-per-band Passed
Builds a small multi-band image with known per-band ranges and verifies that Vips::Image#stats returns a matrix whose first row carries the global min/max and whose subsequent rows carry the expected per-band min and max.
ruby-vips generated subsample Original / libvips / usage-ruby-vips-subsample-generated Passed
ruby-vips generated subtract constant Original / libvips / usage-ruby-vips-subtract-constant-generated Passed
Subtracts a scalar constant from a generated image with ruby-vips and verifies the resulting pixel values.
ruby-vips text rendering with default font Original / libvips / usage-ruby-vips-text-rendering Passed
Renders a short string into a single-band alpha image with Vips::Image.text using the default font and verifies the output has positive dimensions and contains both transparent and opaque pixels. If the renderer is unavailable (no fonts, no Pango support), the testcase reports the reason and exits successfully.
ruby-vips empty threshold Original / libvips / usage-ruby-vips-threshold-empty Passed
ruby-vips relational threshold Original / libvips / usage-ruby-vips-threshold-image Passed
ruby-vips thumbnail with centre crop Original / libvips / usage-ruby-vips-thumbnail-centre-crop Passed
Generates a thumbnail of a synthetic image with crop:centre and verifies the output is exactly square at the requested size.
ruby-vips TIFF buffer round trip Original / libvips / usage-ruby-vips-tiff-buffer-roundtrip Passed
Encodes a small grayscale image to TIFF via Vips::Image#write_to_buffer('.tif') and decodes it back, verifying that the produced buffer carries a TIFF magic header and that dimensions plus exact pixel values survive the round trip.
ruby-vips tilecache preserves pixels through a cached pipeline Original / libvips / usage-ruby-vips-tilecache-roundtrip Passed
Pushes a synthetic image through a Vips::Image#tilecache stage with explicit tile width/height and threading and verifies that downstream operations see the same pixel values they would without the cache, exercising the lazy/persistent cache marker.
ruby-vips WebP buffer round trip Original / libvips / usage-ruby-vips-webp-buffer-roundtrip Passed
Encodes a small sRGB image to WebP via Vips::Image#write_to_buffer('.webp') and decodes it again with Vips::Image.new_from_buffer, verifying the buffer is non-empty, has a WebP RIFF header, and that dimensions and band count survive the round trip.
ruby-vips wrap shifts image with toroidal wrap Original / libvips / usage-ruby-vips-wrap-translation Passed
Shifts a synthetic single-band test image by a non-trivial offset using Vips::Image#wrap and verifies that pixels reappear on the opposite edge as expected from the wrap-around semantics.
ruby-vips writes buffer Original / libvips / usage-ruby-vips-write-buffer Passed
ruby-vips generated write memory Original / libvips / usage-ruby-vips-write-memory-generated Passed
ruby-vips write and read PNG Original / libvips / usage-ruby-vips-write-read-png Passed
ruby-vips xyz bands Original / libvips / usage-ruby-vips-xyz-bands-batch11 Passed
ruby-vips colourspace XYZ to LAB Original / libvips / usage-ruby-vips-xyz-to-lab Passed
Builds a synthetic XYZ image with the D65 white point reference (X=95.047, Y=100, Z=108.883) and converts it to LAB via Vips::Image#colourspace, verifying L* lands at 100 and a*/b* land near zero.
ruby-vips generated zoom Original / libvips / usage-ruby-vips-zoom-generated Passed
CVE-2021-27847 libvips regression Original / libvips / cve-2021-27847 Passed
Asserts that vips_eye and vips_mask reject pathological geometry parameters that would historically drive a divide-by-zero in eye.c / mask.c instead of crashing the process.
CVE-2023-40032 libvips regression Original / libvips / cve-2023-40032 Passed
Asserts that vips rejects an SVG input containing a malformed UTF-8 sequence in a text element without segfaulting during text parsing.
CVE-2026-3146 libvips regression Original / libvips / cve-2026-3146 Passed
Asserts that vips_foreign_load_matrix_header rejects an empty matrix-format input file without dereferencing the missing header pointer.
CVE-2026-3284 libvips regression Original / libvips / cve-2026-3284 Passed
Asserts that vips extract_area rejects coordinates whose left+width or top+height arithmetic would overflow rather than producing a corrupted slice from the integer-overflow path.
libvips C API compile smoke Port / libvips / c-api-compile-smoke Passed
Vips introspection smoke Port / libvips / gir-introspection-smoke Passed
vips metadata header checks Port / libvips / metadata-header-checks Passed
vipsthumbnail behavior Port / libvips / thumbnail-behavior Passed
vips CLI load save Port / libvips / vips-cli-load-save Passed
ruby-vips abs of signed image Port / libvips / usage-ruby-vips-abs-of-signed-image Passed
Casts a uchar image to signed char, subtracts a constant to introduce negative pixel values, then applies Vips::Image#abs and verifies that all output pixels are non-negative and equal to the magnitude of the signed input.
ruby-vips generated add constant Port / libvips / usage-ruby-vips-add-constant-generated Passed
ruby-vips generated add constant tenth Port / libvips / usage-ruby-vips-add-constant-tenth Passed
Adds a scalar constant to a generated image with ruby-vips in the tenth batch and verifies each output pixel equals the input plus the constant.
ruby-vips generated add image Port / libvips / usage-ruby-vips-add-image-generated Passed
ruby-vips affine 90 degree rotation Port / libvips / usage-ruby-vips-affine-rotation Passed
Rotates a generated image by 90 degrees with the affine operator and verifies that pixel positions are swapped accordingly.
ruby-vips affine shear transform Port / libvips / usage-ruby-vips-affine-shear Passed
Applies a horizontal shear via Vips::Image#affine with matrix [1, 0.5, 0, 1] to a small uchar image and verifies the output canvas is wider than the original while preserving the band count, then writes the result to PNG and reloads it.
ruby-vips image multiply and divide arithmetic Port / libvips / usage-ruby-vips-arithmetic-multiply-divide Passed
Combines two synthetic images with multiply and divide and confirms exact pixel values via getpoint.
ruby-vips arrayjoin 2x2 grid Port / libvips / usage-ruby-vips-arrayjoin-grid Passed
Combines four single-band tiles into a 2x2 grid via Vips::Image.arrayjoin with across:2 and verifies grid dimensions and per-quadrant pixel values.
ruby-vips arrayjoin vertical stack with across:1 Port / libvips / usage-ruby-vips-arrayjoin-vertical-stack Passed
Stacks three single-band tiles vertically by passing across:1 to Vips::Image.arrayjoin and verifies that the resulting image is one tile wide, three tiles tall, and that the per-tile bands appear in the expected vertical positions.
ruby-vips autorot identity on unrotated image Port / libvips / usage-ruby-vips-autorot-no-orientation Passed
Loads a synthetic image written via Vips::Image#write_to_file and verifies that Vips::Image#autorot is a no-op when the image carries no EXIF orientation tag, preserving width, height, and exact pixel values.
ruby-vips average image Port / libvips / usage-ruby-vips-average-image Passed
ruby-vips average generated image Port / libvips / usage-ruby-vips-avg-generated Passed
ruby-vips generated avg scalar Port / libvips / usage-ruby-vips-avg-scalar-generated Passed
Computes the scalar avg of a generated image with ruby-vips and verifies the mean matches the arithmetic average of the pixel values.
ruby-vips generated bitwise and Port / libvips / usage-ruby-vips-bandbool-and-generated Passed
Combines two generated images with ruby-vips bitwise AND and verifies the per-pixel bitwise minimum payload.
ruby-vips bandfold and bandunfold round-trip Port / libvips / usage-ruby-vips-bandfold-roundtrip Passed
Folds a wide single-band image into a multi-band image with Vips::Image#bandfold(factor: 3), verifies the resulting width and band count, then unfolds it back and checks that the round-trip restores the original layout pixel-for-pixel.
ruby-vips bandjoin constant Port / libvips / usage-ruby-vips-bandjoin-constant Passed
ruby-vips bandjoin then extract_band roundtrip Port / libvips / usage-ruby-vips-bandjoin-extract-roundtrip Passed
Joins three single-band images, extracts each band back out, and verifies the recovered scalar values.
ruby-vips generated bandjoin image Port / libvips / usage-ruby-vips-bandjoin-image-generated Passed
Bandjoins two generated grayscale images with ruby-vips and verifies the resulting multiband channel payload.
ruby-vips bandjoin image Port / libvips / usage-ruby-vips-bandjoin-image Passed
ruby-vips bandjoin three Port / libvips / usage-ruby-vips-bandjoin-three Passed
ruby-vips bandmean generated Port / libvips / usage-ruby-vips-bandmean-generated Passed
Computes a band-mean image from generated RGB data with ruby-vips and verifies the result becomes single-band.
ruby-vips RGB bandmean Port / libvips / usage-ruby-vips-bandmean-rgb-batch11 Passed
ruby-vips generated bitwise or Port / libvips / usage-ruby-vips-bandor-generated Passed
Combines two generated images with ruby-vips bitwise OR and verifies the per-pixel bitwise union payload.
ruby-vips bandrank computes per-pixel median across images Port / libvips / usage-ruby-vips-bandrank-median Passed
Stacks three single-band images via Vips::Image#bandrank and verifies the per-pixel result equals the elementwise median of the inputs at multiple sample locations, including pixels where the median is the smallest, middle, or largest input.
ruby-vips generated bandsplit Port / libvips / usage-ruby-vips-bandsplit-generated Passed
ruby-vips generated bandsplit three Port / libvips / usage-ruby-vips-bandsplit-three-generated Passed
Calls bandsplit on a generated three-band image with ruby-vips and verifies it returns three single-band images with the original per-channel values.
ruby-vips black dimensions Port / libvips / usage-ruby-vips-black-dimensions-batch11 Passed
ruby-vips boolean AND between two images Port / libvips / usage-ruby-vips-boolean-and-image Passed
Builds two single-band uchar images with distinct bit patterns and verifies that Vips::Image#boolean(:and) computes the per-pixel bitwise AND of the two inputs at every sample position.
ruby-vips canny edge detection Port / libvips / usage-ruby-vips-canny-edges Passed
Runs Vips::Image#canny on a synthetic image with a hard vertical edge and verifies the response is non-zero along the edge and zero in flat regions.
ruby-vips cast to double preserves precision Port / libvips / usage-ruby-vips-cast-double-precision Passed
Casts a uchar image divided by a non-power-of-two scalar to :double and verifies the result reports the double format and preserves a fractional pixel value beyond uchar precision.
ruby-vips generated cast int Port / libvips / usage-ruby-vips-cast-int-generated Passed
Casts a generated uchar image to int format with ruby-vips and verifies the resulting image reports the int pixel format.
ruby-vips casts image Port / libvips / usage-ruby-vips-cast-uchar Passed
ruby-vips ceil on fractional pixels Port / libvips / usage-ruby-vips-ceil-fractional Passed
Applies Vips::Image#ceil to a synthetic float image with positive and negative fractional values and verifies ceil rounds toward positive infinity for each sampled pixel.
ruby-vips colourspace sRGB to B_W Port / libvips / usage-ruby-vips-colourspace-bw Passed
Converts an sRGB image to B_W with colourspace and verifies the result has a single band plus a plausible luminance value.
ruby-vips colourspace HSV round trip Port / libvips / usage-ruby-vips-colourspace-hsv-roundtrip Passed
Converts an sRGB image to HSV with Vips::Image#colourspace and back to sRGB, verifying that band count is preserved and that the round-tripped pixels remain close to the originals.
ruby-vips complexform pairs bands and complexget extracts real Port / libvips / usage-ruby-vips-complex-form-real Passed
Builds a complex-valued image from two real-valued single-band images via Vips::Image#complexform (the libvips operation name is one word; complex_form is not a registered operation) and verifies that complexget(:real) recovers the original real channel pixel-for-pixel.
ruby-vips composite over with alpha Port / libvips / usage-ruby-vips-composite-over Passed
Composites a translucent overlay over an opaque background with mode :over and confirms band count plus center pixel blending.
ruby-vips conv with custom kernel matrix Port / libvips / usage-ruby-vips-conv-custom-kernel Passed
Convolves a uniform image with a 3x3 box-blur kernel built via Vips::Image.new_from_array and verifies the result preserves the original constant value.
ruby-vips generated copy resolution Port / libvips / usage-ruby-vips-copy-resolution-generated Passed
Copies a generated image with ruby-vips while overriding its resolution metadata and verifies the new xres and yres values.
ruby-vips countlines vertical transitions Port / libvips / usage-ruby-vips-countlines-vertical Passed
Builds a small binary image containing a known number of horizontal stripe transitions and verifies that Vips::Image#countlines reports the expected count for vertical-direction line counting.
ruby-vips create image Port / libvips / usage-ruby-vips-create-image Passed
ruby-vips crop generated image Port / libvips / usage-ruby-vips-crop-generated Passed
ruby-vips crop image Port / libvips / usage-ruby-vips-crop-image Passed
ruby-vips crop sample JPEG Port / libvips / usage-ruby-vips-crop-sample-jpeg Passed
ruby-vips generated deviate zero Port / libvips / usage-ruby-vips-deviate-zero-generated Passed
Computes the deviate (standard deviation) of a uniform generated image with ruby-vips and verifies the result is essentially zero.
ruby-vips morphological dilate with 3x3 square mask Port / libvips / usage-ruby-vips-dilate-cross-mask Passed
Dilates a binary image containing a single white pixel with a 3x3 all-255 square structuring element via Vips::Image#dilate and verifies the result is exactly a 3x3 square stamped at the original location. (A 4-connected cross mask cannot be expressed in vips morph without rewriting the don't-care/must-not-be-set flags, which is a different behaviour; the square dilation of a single bright pixel is the canonical dilation case.)
ruby-vips generated divide constant Port / libvips / usage-ruby-vips-divide-constant-generated Passed
Divides a generated image by a scalar constant with ruby-vips and verifies the resulting pixel values.
ruby-vips draw_circle on a mutable image Port / libvips / usage-ruby-vips-draw-circle-mutable Passed
Mutates an image in place via Vips::MutableImage#draw_circle and verifies the centre and an off-circle pixel reflect the painted ink and untouched background respectively.
ruby-vips draw_line on a mutable image Port / libvips / usage-ruby-vips-draw-line-mutable Passed
Mutates a black canvas via Vips::MutableImage#draw_line! to paint a horizontal stroke and verifies pixels along the stroke carry the painted ink while pixels off the stroke remain at the background value.
ruby-vips draw_rect filled rectangle Port / libvips / usage-ruby-vips-draw-rect-mutable Passed
Paints a filled rectangle on a mutable canvas via Vips::MutableImage#draw_rect! and verifies that pixels strictly inside the rectangle carry the ink while pixels just outside the rectangle remain at the background value.
ruby-vips embed background Port / libvips / usage-ruby-vips-embed-background-batch11 Passed
ruby-vips embed extend background color Port / libvips / usage-ruby-vips-embed-extend-background-color Passed
Embeds a 3-band sRGB image onto a larger canvas using Vips::Image#embed with extend :background and a non-default RGB triple, then verifies the canvas border carries the requested color while the original payload sits at the requested offset.
ruby-vips embed extend copy and white Port / libvips / usage-ruby-vips-embed-extend-modes Passed
Embeds a small image onto a larger canvas using extend copy and extend white modes and asserts boundary pixel values.
ruby-vips embed generated image Port / libvips / usage-ruby-vips-embed-generated Passed
Embeds a generated image inside a larger canvas with ruby-vips and verifies the expanded output size.
ruby-vips morphological erode with 3x3 square mask Port / libvips / usage-ruby-vips-erode-cross-mask Passed
Erodes a binary image containing a centred 3x3 white block with a 3x3 all-255 square structuring element via Vips::Image#erode and verifies the eroded image keeps only the centre pixel. (A 4-connected cross mask requires don't-care semantics that vips morph does not implement, so the canonical 3x3 square erosion is used here.)
ruby-vips extract area generated Port / libvips / usage-ruby-vips-extract-area-generated Passed
Crops a generated image with ruby-vips extract_area and verifies the selected output dimensions.
ruby-vips generated extract band Port / libvips / usage-ruby-vips-extract-band-generated Passed
Extracts a selected band from a generated multiband image with ruby-vips and verifies the resulting grayscale payload.
ruby-vips extract_band range with n parameter Port / libvips / usage-ruby-vips-extract-band-range-n Passed
Builds a four-band image with distinct per-band constants, calls Vips::Image#extract_band(1, n: 2) to pull two contiguous bands, and verifies the resulting image has exactly two bands and the correct middle-band values at every pixel.
ruby-vips extract_band n=2 starting at offset 1 Port / libvips / usage-ruby-vips-extract-band-two-at-offset Passed
Builds a 4-band image with distinct per-band values and uses Vips::Image#extract_band with n=2 starting at band 1 to slice out a 2-band image, verifying band count and the surviving channel values.
ruby-vips extract band Port / libvips / usage-ruby-vips-extract-band Passed
ruby-vips extract corner Port / libvips / usage-ruby-vips-extract-corner-batch11 Passed
ruby-vips falsecolour expands grayscale to RGB Port / libvips / usage-ruby-vips-falsecolour-grayscale Passed
Applies Vips::Image#falsecolour to a single-band grayscale ramp and verifies the result is a three-band sRGB image of the same dimensions whose colours differ across distinct grayscale inputs.
ruby-vips find_trim bounding box Port / libvips / usage-ruby-vips-find-trim-bbox Passed
Embeds a smaller content rectangle inside a uniform background and verifies Vips::Image#find_trim returns the expected bounding box left/top/width/height tuple.
ruby-vips find_trim with custom threshold Port / libvips / usage-ruby-vips-find-trim-custom-threshold Passed
Embeds a slightly off-background content rectangle inside a near-uniform canvas and uses Vips::Image#find_trim with an explicit threshold parameter to verify that the bounding box only includes pixels that exceed the threshold delta.
ruby-vips flatten alpha Port / libvips / usage-ruby-vips-flatten-alpha Passed
ruby-vips flatten background Port / libvips / usage-ruby-vips-flatten-background Passed
Flattens a generated RGBA image onto a solid background with ruby-vips and verifies the alpha channel is removed.
ruby-vips flatten white Port / libvips / usage-ruby-vips-flatten-white-batch11 Passed
ruby-vips generated flip horizontal Port / libvips / usage-ruby-vips-flip-horizontal-generated Passed
ruby-vips generated flip vertical Port / libvips / usage-ruby-vips-flip-vertical-generated Passed
ruby-vips horizontal flip sample Port / libvips / usage-ruby-vips-fliphor-sample Passed
Flips the bundled PNG sample horizontally with ruby-vips and verifies the image dimensions stay unchanged.
ruby-vips vertical flip sample Port / libvips / usage-ruby-vips-flipver-sample Passed
Flips the bundled PNG sample vertically with ruby-vips and verifies the image dimensions stay unchanged.
ruby-vips floor on fractional pixels Port / libvips / usage-ruby-vips-floor-fractional Passed
Applies Vips::Image#floor to a synthetic float image with positive and negative fractional values and verifies floor rounds toward negative infinity for each sampled pixel.
ruby-vips gamma with explicit exponent Port / libvips / usage-ruby-vips-gamma-explicit-exponent Passed
Applies Vips::Image#gamma with an explicit exponent of 2.2 to a uniform grey image and verifies the result is brighter than the input via avg().
ruby-vips Gaussian blur image Port / libvips / usage-ruby-vips-gaussblur-image Passed
ruby-vips gaussblur sample Port / libvips / usage-ruby-vips-gaussblur-sample Passed
Applies Gaussian blur to a PNG fixture with ruby-vips and verifies the dimensions stay constant.
ruby-vips gaussmat kernel image Port / libvips / usage-ruby-vips-gaussmat-kernel Passed
Generates a Gaussian kernel image with Vips::Image.gaussmat, verifies it is square with odd side length, that its peak value sits at the centre, and that the kernel is symmetric under horizontal flip.
ruby-vips gaussnoise generator Port / libvips / usage-ruby-vips-gaussnoise-generator Passed
Creates a Gaussian-noise image with Vips::Image.gaussnoise and verifies dimensions, band count, and that the per-pixel mean is close to the requested mean while the pixels themselves are not constant.
ruby-vips gravity east and west alignment Port / libvips / usage-ruby-vips-gravity-east-west Passed
Pads a 2x2 source image into a 4x4 canvas with Vips::Image#gravity using east and west placements and verifies the source pixels land vertically centred against the requested edge.
ruby-vips generated gravity crop Port / libvips / usage-ruby-vips-gravity-generated Passed
Crops a generated grayscale image with ruby-vips gravity and verifies the centered pixel payload.
ruby-vips gravity placement directions Port / libvips / usage-ruby-vips-gravity-placement Passed
Pads a small image with Vips::Image.gravity using north-west and south-east placements and verifies that the original pixels land in the expected corners.
ruby-vips grid relays a tall image into tiles Port / libvips / usage-ruby-vips-grid-tile-layout Passed
Stacks four 6x6 tiles vertically via arrayjoin then uses Vips::Image#grid to relay them into a 2x2 layout, verifying final dimensions and per-tile sentinel pixels.
ruby-vips hist_cum produces cumulative histogram Port / libvips / usage-ruby-vips-hist-cum-cumulative Passed
Computes the histogram of a small grayscale image with hist_find and applies hist_cum, verifying the cumulative histogram is monotonically non-decreasing across all 256 bins and that the final bin equals the total pixel count.
ruby-vips histogram equalisation Port / libvips / usage-ruby-vips-hist-equal-histogram Passed
Builds a low-contrast synthetic image, applies Vips::Image#hist_equal, and verifies the equalised image keeps shape and bands while spreading pixel values to a wider range than the input.
ruby-vips hist_local local histogram equalisation Port / libvips / usage-ruby-vips-hist-local-equalisation Passed
Builds a 32x32 low-contrast image, applies Vips::Image#hist_local with a 7x7 window, and verifies the result preserves dimensions and band count while spreading pixel values across a wider range than the input.
ruby-vips hist_norm stretch to full range Port / libvips / usage-ruby-vips-hist-norm-stretch Passed
Builds a low-contrast 8-bit image, applies Vips::Image#hist_norm, and verifies that the normalised image has the same dimensions and band count as the input while spanning a noticeably wider value range than the source.
ruby-vips histogram image Port / libvips / usage-ruby-vips-histogram-image Passed
ruby-vips ifthenelse with computed comparison condition Port / libvips / usage-ruby-vips-ifthenelse-comparison-mask Passed
Builds a single-band gradient image, derives the boolean condition mask from a relational comparison, and uses Vips::Image#ifthenelse to select between two single-band sources, verifying the per-pixel selection follows the comparison.
ruby-vips generated ifthenelse Port / libvips / usage-ruby-vips-ifthenelse-generated Passed
Applies ruby-vips ifthenelse to generated mask and image inputs and verifies the selected pixel payload.
ruby-vips ifthenelse with two multi-band source images Port / libvips / usage-ruby-vips-ifthenelse-multiband-sources Passed
Builds a 1-band mask with two distinct regions plus two 3-band sRGB source images and uses Vips::Image#ifthenelse to splice the sources, verifying per-region pixel triples and the band count of the composited output.
ruby-vips insert corner Port / libvips / usage-ruby-vips-insert-corner-batch11 Passed
ruby-vips generated overlay insert Port / libvips / usage-ruby-vips-insert-generated-overlay Passed
ruby-vips insert generated image Port / libvips / usage-ruby-vips-insert-generated Passed
Inserts a smaller synthetic image into a base canvas with ruby-vips and verifies the output dimensions.
ruby-vips invert image Port / libvips / usage-ruby-vips-invert-image Passed
ruby-vips invert twice equals identity Port / libvips / usage-ruby-vips-invert-roundtrip-identity Passed
Inverts a synthetic uchar image twice via Vips::Image#invert and asserts the result equals the original pixel-for-pixel by checking the max of the absolute difference is zero.
ruby-vips horizontal join Port / libvips / usage-ruby-vips-join-horizontal Passed
ruby-vips generated vertical join Port / libvips / usage-ruby-vips-join-vertical-generated Passed
Joins two generated images vertically with ruby-vips and verifies the stacked pixel payload and output dimensions.
ruby-vips JPEG buffer round trip Port / libvips / usage-ruby-vips-jpeg-buffer-roundtrip Passed
ruby-vips JPEG buffer Port / libvips / usage-ruby-vips-jpeg-buffer Passed
ruby-vips JPEG file output Port / libvips / usage-ruby-vips-jpeg-file-output Passed
ruby-vips JPEG quality buffer roundtrip Port / libvips / usage-ruby-vips-jpeg-quality-buffer Passed
Encodes a synthetic image to JPEG buffers at two quality levels, confirms the high-quality buffer is larger, and reloads each via new_from_buffer.
ruby-vips colourspace LAB to XYZ Port / libvips / usage-ruby-vips-lab-to-xyz Passed
Builds a synthetic LAB image with known L*=50, a*=0, b*=0 and converts it to XYZ via Vips::Image#colourspace, verifying band count, interpretation, and that Y lands close to the published value for a neutral 50%% lightness.
ruby-vips linear constant Port / libvips / usage-ruby-vips-linear-constant Passed
ruby-vips linear image Port / libvips / usage-ruby-vips-linear-image Passed
ruby-vips linear offset Port / libvips / usage-ruby-vips-linear-offset-batch11 Passed
ruby-vips math log followed by exp roundtrip Port / libvips / usage-ruby-vips-math-log-exp Passed
Applies Vips::Image#math(:log) to a positive double image and then math(:exp) to the result, verifying that the recovered values match the original samples within floating-point tolerance.
ruby-vips math sin and cos in degrees Port / libvips / usage-ruby-vips-math-sin-cos Passed
Builds a single-band float image holding angles in degrees and verifies that Vips::Image#math with :sin and :cos produces values matching Ruby's Math.sin and Math.cos at multiple sample angles within floating-point tolerance.
ruby-vips matrixload reads external matrix file Port / libvips / usage-ruby-vips-matrixload-external-file Passed
Writes a small 3x2 matrix to disk in libvips matrix-text format, loads it back through Vips::Image.matrixload, and verifies dimensions plus individual cell values via getpoint.
ruby-vips generated max Port / libvips / usage-ruby-vips-max-generated Passed
ruby-vips generated max scalar Port / libvips / usage-ruby-vips-max-scalar-generated Passed
Computes the scalar max of a generated three-pixel image with ruby-vips and verifies it returns the largest pixel value.
ruby-vips measure colour chart patches Port / libvips / usage-ruby-vips-measure-grid-patches Passed
Builds a synthetic four-patch grayscale chart, measures it with Vips::Image#measure(4, 1), and verifies that the returned matrix carries one row per patch with the expected mean intensities.
ruby-vips PNG memory roundtrip Port / libvips / usage-ruby-vips-memory-png-roundtrip-batch11 Passed
ruby-vips PPM memory roundtrip Port / libvips / usage-ruby-vips-memory-ppm-roundtrip-batch11 Passed
ruby-vips generated min Port / libvips / usage-ruby-vips-min-generated Passed
ruby-vips generated min scalar Port / libvips / usage-ruby-vips-min-scalar-generated Passed
Computes the scalar min of a generated three-pixel image with ruby-vips and verifies it returns the smallest pixel value.
ruby-vips generated multiply constant Port / libvips / usage-ruby-vips-multiply-constant-generated Passed
ruby-vips generated multiply constant tenth Port / libvips / usage-ruby-vips-multiply-constant-tenth Passed
Multiplies a generated image by a scalar constant with ruby-vips in the tenth batch and verifies each output pixel equals the input scaled by the constant.
ruby-vips new_from_array pixel payload Port / libvips / usage-ruby-vips-new-from-array-pixels Passed
Builds a small image with Vips::Image.new_from_array and verifies dimensions and per-pixel values via getpoint.
ruby-vips PNG buffer round trip Port / libvips / usage-ruby-vips-png-buffer-roundtrip Passed
ruby-vips PNG file output Port / libvips / usage-ruby-vips-png-file-output Passed
Saves a synthetic PNG with ruby-vips, reloads it, and verifies the output file is nonempty and decodable.
ruby-vips premultiply unpremultiply roundtrip Port / libvips / usage-ruby-vips-premultiply-roundtrip Passed
Premultiplies an RGBA image and unpremultiplies the result, verifying that the recovered RGB values match the original within rounding tolerance.
ruby-vips profile reports first non-zero pixel positions Port / libvips / usage-ruby-vips-profile-first-non-zero Passed
Builds a synthetic image with a single off-axis bright pixel and uses Vips::Image#profile to obtain the per-row/per-column index of the first non-zero pixel, verifying both the column and row profiles match the expected coordinates.
ruby-vips project row and column sums Port / libvips / usage-ruby-vips-project-row-column-sums Passed
Builds a small grayscale image with known per-row and per-column sums, calls Vips::Image#project, and verifies that the returned columns image is one row tall, the rows image is one column wide, and that the sums match the analytic expectations.
ruby-vips boolean_const bitwise AND with scalar mask Port / libvips / usage-ruby-vips-r10-boolean-const-andconst Passed
Applies Vips::Image#boolean_const(:and, [0x0F]) to mask the low nibble of a uint8 image and verifies the output bytes equal the bitwise AND of each sample with the scalar.
ruby-vips buildlut interpolates piecewise control points Port / libvips / usage-ruby-vips-r10-buildlut-piecewise Passed
Builds a 256-entry LUT from three control points via Vips::Image.buildlut and verifies the LUT exactly matches the control values at the input rows and linearly interpolates between them.
ruby-vips byteswap on 16-bit data is its own inverse Port / libvips / usage-ruby-vips-r10-byteswap-uint16-roundtrip Passed
Constructs a uint16 image, applies Vips::Image#byteswap twice, and verifies the round-trip restores the original samples while a single byteswap reorders the byte pairs.
ruby-vips compass directional edge response Port / libvips / usage-ruby-vips-r10-compass-edge-detect Passed
Convolves a step-edge image with a horizontal-derivative mask via Vips::Image#compass and verifies the maximum response sits on the edge column rather than in the flat regions.
ruby-vips identity LUT maps inputs to themselves Port / libvips / usage-ruby-vips-r10-identity-lut-shape Passed
Builds an 8-bit identity LUT with Vips::Image.identity, verifies the dimensions are 256x1, and checks several sampled positions return their own index value.
ruby-vips mapim identity warp returns the input Port / libvips / usage-ruby-vips-r10-mapim-identity-warp Passed
Builds a two-band index image equal to (x, y) and verifies Vips::Image#mapim warps a 3x3 source through the identity coordinate map back to the original pixels.
ruby-vips morph binary erode shrinks foreground square Port / libvips / usage-ruby-vips-r10-morph-binary-erode Passed
Constructs a 5x5 binary image with a 3x3 foreground square and applies Vips::Image#morph with an erode 3x3 cross mask, verifying the foreground collapses to the centre pixel only.
ruby-vips relational_const less than scalar Port / libvips / usage-ruby-vips-r10-relational-const-lessconst Passed
Compares an integer image against a scalar threshold via Vips::Image#relational_const(:less, [...]) and verifies the output marks samples below the threshold with 255 and the rest with 0.
ruby-vips shrinkh horizontal-only block reduction Port / libvips / usage-ruby-vips-r10-shrinkh-horizontal Passed
Calls Vips::Image#shrinkh on a 4x1 row to reduce horizontally by a factor of 2 and verifies the two output samples equal the block means of the input.
ruby-vips zone test-pattern shape and centre symmetry Port / libvips / usage-ruby-vips-r10-zone-test-pattern Passed
Generates a zone-plate test pattern with Vips::Image.zone(64, 64) and verifies the result is a single-band 64x64 float-format image whose centre row exhibits left-right symmetry.
ruby-vips Image#add_alpha bumps a 3-band image to 4 bands with opaque alpha Port / libvips / usage-ruby-vips-r11-add-alpha-three-to-four-bands Passed
Bandjoins a 3-band uchar image and verifies Image#add_alpha yields a 4-band image whose new band is the type-max (255) opaque alpha.
ruby-vips Image#asin of 0.5 yields 30 degrees Port / libvips / usage-ruby-vips-r11-asin-half-degrees-thirty Passed
Builds a 4x4 image of constant 0.5 and verifies Image#asin returns 30 (vips asin emits degrees, not radians) within 1e-6 tolerance.
ruby-vips Image#bandeor xors all bands together Port / libvips / usage-ruby-vips-r11-bandeor-yields-bitwise-xor Passed
Builds a 1x1 two-band image with bytes 0xff and 0x0f and verifies Image#bandeor returns the single-band byte 0xf0 (bitwise xor).
ruby-vips Image#cosh of zero yields one Port / libvips / usage-ruby-vips-r11-cosh-zero-equals-one Passed
Builds a 4x4 zero image as double and verifies Image#cosh returns the constant 1.0 (per the identity cosh(0)=1) within 1e-9 tolerance.
ruby-vips fwfft followed by invfft preserves the input mean Port / libvips / usage-ruby-vips-r11-fwfft-invfft-roundtrip Passed
Computes the forward FFT of a constant-100 8x8 double image then the inverse FFT and verifies the real component recovers the constant 100 within 1e-6.
ruby-vips Image#log10 of 100 yields 2 Port / libvips / usage-ruby-vips-r11-log10-hundred-equals-two Passed
Builds a 4x4 constant-100 double image and verifies Image#log10 returns the constant 2.0 (per log10(100)=2) within 1e-9 tolerance.
ruby-vips Image#maxpos returns value and (x,y) of brightest pixel Port / libvips / usage-ruby-vips-r11-maxpos-locates-bright-pixel Passed
Draws a single 255 pixel at column 7 row 2 on a black 10x10 canvas and verifies Image#maxpos returns the triple [255, 7, 2].
ruby-vips Image#minpos returns value and (x,y) of darkest pixel Port / libvips / usage-ruby-vips-r11-minpos-locates-dark-pixel Passed
Draws a single 0 pixel at column 3 row 4 on a uniform-100 10x10 canvas and verifies Image#minpos returns the triple [0, 3, 4].
ruby-vips Image#scaleimage normalizes a 2x3 ramp to the full 0..255 uchar range Port / libvips / usage-ruby-vips-r11-scaleimage-normalizes-to-uchar Passed
Builds a 2x3 integer ramp 10..60 via Image.new_from_array and verifies Image#scaleimage emits a uchar image whose extrema are exactly 0 and 255.
ruby-vips Image#similarity at 45 degrees grows the bounding box from 8x8 to 11x11 Port / libvips / usage-ruby-vips-r11-similarity-rotate-45-bbox Passed
Rotates an 8x8 constant image via Image#similarity(angle: 45) and verifies the output bounding box is 11x11 (ceil(8*sqrt(2)) = 12 minus the 1-pixel inner overlap that vips emits).
ruby-vips Image#+ on identical images doubles each pixel value Port / libvips / usage-ruby-vips-r12-add-image-doubles-pixel-values Passed
Builds a 4x4 constant-50 uchar image and verifies (img + img).avg returns 100.0 within 1e-9, asserting libvips elementwise addition behaves as expected when the operands are identical buffers and the format is promoted to short to hold the sum without overflow.
ruby-vips Image#colourspace srgb to b-w yields a single-band image Port / libvips / usage-ruby-vips-r12-colourspace-srgb-to-bw-one-band Passed
Builds a 3-band uchar sRGB image with green-dominant pixels and verifies Image#colourspace(:b_w) returns a 1-band image whose mean is in (0, 255), asserting the libvips greyscale conversion path is exercised through the Ruby colour transform binding.
ruby-vips Image#composite2 over preserves the base image dimensions and bands Port / libvips / usage-ruby-vips-r12-composite-over-yields-input-bands Passed
Builds two 16x16 RGBA uchar images and verifies base.composite2(top, :over) yields an output of the same width, height, and 4 bands, asserting libvips' default 'over' alpha compositor returns a buffer matching the base layer's geometry.
ruby-vips Image#dilate with a 3x3 ones mask grows a single hot pixel to a 3x3 block Port / libvips / usage-ruby-vips-r12-dilate-grows-single-pixel Passed
Builds a 7x7 black image with a single 255 pixel at (3,3), morphs dilate with a 3x3 ones structuring element, and verifies the four-neighbours of the original pixel are all 255, asserting libvips morphology dilates points under a flat mask.
ruby-vips Image#erode with a 3x3 ones mask shrinks a single-pixel hot dot to zero Port / libvips / usage-ruby-vips-r12-erode-removes-pepper-pixel Passed
Builds a 7x7 black uchar image with a single 255 pixel at (3,3), morphs erode with a 3x3 ones structuring element, and verifies the centre pixel becomes 0, asserting libvips morphology erodes isolated pixels under a flat mask.
ruby-vips Image#gaussblur preserves the mean of a uniform image within 1.0 Port / libvips / usage-ruby-vips-r12-gaussblur-preserves-mean Passed
Builds an 8x8 constant-100 uchar image, applies Image#gaussblur(2.0), and verifies the output's mean stays within 1.0 of the original 100, asserting libvips Gaussian blur is mean-preserving on a uniform input.
ruby-vips Image#linear(2, 5) maps mean 10 to 25 Port / libvips / usage-ruby-vips-r12-linear-affine-mean-shift Passed
Builds a 5x5 constant-10 uchar image and verifies linear(a:2, b:5).avg == 25.0 exactly, asserting libvips' affine pixel transform applies a*x+b uniformly across the band.
ruby-vips Image#* by 3 triples a constant-10 image to mean 30 Port / libvips / usage-ruby-vips-r12-multiply-constant-three-triples-mean Passed
Builds a 6x4 constant-10 uchar image and verifies (img * 3).avg == 30.0 exactly, asserting libvips scalar multiplication promotes safely and produces the expected arithmetic mean.
ruby-vips Image#resize 0.5 halves both dimensions of a 40x20 image to 20x10 Port / libvips / usage-ruby-vips-r12-resize-half-shape Passed
Builds a 40x20 constant uchar image and verifies Image#resize(0.5).width == 20 and .height == 10, asserting libvips' resize honours the scalar scale factor in both axes.
ruby-vips Image#sharpen preserves the mean of a uniform LAB image Port / libvips / usage-ruby-vips-r12-sharpen-preserves-mean Passed
Builds an 8x8 sRGB constant image, converts to LAB-PQ format, applies Image#sharpen, converts back to sRGB and verifies the mean stays within 2 units of the original, asserting libvips' unsharp mask is mean-preserving on a uniform input.
ruby-vips bandjoin of three single-band uchar images yields a 3-band image with stacked pixels Port / libvips / usage-ruby-vips-r13-bandjoin-three-uchar-bands Passed
Builds three 3x3 single-band uchar images of constants 11, 22, 33, joins them with bandjoin, and verifies the resulting image has bands == 3 and getpoint(1, 1) returns [11.0, 22.0, 33.0], asserting libvips stacks the operands in band order.
ruby-vips Image#cast(:ushort) promotes the format from uchar to ushort Port / libvips / usage-ruby-vips-r13-cast-uchar-to-ushort-promotes-format Passed
Builds a 4x4 uchar image with constant 100, casts to :ushort, and verifies the cast image's format is :ushort and the mean is still 100.0, asserting libvips Cast widens the storage without scaling the pixel values.
ruby-vips Image#cast(:float) preserves the mean when widening from ushort Port / libvips / usage-ruby-vips-r13-cast-ushort-to-float-keeps-mean Passed
Builds a 4x4 ushort image with constant 1000, casts to :float, and verifies the cast image's format is :float and the mean is still 1000.0, asserting libvips Cast to float widens the storage without scaling the pixel values.
ruby-vips Image#embed places a 4x4 image into a 10x10 canvas at offset (3,3) Port / libvips / usage-ruby-vips-r13-embed-extends-to-larger-canvas Passed
Builds a 4x4 single-band uchar image of constant 200 and verifies embed(3, 3, 10, 10) returns an image with width == 10 and height == 10, asserting libvips' embed produces the expected canvas dimensions when extending with the default background.
ruby-vips Image#extract_area pulls a 2x2 region with the requested width and height Port / libvips / usage-ruby-vips-r13-extract-area-2x2-from-corner Passed
Builds an 8x8 constant uchar image and verifies extract_area(1, 2, 2, 2).width == 2 and .height == 2, asserting libvips' rectangle-extract honours the (left, top, width, height) arguments.
ruby-vips extract_band(1) on a 3-band image returns the middle band as a 1-band image Port / libvips / usage-ruby-vips-r13-extract-band-index-one-of-three Passed
Builds a 3-band image by bandjoining constants 10, 20, 30, calls extract_band(1), and verifies the result has bands == 1 and getpoint(0, 0) == [20.0], asserting libvips' band slicing returns the requested zero-indexed channel.
ruby-vips two horizontal flips restore the original byte order Port / libvips / usage-ruby-vips-r13-flip-horizontal-restores-via-double-flip Passed
Builds a 1x3 single-band uchar image with values [10, 20, 30] and verifies that two consecutive flip(:horizontal) calls restore the original write_to_memory bytes [10, 20, 30], asserting libvips horizontal flip is its own inverse.
ruby-vips write_to_file then new_from_file roundtrip a 12x8 JPEG Port / libvips / usage-ruby-vips-r13-jpeg-file-write-then-read-back Passed
Saves a 12x8 single-band uchar image to a JPEG file via write_to_file and verifies the on-disk file is non-empty, then reloads it with Vips::Image.new_from_file and asserts the reload preserves the 12x8 dimensions, exercising the libvips JPEG file IO path.
ruby-vips write_to_buffer(.png) followed by new_from_buffer recovers width and height Port / libvips / usage-ruby-vips-r13-png-buffer-roundtrip-via-bytes Passed
Builds a 5x4 single-band uchar image, writes a PNG to an in-memory buffer with write_to_buffer('.png'), reloads the buffer with Vips::Image.new_from_buffer, and verifies the reload preserves the original 5x4 dimensions, asserting the libvips PNG buffer roundtrip without disk IO.
ruby-vips two rot180 calls return the original 2x2 pixel buffer Port / libvips / usage-ruby-vips-r13-rot180-roundtrip-identity Passed
Builds a 2x2 single-band uchar image with bytes [1, 2, 3, 4] and verifies rot180.rot180.write_to_memory.bytes is again [1, 2, 3, 4], asserting libvips' 180-degree rotation is its own inverse on a square buffer.
ruby-vips Image#copy_memory preserves dimensions, bands, and mean Port / libvips / usage-ruby-vips-r14-copy-memory-preserves-shape-and-mean Passed
Builds a 7x5 single-band uchar constant image, calls Vips::Image#copy_memory to materialise it into RAM, and verifies the returned image has the same dimensions, band count, and average pixel value as the source, asserting libvips' copy_memory marker is value-preserving and does not change the image's logical shape.
ruby-vips Image.gaussmat produces a square mask with an odd side length Port / libvips / usage-ruby-vips-r14-gaussmat-square-odd-side Passed
Generates a Gaussian kernel image with Vips::Image.gaussmat(2.0, 0.1) and verifies the result is square (width == height), has odd side length, and the centre pixel value strictly exceeds the corner pixel, asserting libvips' Gaussian mask generator returns a peaked, symmetric kernel suitable for convolution.
ruby-vips Image.gaussnoise mean stays close to the requested target Port / libvips / usage-ruby-vips-r14-gaussnoise-mean-near-target Passed
Creates a 64x64 Gaussian noise image with mean=100 and sigma=15 via Vips::Image.gaussnoise and verifies dimensions are 64x64 with bands == 1, the per-pixel average is within +/-5 of the requested mean (broad tolerance for a stochastic generator), and the spread is non-zero (max > min after casting to uchar), asserting libvips emits a noise image with the requested distribution parameters.
ruby-vips Image.identity returns a 256x1 single-band uchar identity LUT Port / libvips / usage-ruby-vips-r14-identity-lut-256-by-1 Passed
Builds an 8-bit identity LUT with Vips::Image.identity and verifies the dimensions are 256x1, the band count is 1, and probing index 100 with getpoint returns 100.0, asserting libvips' identity LUT generator yields the canonical (x -> x) mapping.
ruby-vips Image#morph erode shrinks a 3x3 foreground square to its centre pixel Port / libvips / usage-ruby-vips-r14-morph-erode-shrinks-square-foreground Passed
Constructs a 9x9 binary single-band uchar image with a 3x3 foreground square (255) centred at (4,4) on a 0 background, applies Vips::Image#morph(cross, :erode) with a 3x3 cross-shaped structuring element, and verifies the centre pixel stays 255 while each of the four arm pixels of the original block fall to 0, asserting libvips' morph erode collapses the foreground exactly along the structuring element.
ruby-vips Image#rank with index 0 and 3x3 window picks the per-window minimum Port / libvips / usage-ruby-vips-r14-rank-min-of-3x3-window Passed
Builds a 5x5 uniform-grey single-band uchar image with a single pepper pixel of value 5 in the centre, applies Vips::Image#rank(3, 3, 0) (rank-0 of a 3x3 window is the minimum), and verifies the centre pixel becomes 5 (the pepper) and an unaffected far-corner pixel remains the background grey value, asserting libvips' rank operator selects the windowed minimum exactly.
ruby-vips Image#subsample(3, 3) reduces a 9x9 image to 3x3 Port / libvips / usage-ruby-vips-r14-subsample-by-three-shrinks-dimensions Passed
Builds a 9x9 single-band uchar constant image and applies Vips::Image#subsample(3, 3), verifying the result is 3x3 with bands == 1 and the average matches the source (since subsampling a constant image does not alter values), asserting libvips' subsample picks every Nth column/row exactly.
ruby-vips Image#tilecache preserves pixels through the cache stage Port / libvips / usage-ruby-vips-r14-tilecache-preserves-pixels Passed
Pushes a 6x6 single-band uchar image with a known per-pixel pattern through Vips::Image#tilecache(tile_width: 2, tile_height: 2, max_tiles: 9), then verifies dimensions are unchanged, bands are unchanged, and getpoint at three sampled coordinates returns the same values as the uncached source, asserting libvips' tilecache is value-preserving.
ruby-vips write_to_buffer('.jpg') with low Q is smaller than with high Q for noisy input Port / libvips / usage-ruby-vips-r14-write-to-buffer-jpeg-quality-affects-size Passed
Generates a 64x64 Gaussian noise image (which is incompressible enough that JPEG quality clearly impacts size), writes it to a JPEG buffer with Q=10 and Q=95 via write_to_buffer('.jpg', Q: ...), and verifies both buffers are non-empty and the Q=10 buffer is strictly smaller than the Q=95 buffer, asserting libvips honours the Q quality parameter on the JPEG encoder.
ruby-vips Image#zoom(3, 2) magnifies a 4x4 image to 12x8 Port / libvips / usage-ruby-vips-r14-zoom-3-by-2-magnifies-dimensions Passed
Builds a 4x4 single-band uchar constant image and applies Vips::Image#zoom(3, 2), verifying the result is 12x8 with bands == 1 and the average matches the source (since zooming a constant image is value-preserving), asserting libvips' zoom replicates each input pixel into an XxY block exactly.
ruby-vips Image#affine with the identity matrix preserves dimensions and mean Port / libvips / usage-ruby-vips-r15-affine-identity-preserves-dimensions Passed
Builds an 8x8 single-band uchar constant image, applies Vips::Image#affine([1, 0, 0, 1]) (the identity transform), and verifies the result has the same 8x8 dimensions, bands == 1, and the same mean as the source, asserting libvips' affine transform with the identity matrix is value-preserving and shape-preserving.
ruby-vips Image#cast(:uchar) clamps an out-of-range float pixel of 300 down to 255 Port / libvips / usage-ruby-vips-r15-cast-float-to-uchar-saturates-300-to-255 Passed
Builds a 4x4 single-band float image with constant 300 (well outside the uchar [0,255] range), casts to :uchar, and verifies the cast image's format is :uchar and the mean is 255.0, asserting libvips' Cast saturates over-range float values to the uchar maximum rather than wrapping or NaN-ing.
ruby-vips Image#cast(:double) widens uchar to double without scaling Port / libvips / usage-ruby-vips-r15-cast-uchar-to-double-keeps-mean Passed
Builds a 3x3 single-band uchar image with constant 70, casts to :double, and verifies the cast image's format is :double and the mean is still 70.0, asserting libvips Cast widens the storage from uchar to double without scaling the pixel values.
ruby-vips Image#deviate of a flat uchar image is exactly 0.0 Port / libvips / usage-ruby-vips-r15-deviate-flat-image-zero-stdev Passed
Builds a 4x4 single-band uchar image with constant 50 (zero variance) and verifies Vips::Image#deviate returns 0.0, asserting libvips' standard-deviation reducer is exactly zero on a constant image rather than a small floating-point epsilon.
ruby-vips Image / 2 halves the mean of a flat uchar image Port / libvips / usage-ruby-vips-r15-divide-by-two-halves-mean Passed
Builds a 4x4 single-band uchar image with constant 100, divides by 2 via the Ruby operator, and verifies the result's mean is 50.0, asserting libvips' arithmetic-divide on a uchar source halves the per-pixel value as expected.
ruby-vips Image#invert maps a flat uchar 30 image to a flat 225 image Port / libvips / usage-ruby-vips-r15-invert-uchar-30-becomes-225 Passed
Builds a 4x4 single-band uchar image with constant 30, applies Vips::Image#invert, and verifies the result has the same dimensions, bands == 1, and an average of 225.0 (i.e. 255 - 30), asserting libvips' invert performs the per-pixel uchar two's-complement-style negation 255 - x.
ruby-vips Image * 2 doubles the mean of a flat uchar image Port / libvips / usage-ruby-vips-r15-multiply-by-two-doubles-mean Passed
Builds a 4x4 single-band uchar image with constant 30, multiplies by 2 via the Ruby operator, and verifies the result's mean is 60.0, asserting libvips' arithmetic-multiply with a scalar doubles each per-pixel value as expected.
ruby-vips Image#rot90 chained four times restores the original dimensions and mean Port / libvips / usage-ruby-vips-r15-rot90-applied-four-times-equals-identity Passed
Builds an 8x8 single-band uchar constant image, applies Vips::Image#rot90 four times in succession, and verifies the result has the same 8x8 dimensions, bands == 1, and the same mean as the source, asserting libvips' 90-degree rotation composes to identity over four applications.
ruby-vips Image#min returns exactly the darkest pixel value of a deterministic image Port / libvips / usage-ruby-vips-r15-stats-min-matches-darkest-pixel Passed
Constructs a 5x5 single-band uchar image whose 25 pixel values are a deterministic permutation in [0, 200), verifies Vips::Image#min equals the analytic minimum computed in pure Ruby over the same pixel array (5.0 for ((i*11)+7) % 200 over i in 0..24), asserting libvips' min reducer agrees with the input pixel data.
ruby-vips write_to_buffer('.tif') then new_from_buffer recovers width and height Port / libvips / usage-ruby-vips-r15-tiff-buffer-write-then-read-back Passed
Builds a 6x5 single-band uchar image, writes a TIFF to an in-memory buffer with write_to_buffer('.tif'), reloads the buffer with Vips::Image.new_from_buffer, and verifies the reload preserves the original 6x5 dimensions, asserting the libvips TIFF buffer roundtrip without disk IO.
ruby-vips Image + scalar shifts the mean of a flat uchar image by the constant Port / libvips / usage-ruby-vips-r16-add-scalar-shifts-mean-by-constant Passed
Builds an 8x8 single-band uchar image with constant value 30, adds 25 via the Ruby operator, and asserts the result's mean is exactly 55.0 with identical 8x8 dimensions, exercising libvips' arithmetic-add with a scalar.
ruby-vips colourspace srgb to b_w reduces a 3-band image to a 1-band grayscale image Port / libvips / usage-ruby-vips-r16-colourspace-srgb-to-bw-one-band Passed
Builds a 6x6 three-band uchar image via bandjoin with constants (100, 150, 200), calls colourspace(:b_w, source_space: :srgb), and asserts the output image has bands 1 with 6x6 dimensions, exercising libvips' colour-space conversion from srgb to b_w (avoiding the unsupported :labs / :multiband routes).
ruby-vips Image#extract_area returns the requested subregion with exact width and height Port / libvips / usage-ruby-vips-r16-extract-area-window-dimensions Passed
Builds a 16x16 single-band uchar constant image, calls extract_area(3, 4, 6, 5), and asserts the resulting region has width 6, height 5, bands 1, and the same mean as the source — exercising libvips' extract_area operator with explicit offsets.
ruby-vips Image#insert places a small image into a canvas without changing canvas dimensions Port / libvips / usage-ruby-vips-r16-insert-at-offset-keeps-canvas-size Passed
Builds a 20x20 single-band uchar canvas with constant 10 and a 4x4 sub-image with constant 200, calls canvas.insert(sub, 5, 6), and asserts the result has width 20, height 20, bands 1, and a mean strictly greater than the canvas mean (10.0) — exercising libvips' insert operator with explicit offsets.
ruby-vips Image#invert maps a uchar constant 70 image to a uchar constant 185 image Port / libvips / usage-ruby-vips-r16-invert-uchar-inverts-pixel-range Passed
Builds a 5x5 single-band uchar image with constant value 70, calls Image#invert, and asserts the result has the same 5x5 dimensions and an average of exactly 185.0 (255 - 70), exercising libvips' invert operator over the uchar range.
ruby-vips Image#multiply(2.0) doubles the mean of a flat uchar image Port / libvips / usage-ruby-vips-r16-multiply-by-two-doubles-mean Passed
Builds a 5x5 single-band uchar image with constant 40, calls Image#multiply(2.0), and asserts the result has 5x5 dimensions and a mean of exactly 80.0 — exercising libvips' multiply operator with a scalar via the explicit method form.
ruby-vips Image#resize 0.5 halves both width and height of a uchar source Port / libvips / usage-ruby-vips-r16-resize-half-halves-width Passed
Builds a 32x24 single-band uchar image with constant value 40, calls Image#resize(0.5), and asserts the result has width 16, height 12, and bands 1, exercising libvips' resize operator with a fractional factor.
ruby-vips Image#rot90 on a 20x12 image yields a 12x20 image with preserved mean Port / libvips / usage-ruby-vips-r16-rotate-90-swaps-width-and-height Passed
Builds a 20x12 single-band uchar constant image with value 25, applies Vips::Image#rot90, and asserts the result has width 12, height 20, bands 1, and identical mean — exercising libvips' 90-degree rotation operator's geometry change.
ruby-vips Vips::Image.text renders 'Hello' into an image with positive width and height Port / libvips / usage-ruby-vips-r16-text-hello-image-has-positive-width Passed
Calls Vips::Image.text('Hello'), asserts the returned image has width and height greater than zero, bands equal to 1 (alpha mask), and that the mean across the image is strictly between 0 and 255, asserting libvips' Pango-backed text rasterizer emits a non-trivial alpha image.
ruby-vips Image#write_to_buffer('.png') emits a buffer whose first 8 bytes are the PNG magic Port / libvips / usage-ruby-vips-r16-write-to-buffer-png-has-png-magic Passed
Builds a 6x6 single-band uchar image, encodes via Image#write_to_buffer('.png'), asserts the resulting buffer is non-empty and its first 8 bytes equal the canonical PNG magic signature \x89PNG\r\n\x1a\n — exercising libvips' PNG buffer encoder.
ruby-vips Image#boolean(:and, self) yields a pixel-equal image (bitwise-AND identity) Port / libvips / usage-ruby-vips-r17-boolean-and-self-identity Passed
Builds an 8x8 uchar image filled with value 170 (binary 10101010), computes image.boolean(:and, image), and asserts the result has identical dimensions, format, and average pixel value 170 — exercising libvips' bitwise-AND of an image with itself as identity.
ruby-vips Image#cache returns an image with identical dimensions and mean Port / libvips / usage-ruby-vips-r17-cache-returns-equivalent-image Passed
Builds a 12x12 uchar image with constant value 77, calls cache(), and asserts the cached image has identical width, height, bands, format, and average pixel value as the source, confirming libvips' tile cache wrapper preserves pixel semantics.
ruby-vips Image#cast(:uchar) preserves width, height, and band count Port / libvips / usage-ruby-vips-r17-cast-uchar-preserves-dimensions Passed
Builds a 17x11 single-band black image, casts it to :uchar, and asserts the result has identical width (17), height (11), bands (1), and format :uchar, confirming libvips' format-cast operation leaves geometry untouched.
ruby-vips Image#embed at (0,0) keeps the original pixel at the (0,0) corner intact Port / libvips / usage-ruby-vips-r17-embed-preserves-corner-pixel Passed
Builds a 4x4 uchar image with the (0,0) pixel set to 200 via draw_rect!, embeds the image into an 8x8 canvas at offset (0,0) with extend :black, and asserts getpoint(0,0)[0] equals 200 — confirming libvips' embed places the input at the specified origin without modification.
ruby-vips Image#flip(:horizontal) applied twice restores pixel-equal output Port / libvips / usage-ruby-vips-r17-flip-horizontal-double-restores Passed
Builds a 4x4 uchar image filled with constant value 90, flips it horizontally twice, computes the sum of absolute differences between the doubly-flipped output and the original via (out - src).abs.avg, and asserts the average pixel-difference is exactly 0.0 — confirming libvips' horizontal flip is an involution.
ruby-vips Image#gaussblur(1.0) preserves the width and height of the input Port / libvips / usage-ruby-vips-r17-gaussblur-preserves-dimensions Passed
Builds a 16x16 uchar image with a constant value, applies gaussblur(1.0), and asserts the output retains the 16x16 dimensions and remains single-band uchar, confirming libvips' Gaussian blur does not crop the canvas.
ruby-vips Image#hist_find on a uchar image yields a 256-bin histogram Port / libvips / usage-ruby-vips-r17-histogram-bins-length Passed
Builds a 32x32 uchar image, runs hist_find to compute the per-bin histogram, and asserts the resulting histogram image has width 256 (one bin per uchar value) and height 1, confirming libvips' histogram bin layout for 8-bit input.
ruby-vips Image#linear with all-twos slopes doubles the mean of a flat uchar image Port / libvips / usage-ruby-vips-r17-linear-triple-doubles-mean Passed
Builds an 8x8 single-band uchar image with constant value 40, applies linear([2.0, 2.0, 2.0], [0.0, 0.0, 0.0]) to scale per band, asserts the result preserves the 8x8 dimensions and the average pixel value equals exactly 80.0, exercising libvips' linear operation.
ruby-vips Image#replicate(2,1) doubles the width and preserves the height Port / libvips / usage-ruby-vips-r17-replicate-doubles-width Passed
Builds an 8x6 uchar image, calls replicate(2, 1) to tile the input 2-wide by 1-tall, and asserts the result has width 16 (2x), height 6 (1x), and the same band count as the input, confirming libvips' tiling-replicate geometry.
ruby-vips Image#shrink(2,2) halves the width and height of the input Port / libvips / usage-ruby-vips-r17-shrink-halves-both-axes Passed
Builds a 32x16 uchar image, calls shrink(2,2), and asserts the output has width 16 and height 8 (each axis halved by the integer shrink factor), confirming libvips' shrink-by-integer-factor downsampling geometry.
ruby-vips Image.arrayjoin([a, b]) horizontally concatenates and doubles total width Port / libvips / usage-ruby-vips-r18-arrayjoin-pair-doubles-width Passed
Builds two 6x4 uchar images, calls Vips::Image.arrayjoin([a, b], across: 2) to lay them out side-by-side in a single row, and asserts the result has width 12 (2 * 6), height 4, and the same band count as the inputs, confirming libvips' arrayjoin lays out tiles in a fixed across-count grid.
ruby-vips Image#bandjoin with two extra single-band images yields a 3-band output Port / libvips / usage-ruby-vips-r18-bandjoin-three-images-makes-three-bands Passed
Builds three independent 5x5 single-band uchar images, calls bandjoin([b, c]) on the first to stack the channels, and asserts the result has width 5, height 5, bands 3, and per-band averages equal to the originals' avg values (10, 20, 30), confirming libvips' band concatenation order and pixel pass-through.
ruby-vips Image#extract_area returns an image with the requested width and height Port / libvips / usage-ruby-vips-r18-extract-area-returns-requested-rect Passed
Builds a 20x12 uchar image, calls extract_area(3, 2, 7, 5) to pull a 7x5 sub-rectangle starting at (3, 2), and asserts the result has width 7, height 5, and the same band count as the input, confirming libvips' rectangular extraction preserves geometry exactly.
ruby-vips Image#find_trim on a black-padded constant image returns the inner bounding box Port / libvips / usage-ruby-vips-r18-find-trim-on-padded-image-locates-content Passed
Builds a 4x4 uchar constant image (value 200), embeds it at (3, 2) into a 10x8 canvas with extend :black, calls find_trim with background: [0] and threshold: 1 to locate non-background content, and asserts the returned [left, top, width, height] equals [3, 2, 4, 4], confirming libvips' find_trim bounding-box detection against a black background.
ruby-vips Image#flip(:vertical) applied twice restores the original avg/min/max Port / libvips / usage-ruby-vips-r18-flip-vertical-double-restores-identity Passed
Builds a 12x6 uchar image with a constant value 70, flips vertically with flip(:vertical) twice, and asserts the result has identical width/height/bands and identical avg/min/max statistics to the input, confirming libvips' vertical flip is a self-inverse operation.
ruby-vips Image#gamma(exponent: 1.0) leaves the image avg unchanged on a constant image Port / libvips / usage-ruby-vips-r18-gamma-of-one-preserves-mean Passed
Builds a 12x12 uchar image with constant value 100, applies gamma(exponent: 1.0) which corresponds to the identity power transform, and asserts the result has the same width, height, band count, and avg as the input (avg == 100.0), confirming libvips' gamma operator is a no-op when the exponent is exactly 1.
ruby-vips Image#rot(:d90) swaps width and height of a non-square input Port / libvips / usage-ruby-vips-r18-rot-d90-swaps-dimensions Passed
Builds a 9x4 uchar image (non-square so rotation effects are observable), rotates by 90 degrees with rot(:d90), and asserts the result has width 4, height 9, and the same band count as the input, confirming libvips' lossless 90-degree rotation transposes the canvas dimensions.
ruby-vips Image#subsample(2, 2) halves the width and height of an input Port / libvips / usage-ruby-vips-r18-subsample-by-two-halves-dimensions Passed
Builds a 16x10 uchar image, calls subsample(2, 2) to take every second pixel along each axis, and asserts the result has width 8 (16/2), height 5 (10/2), and the same band count as the input, confirming libvips' point-sampled downsample geometry.
ruby-vips Image#wrap by half width and height preserves dimensions and statistics Port / libvips / usage-ruby-vips-r18-wrap-half-preserves-dimensions Passed
Builds a 10x8 uchar image with constant value 55, calls wrap(5, 4) to cyclically shift the image by half its width and half its height, and asserts the result has the same width, height, band count, and avg/min/max as the input, confirming libvips' wrap is a cyclic permutation that preserves all per-pixel statistics on a constant image.
ruby-vips Image#zoom(2, 2) doubles width and height with nearest-neighbour replication Port / libvips / usage-ruby-vips-r18-zoom-doubles-both-axes Passed
Builds an 8x6 uchar image, calls zoom(2, 2) to nearest-neighbour replicate each pixel, and asserts the result has width 16 (2x), height 12 (2x), the same band count, and the same avg as the input since nearest-neighbour replication preserves the mean exactly.
ruby-vips Image#abs flips the sign of a negative signed-format image to positive Port / libvips / usage-ruby-vips-r19-abs-of-negative-constant Passed
Builds an 8x6 image with constant value -40 cast to signed :char format, calls abs, and asserts the result has the same width, height, and band count as the input, asserts every pixel value in the result equals 40 (avg=40, min=40, max=40), confirming libvips' absolute-value operator correctly negates signed pixels.
ruby-vips Image#bandor on a three-band image returns the bitwise OR across bands Port / libvips / usage-ruby-vips-r19-bandbool-or-yields-bitwise-or Passed
Builds a 4x4 RGB image where the three bands carry constant values 1, 2, and 4 respectively, calls bandbool(:or) (equivalent to bandor) to fold the three bands with bitwise OR, asserts the result has one band and the same width and height as the source, and asserts every output pixel equals 1|2|4 = 7 (avg=7, min=7, max=7), confirming libvips' bitwise band-fold reduction.
ruby-vips Image#boolean_const with :eor and constant 255 inverts a uchar image Port / libvips / usage-ruby-vips-r19-boolean-eor-const-xor Passed
Builds a 4x4 uchar image with constant value 0x0F (15), calls boolean_const(:eor, [0xFF]) to bitwise-XOR every pixel with 255, asserts the result has the same dimensions and band count as the input, and asserts every output pixel equals 0xF0 (240) via avg, min, and max checks, confirming libvips' boolean_const XOR (eor) operator semantics.
ruby-vips Image#embed with extend :white pads the canvas margin with 255 (uchar white) Port / libvips / usage-ruby-vips-r19-embed-extend-white-fills-margin Passed
Builds a 4x4 uchar image with constant value 80, calls embed(2, 2, 8, 8, extend: :white) to place the source at (2,2) on an 8x8 canvas, asserts the result is 8x8 with the same band count as the source, asserts the maximum pixel value is 255 (the white margin) and the minimum is 80 (the inset content), confirming libvips' :white extend mode fills the surrounding margin with 255 for uchar input.
ruby-vips Image#flip vertical+horizontal yields the same image as rot(:d180) Port / libvips / usage-ruby-vips-r19-flip-vertical-then-horizontal-equals-rot180 Passed
Loads the sample JPEG, computes a = src.flip(:vertical).flip(:horizontal), computes b = src.rot(:d180), asserts both have the same width, height, and bands as the source, and asserts the per-band avg of a equals the per-band avg of b (within 0.001), confirming the algebraic identity that two perpendicular flips compose into a 180-degree rotation under libvips.
ruby-vips Image#ifthenelse with an all-true mask returns the then-branch verbatim Port / libvips / usage-ruby-vips-r19-ifthenelse-true-mask-selects-then Passed
Builds a 4x4 uchar all-ones mask (value 1) and two distinct constant uchar images "thn" (value 90) and "els" (value 30), calls mask.ifthenelse(thn, els), and asserts the result has the same dimensions as the inputs and that every output pixel equals 90 (avg=min=max=90), confirming libvips' conditional selection routes every position into the then-branch when the predicate is non-zero everywhere.
ruby-vips Image#minpos returns the coordinate of the darkest pixel in a planted-spot image Port / libvips / usage-ruby-vips-r19-minpos-locates-dark-pixel Passed
Builds a 6x6 uchar image with constant value 200, draws a single pixel of value 5 at (4, 1) via draw_rect on a mutable copy, calls minpos on the result, asserts the returned (min_value, x, y) tuple equals (5, 4, 1), confirming libvips' min-position locator picks the correct minimum coordinate against a planted dark spot.
ruby-vips Image#relational_const :moreeq with constant equal to pixel value returns all 255 Port / libvips / usage-ruby-vips-r19-relational-const-moreeq-flat Passed
Builds a 5x5 uchar image with constant value 50, calls relational_const(:moreeq, [50]) to test pixel-wise (pixel >= 50), asserts the result has the same width, height, and bands as the input and that every output pixel equals 255 (libvips relational truth value), and asserts a second call with constant 51 (strictly greater) yields all-zero output, confirming the inclusive >= threshold semantics.
ruby-vips Image#replicate(1, 3) preserves width and triples height Port / libvips / usage-ruby-vips-r19-replicate-doubles-height Passed
Builds a 7x5 uchar image, calls replicate(1, 3) to tile 1-wide by 3-tall, asserts the result has width 7 (unchanged), height 15 (3x), and the same band count as the input, and asserts the mean is preserved (constant input -> constant output), confirming libvips' vertical replicate geometry.
ruby-vips Image.xyz produces a 2-band uint coordinate image with mean equal to half the max coordinate Port / libvips / usage-ruby-vips-r19-xyz-default-bands-and-mean Passed
Builds a 10x8 coordinate image with Vips::Image.xyz(10, 8), asserts the result has width 10, height 8, and exactly 2 bands (x and y coordinates), and asserts band 0 has min 0 and max 9 (10 columns) and band 1 has min 0 and max 7 (8 rows), confirming libvips' canonical 2-band coordinate generator.
ruby-vips Image#ceil on a constant 2.3 float yields 3 Port / libvips / usage-ruby-vips-r20-ceil-of-fractional-2-3-equals-3 Passed
Builds a 4x4 image with constant value 2.3 cast to float, calls .ceil, and asserts the result avg, min, and max are all exactly 3.0 (ceil(2.3)==3), confirming libvips' ceil operator rounds upward toward positive infinity for a positive fractional input.
ruby-vips Image#cos on a zero-valued image returns one Port / libvips / usage-ruby-vips-r20-cos-of-zero-equals-one Passed
Builds a 6x6 black (all zero) image cast to float, calls .cos, and asserts the avg, min, and max of the result are all within 1e-9 of 1.0 (cos(0)==1), confirming libvips' libm-backed cosine operator returns the documented constant-input value.
ruby-vips Image#floor on a constant 2.7 float yields 2 Port / libvips / usage-ruby-vips-r20-floor-of-fractional-2-7-equals-2 Passed
Builds a 4x4 image with constant value 2.7 cast to float, calls .floor, and asserts the result avg, min, and max are all exactly 2.0 (floor(2.7)==2), confirming libvips' floor operator correctly truncates toward negative infinity on a positive fractional.
ruby-vips Image#getpoint(0, 0) on a constant image returns the constant value Port / libvips / usage-ruby-vips-r20-getpoint-corner-pixel-from-constant Passed
Builds an 8x8 image with every pixel equal to 123 (uchar), calls .getpoint(0, 0), and asserts the returned array has length equal to the band count and the sole value equals 123.0, confirming libvips' single-pixel sampling API returns the underlying pixel for the trivial constant case.
ruby-vips Image#round on a constant 1.7 float rounds to 2 Port / libvips / usage-ruby-vips-r20-round-of-half-rounds-up Passed
Builds an 8x4 image with constant value 1.7 cast to float, calls .round(:rint), and asserts the result avg, min, and max are all exactly 2.0 (1.7 rounds to nearest integer 2), confirming libvips' :rint rounding mode follows standard round-to-nearest-even semantics for fractional > 0.5.
ruby-vips Image#sign on a positive-constant image returns 1 Port / libvips / usage-ruby-vips-r20-sign-of-positive-yields-one Passed
Builds a 5x5 image with constant value 42 cast to float, calls .sign, and asserts the avg/min/max of the result are all exactly 1.0, confirming libvips' sign-of operator returns +1 for strictly positive input.
ruby-vips Image#sin on a zero-valued image returns zero Port / libvips / usage-ruby-vips-r20-sin-of-zero-equals-zero Passed
Builds an 8x8 black (all zero) image, casts to float, calls .sin, and asserts the result avg, min, and max are all within 1e-9 of 0.0 (sin(0)==0), confirming libvips' libm-backed sine operator zeroes out the trivial constant.
ruby-vips Image#** 0.5 on a constant-4 image yields 2.0 Port / libvips / usage-ruby-vips-r20-sqrt-of-constant-four-equals-two Passed
Builds an 6x6 image filled with constant value 4 cast to float, raises it to the 0.5 power (square root), and asserts the result avg, min, and max are all within 1e-6 of 2.0, confirming libvips' libm-backed pow operator computes the principal square root correctly across the whole image.
ruby-vips Image#stats on a flat constant-50 image reports mean 50 and stdev 0 Port / libvips / usage-ruby-vips-r20-stats-on-flat-image-mean-equals-constant Passed
Builds an 8x8 image with every pixel equal to 50 (uchar), calls .stats, reads the resulting 1x6 stats image row 0 (whose layout per libvips docs is min/max/sum/sum-of-squares/mean/stdev), and asserts mean equals 50.0 and stdev equals 0.0 (flat image), confirming libvips' summary statistics operator on a constant input.
ruby-vips Image#write_to_memory length equals width*height*bands for uchar Port / libvips / usage-ruby-vips-r20-write-to-memory-bytes-equal-pixel-count Passed
Builds a 9x5 single-band uchar image, calls .write_to_memory, and asserts the resulting binary string has bytesize equal to 9*5*1 (no padding) and the first byte equals the constant pixel value 33, confirming libvips' raw memory write yields a contiguous pixel buffer with no row padding.
ruby-vips Image#cast from float to uchar preserves the mean for in-range constant pixels Port / libvips / usage-ruby-vips-r21-cast-from-float-to-uchar-preserves-mean Passed
Builds an 8x8 image with constant value 75 in float format, casts it to uchar, and asserts the resulting format is :uchar and the avg equals 75 (no saturation), validating libvips' format conversion when no pixel exceeds [0, 255].
ruby-vips Image#composite2 :over preserves the input band count after compositing two RGBA images Port / libvips / usage-ruby-vips-r21-composite2-over-mode-bands Passed
Builds two 6x6 4-band uchar images (RGBA), tags them as sRGB with alpha via colourspace conversion, calls bottom.composite2(top, :over), and asserts the output has the same width, height, and bands as the bottom layer, exercising libvips' alpha-aware compositing.
ruby-vips Image#extract_area 1x1 at (0,0) yields a single-pixel image matching the source corner Port / libvips / usage-ruby-vips-r21-extract-area-zero-zero-corner-pixel Passed
Builds a 5x5 uchar image with constant value 123, calls extract_area(0, 0, 1, 1), and asserts the resulting image has width 1, height 1, and getpoint(0, 0)[0] equals 123, validating libvips' boundary extraction at the origin.
ruby-vips Image#find_trim on a flat-background image reports no content area Port / libvips / usage-ruby-vips-r21-find-trim-on-flat-image-returns-zero-area Passed
Builds a 10x10 uchar image filled with constant 255 (interpreted as background), calls find_trim with the default background, and asserts the returned [left, top, width, height] yields a width or height of 0 (no content), exercising libvips' background trim detection on a fully-background image.
ruby-vips Image#hist_find on a uchar image produces a 256-wide one-pixel-tall histogram Port / libvips / usage-ruby-vips-r21-hist-find-bin-count-256 Passed
Constructs a 16x16 uchar image of constant value 42, calls hist_find, and asserts the histogram image is 256 wide, 1 tall, single-banded, with the only non-zero bin at column 42 equal to 16*16=256, exercising libvips' histogram bucketing operation.
ruby-vips Image#interpretation is :srgb for a 3-band uchar PNG round-trip Port / libvips / usage-ruby-vips-r21-interpretation-srgb-on-png-load Passed
Builds a 4x4 three-band uchar image, encodes it as PNG via write_to_buffer, decodes back via new_from_buffer, casts to the srgb colourspace, and asserts the resulting interpretation is :srgb, exercising libvips' colourspace tagging plumbing.
ruby-vips Image#linear applies separate affine constants to each band Port / libvips / usage-ruby-vips-r21-linear-applies-affine-per-band Passed
Builds a 4x4 three-band uchar image with band values 10, 20, 30, calls linear([2.0, 3.0, 1.0], [1.0, 2.0, 0.0]) to apply ax+b independently per band, asserts the result averages 113/3 (= (10*2+1 + 20*3+2 + 30*1+0)/3 = (21+62+30)/3), exercising libvips' per-band affine transform.
ruby-vips Image.new_from_buffer round-trips a PNG-encoded blob via write_to_buffer Port / libvips / usage-ruby-vips-r21-new-from-buffer-png-roundtrip Passed
Builds an 8x6 uchar constant-99 image, encodes it to a PNG byte string with write_to_buffer('.png'), decodes the bytes back via Image.new_from_buffer(bytes, ''), and asserts the reconstructed image has identical width, height, and avg pixel value, exercising libvips' in-memory PNG codec round-trip.
ruby-vips Image#smartcrop with interesting :low returns the requested crop dimensions Port / libvips / usage-ruby-vips-r21-smartcrop-low-shape Passed
Builds a 32x24 single-band uchar image with constant value 60, calls smartcrop(16, 12, interesting: :low), and asserts the result is exactly 16x12 with the same band count as the source, exercising libvips' attention-model-independent crop sizing.
ruby-vips tiffsave_buffer with compression :deflate roundtrips an image without losing pixel mean Port / libvips / usage-ruby-vips-r21-tiffsave-buffer-deflate-roundtrip Passed
Builds a 10x10 uchar image with constant value 55, encodes it to a TIFF byte string via tiffsave_buffer with compression: :deflate, decodes via new_from_buffer, and asserts width, height, and avg pixel value match the source, exercising libvips' deflate-compressed TIFF write path.
ruby-vips PNG buffer roundtrip Port / libvips / usage-ruby-vips-r9-buffer-png-roundtrip Passed
Encodes an image to a PNG buffer with write_to_buffer, decodes it with new_from_buffer and verifies dimensions and band count are preserved.
ruby-vips cast to uchar clips overflow Port / libvips / usage-ruby-vips-r9-cast-clip-overflow Passed
Adds a constant that pushes pixel values above 255 and casts to uchar, verifying the cast clips at 255.
ruby-vips extract_area crops region Port / libvips / usage-ruby-vips-r9-extract-area Passed
Extracts a 4x4 sub-region from a 16x16 image via extract_area and verifies the output dimensions and that pixels match the original at the offset.
ruby-vips extract_band selects single channel Port / libvips / usage-ruby-vips-r9-extract-band-channel Passed
Builds a 3-band RGB image with distinct values per band and extracts band 1 (green) using extract_band, asserting bands becomes 1 and the pixel equals the green component.
ruby-vips flatten removes alpha against background Port / libvips / usage-ruby-vips-r9-flatten-alpha Passed
Flattens an RGBA image with a fully transparent area against a red background and verifies the resulting RGB pixel matches the background colour.
ruby-vips getpoint reports RGB triple Port / libvips / usage-ruby-vips-r9-getpoint-rgb Passed
Builds a uniform RGB image with known component values and asserts getpoint returns those exact values at multiple coordinates.
ruby-vips linear scales then offsets pixels Port / libvips / usage-ruby-vips-r9-linear-mul-add Passed
Applies the linear operation a*x+b on a uniform 50-valued image and asserts the resulting pixel equals 2*50+5 = 105.
ruby-vips PNG to JPEG roundtrip Port / libvips / usage-ruby-vips-r9-png-jpeg-roundtrip Passed
Writes a generated 32x32 RGB image to PNG, reloads it, writes JPEG, reloads JPEG and verifies dimensions and band count are preserved.
ruby-vips resize halves dimensions Port / libvips / usage-ruby-vips-r9-resize-half Passed
ruby-vips rot 90 swaps dimensions Port / libvips / usage-ruby-vips-r9-rot-90-shape Passed
ruby-vips rank median filter removes salt noise Port / libvips / usage-ruby-vips-rank-median-filter Passed
Builds a uniform-grey image with a single bright salt pixel and verifies that Vips::Image#rank with a 3x3 window and median index restores the salt pixel to the surrounding grey value while leaving the background untouched.
ruby-vips read JPEG buffer Port / libvips / usage-ruby-vips-read-buffer-jpeg Passed
ruby-vips read PNG buffer Port / libvips / usage-ruby-vips-read-buffer-png Passed
Writes a synthetic PNG buffer with ruby-vips, reloads it from memory, and verifies the decoded dimensions.
ruby-vips reads sample JPEG Port / libvips / usage-ruby-vips-read-sample-jpeg Passed
ruby-vips reads sample PNG Port / libvips / usage-ruby-vips-read-sample-png Passed
ruby-vips recomb 3x3 color matrix Port / libvips / usage-ruby-vips-recomb-color-matrix Passed
Applies a 3x3 channel recombination matrix to a synthetic 3-band sRGB image with Vips::Image#recomb and verifies that the per-band swap produces the expected pixel triple.
ruby-vips reduce with explicit xfac and yfac Port / libvips / usage-ruby-vips-reduce-xfac-yfac Passed
Calls Vips::Image#reduce with distinct xfac and yfac values and verifies the resulting dimensions are scaled independently on each axis.
ruby-vips relational lesseq between two images Port / libvips / usage-ruby-vips-relational-lesseq-image Passed
Compares two single-band images via Vips::Image#relational(:lesseq) and verifies the output is 255 where the left input is less than or equal to the right input and 0 elsewhere across every sample position.
ruby-vips relational more produces boolean mask Port / libvips / usage-ruby-vips-relational-more Passed
Compares two synthetic images with relational :more and verifies the boolean mask is 255 where lhs > rhs and 0 elsewhere.
ruby-vips replicates image Port / libvips / usage-ruby-vips-replicate-image Passed
ruby-vips replicate sample Port / libvips / usage-ruby-vips-replicate-sample Passed
ruby-vips resize generated image Port / libvips / usage-ruby-vips-resize-generated Passed
ruby-vips resize image Port / libvips / usage-ruby-vips-resize-image Passed
ruby-vips resize with cubic kernel Port / libvips / usage-ruby-vips-resize-kernel-cubic Passed
Downscales a uniform synthetic image with Vips::Image#resize using kernel: :cubic and asserts the rescaled dimensions and that the average pixel value is preserved within tolerance.
ruby-vips resize with linear kernel Port / libvips / usage-ruby-vips-resize-kernel-linear Passed
Downscales a uniform synthetic image with Vips::Image#resize using kernel: :linear and asserts the rescaled dimensions and that the average pixel value is preserved within tolerance.
ruby-vips resize sample PNG Port / libvips / usage-ruby-vips-resize-sample-png Passed
ruby-vips rint rounds to nearest with banker rounding Port / libvips / usage-ruby-vips-rint-banker Passed
Applies Vips::Image#rint to a synthetic float image including half-integer ties and verifies the result rounds to the nearest integer using libvips' banker (round-half-to-even) rule for ties.
ruby-vips 180 degree rotation Port / libvips / usage-ruby-vips-rot180-sample Passed
Rotates the bundled JPEG sample by 180 degrees with ruby-vips and verifies the image dimensions remain stable.
ruby-vips rot270 generated image Port / libvips / usage-ruby-vips-rot270-generated Passed
ruby-vips generated rot90 Port / libvips / usage-ruby-vips-rot90-generated Passed
ruby-vips rotate sample PNG Port / libvips / usage-ruby-vips-rot90-sample-png Passed
ruby-vips rotate image Port / libvips / usage-ruby-vips-rotate-image Passed
ruby-vips save png Port / libvips / usage-ruby-vips-save-png Passed
ruby-vips scharr edge detection Port / libvips / usage-ruby-vips-scharr-edges Passed
Runs Vips::Image#scharr on a synthetic image with a vertical step and verifies the response peaks along the step column and is near zero in flat regions.
ruby-vips sharpen roundtrip Port / libvips / usage-ruby-vips-sharpen-roundtrip Passed
Applies sharpen to a synthetic RGB image, writes the result as TIFF, and re-reads it to verify dimensions and band count.
ruby-vips sign of negative zero positive Port / libvips / usage-ruby-vips-sign-three-states Passed
Constructs an image whose pixels span negative, zero, and positive values, applies Vips::Image#sign, and verifies that the output contains exactly the three values -1, 0, and 1 in the expected positions.
ruby-vips similarity rotation by 30 degrees Port / libvips / usage-ruby-vips-similarity-rotate-30 Passed
Rotates a synthetic single-band image by 30 degrees via Vips::Image#similarity and verifies the rotated canvas grows beyond the original square dimensions.
ruby-vips similarity with idx/idy translation Port / libvips / usage-ruby-vips-similarity-with-translation Passed
Applies Vips::Image#similarity with explicit idx/idy translation offsets in addition to a scaling factor and verifies that the output canvas grows according to the scale and that the underlying pixel value survives.
ruby-vips sines synthetic generator produces a cosine wave Port / libvips / usage-ruby-vips-sines-generator Passed
Generates a 2D cosine wave image with Vips::Image.sines at a known horizontal frequency and verifies the output dimensions, format, and the period of the wave along a horizontal scanline.
ruby-vips smartcrop attention strategy Port / libvips / usage-ruby-vips-smartcrop-attention Passed
Crops a non-square synthetic RGB image into a square thumb using Vips::Image#smartcrop with the :attention strategy and verifies output dimensions and band count.
ruby-vips sobel edge magnitude Port / libvips / usage-ruby-vips-sobel-edges Passed
Runs Vips::Image#sobel on an image with a sharp vertical step and verifies the response peaks along the step column and is near zero in flat regions.
ruby-vips stats per-band statistics Port / libvips / usage-ruby-vips-stats-per-band Passed
Builds a small multi-band image with known per-band ranges and verifies that Vips::Image#stats returns a matrix whose first row carries the global min/max and whose subsequent rows carry the expected per-band min and max.
ruby-vips generated subsample Port / libvips / usage-ruby-vips-subsample-generated Passed
ruby-vips generated subtract constant Port / libvips / usage-ruby-vips-subtract-constant-generated Passed
Subtracts a scalar constant from a generated image with ruby-vips and verifies the resulting pixel values.
ruby-vips text rendering with default font Port / libvips / usage-ruby-vips-text-rendering Passed
Renders a short string into a single-band alpha image with Vips::Image.text using the default font and verifies the output has positive dimensions and contains both transparent and opaque pixels. If the renderer is unavailable (no fonts, no Pango support), the testcase reports the reason and exits successfully.
ruby-vips empty threshold Port / libvips / usage-ruby-vips-threshold-empty Passed
ruby-vips relational threshold Port / libvips / usage-ruby-vips-threshold-image Passed
ruby-vips thumbnail with centre crop Port / libvips / usage-ruby-vips-thumbnail-centre-crop Passed
Generates a thumbnail of a synthetic image with crop:centre and verifies the output is exactly square at the requested size.
ruby-vips TIFF buffer round trip Port / libvips / usage-ruby-vips-tiff-buffer-roundtrip Passed
Encodes a small grayscale image to TIFF via Vips::Image#write_to_buffer('.tif') and decodes it back, verifying that the produced buffer carries a TIFF magic header and that dimensions plus exact pixel values survive the round trip.
ruby-vips tilecache preserves pixels through a cached pipeline Port / libvips / usage-ruby-vips-tilecache-roundtrip Passed
Pushes a synthetic image through a Vips::Image#tilecache stage with explicit tile width/height and threading and verifies that downstream operations see the same pixel values they would without the cache, exercising the lazy/persistent cache marker.
ruby-vips WebP buffer round trip Port / libvips / usage-ruby-vips-webp-buffer-roundtrip Passed
Encodes a small sRGB image to WebP via Vips::Image#write_to_buffer('.webp') and decodes it again with Vips::Image.new_from_buffer, verifying the buffer is non-empty, has a WebP RIFF header, and that dimensions and band count survive the round trip.
ruby-vips wrap shifts image with toroidal wrap Port / libvips / usage-ruby-vips-wrap-translation Passed
Shifts a synthetic single-band test image by a non-trivial offset using Vips::Image#wrap and verifies that pixels reappear on the opposite edge as expected from the wrap-around semantics.
ruby-vips writes buffer Port / libvips / usage-ruby-vips-write-buffer Passed
ruby-vips generated write memory Port / libvips / usage-ruby-vips-write-memory-generated Passed
ruby-vips write and read PNG Port / libvips / usage-ruby-vips-write-read-png Passed
ruby-vips xyz bands Port / libvips / usage-ruby-vips-xyz-bands-batch11 Passed
ruby-vips colourspace XYZ to LAB Port / libvips / usage-ruby-vips-xyz-to-lab Passed
Builds a synthetic XYZ image with the D65 white point reference (X=95.047, Y=100, Z=108.883) and converts it to LAB via Vips::Image#colourspace, verifying L* lands at 100 and a*/b* land near zero.
ruby-vips generated zoom Port / libvips / usage-ruby-vips-zoom-generated Passed
CVE-2021-27847 libvips regression Port / libvips / cve-2021-27847 Passed
Asserts that vips_eye and vips_mask reject pathological geometry parameters that would historically drive a divide-by-zero in eye.c / mask.c instead of crashing the process.
CVE-2023-40032 libvips regression Port / libvips / cve-2023-40032 Passed
Asserts that vips rejects an SVG input containing a malformed UTF-8 sequence in a text element without segfaulting during text parsing.
CVE-2026-3146 libvips regression Port / libvips / cve-2026-3146 Passed
Asserts that vips_foreign_load_matrix_header rejects an empty matrix-format input file without dereferencing the missing header pointer.
CVE-2026-3284 libvips regression Port / libvips / cve-2026-3284 Passed
Asserts that vips extract_area rejects coordinates whose left+width or top+height arithmetic would overflow rather than producing a corrupted slice from the integer-overflow path.