The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
# -*- mode: perl; coding: utf-8; tab-width: 4 -*-

use strict;
use Test::More qw(no_plan);
# use Test::More tests => 10;

BEGIN {
	use_ok('Cv', -more);
}

# SvREADONLY_on
# Cv::Mat->getRawData

if (1) {
	my $rows = 240;
	my $cols = 320;
	my $cn = 3;
	my $step = $cols * $cn;
	my $type = CV_MAKETYPE(CV_8U, $cn);
	my $mat = Cv::Mat->new([$rows, $cols], $type)->fill(cvScalarAll(123));
	$mat->getRawData(my $rawData, my $rawStep, my $rawSize);
	is($rawStep, $step);
	is($rawSize->[0], $cols);
	is($rawSize->[1], $rows);
	is(length($rawData), $step * $rows);
	is(ord(substr($rawData, 0, 1)), 123);
	eval { substr($rawData, 0, 1) = 'x'; };
	like($@, qr/Modification of a read-only value attempted at/);
}


# Cv::Image->getRawData

if (2) {
	my $rows = 240;
	my $cols = 320;
	my $cn = 3;
	my $step = $cols * $cn;
	my $type = CV_MAKETYPE(CV_8U, $cn);
	my $mat = Cv::Image->new([$rows, $cols], $type)->fill(cvScalarAll(123));
	$mat->getRawData(my $rawData, my $rawStep, my $rawSize);
	is($rawStep, $step);
	is($rawSize->[0], $cols);
	is($rawSize->[1], $rows);
	is(length($rawData), $step * $rows);
	is(ord(substr($rawData, 0, 1)), 123);
	eval { substr($rawData, 0, 1) = 'x'; };
	like($@, qr/Modification of a read-only value attempted at/);
}

if (3) {
	my $rows = 240;
	my $cols = 320;
	my $cn = 3;
	my $step = $cols * $cn;
	my $type = CV_MAKETYPE(CV_8U, $cn);
	my $mat = Cv::Image->new([$rows, $cols], $type)->fill(cvScalarAll(123));
	$mat->getRawData(my $rawData2);
	$mat->getRawData(my $rawData, my $rawStep, my $rawSize);
	is($rawStep, $step);
	is($rawSize->[0], $cols);
	is($rawSize->[1], $rows);
	is(length($rawData), $step * $rows);
	is(ord(substr($rawData, 0, 1)), 123);
	eval { substr($rawData, 0, 1) = 'x'; };
	like($@, qr/Modification of a read-only value attempted at/);
}