mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
library/array.m:
Add uint versions of most of this module's operations.
NEWS.md:
Mention the new operations.
library/edit_distance.m:
Use the new array operations to eliminate some casts.
library/edit_seq.m:
Minor style fix.
tests/hard_coded/array_gen.{m,exp}:
tests/hard_coded/array_test_2.{m,exp}:
Extend the tests of array.m's operations to the corresponding uint
versions. Expect the output for the new versions.
tests/hard_coded/array_resize.m:
tests/hard_coded/array_shrink.m:
Extend the tests of array.m's operations to the corresponding uint
versions, but generate output only if their results differ from the
original int versions. (They don't differ.)
tests/hard_coded/array_primitives.m:
Style fixes.
78 lines
2.7 KiB
Mathematica
78 lines
2.7 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
% This is a regression test for the bug fixed in commit 65f683e. That bug was
|
|
% an abort due to an InvalidCastException in the C# grades. The problem was
|
|
% that the C# implementation of ML_new_array omitted the special case handling
|
|
% of primitive unsigned integer types. More generally, several of the array
|
|
% primitives (ML_new_array, ML_unsafe_new_array, ML_resize_array and
|
|
% ML_shrink_array), all need to implement the special case handling of
|
|
% primitive types, in both the C# and Java grades. This test checks that
|
|
% special case handling for primitives is present for all of those operations.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module array_primitives.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module array.
|
|
:- import_module list.
|
|
:- import_module string.
|
|
:- import_module type_desc.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
main(!IO) :-
|
|
do_test(2i8, 3i8, !IO),
|
|
do_test(2u8, 3u8, !IO),
|
|
do_test(2i16, 3i16, !IO),
|
|
do_test(2u16, 3u16, !IO),
|
|
do_test(2i32, 3i32, !IO),
|
|
do_test(2u32, 3u32, !IO),
|
|
do_test(2i64, 3i64, !IO),
|
|
do_test(2u64, 3u64, !IO),
|
|
|
|
do_test(2, 3, !IO),
|
|
do_test(2u, 3u, !IO),
|
|
do_test(2.0, 3.0, !IO),
|
|
|
|
do_test("foo", "bar", !IO),
|
|
do_test([1, 2, 3], [4], !IO).
|
|
|
|
:- pred do_test(T::in, T::in, io::di, io::uo) is det.
|
|
|
|
do_test(E, F, !IO) :-
|
|
TypeName = type_name(type_of(E)),
|
|
|
|
io.format("*** Testing with element type: %s ****\n", [s(TypeName)], !IO),
|
|
array.init(5, E, InitArray), % Test ML_new_array
|
|
io.write_string("init = ", !IO),
|
|
io.write_line(InitArray, !IO),
|
|
|
|
GenArray = array.generate(5, (func(_) = E)), % Test ML_unsafe_new_array
|
|
io.write_string("generate = ", !IO),
|
|
io.write_line(GenArray, !IO),
|
|
|
|
array.resize(7, F, InitArray, ResizedArray), % Test ML_array_resize
|
|
io.write_string("resize = ", !IO),
|
|
io.write_line(ResizedArray, !IO),
|
|
|
|
array.shrink(2, GenArray, ShrunkArray), % Test ML_shrink_array
|
|
io.write_string("shrink = ", !IO),
|
|
io.write_line(ShrunkArray, !IO),
|
|
|
|
io.nl(!IO).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
:- end_module array_primitives.
|
|
%---------------------------------------------------------------------------%
|