mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 18:03:36 +00:00
The behaviour of array.shrink/3 was not defined if its first argument was
negative. If this occurred, the C backends would return an empty array, while
the non-C backends would abort. This diff changes the behaviour of shrink/3 so
that it throws an exception if its first argument is negative.
The implementation of shrink/3 for the Java backend did not handle the case
where the array's element type was represented by the one the following Java
primitive types: byte, short, long and float. Handle those cases.
library/array.m:
Make the above fixes.
Fix a typo in my previous commit.
NEWS:
Note the change in behaviour if the first argument of shrink/3 is
negative.
tests/hard_coded/Mmakefile:
tests/hard_coded/array_shrink.{m,exp}:
Add a test case.
77 lines
2.0 KiB
Plaintext
77 lines
2.0 KiB
Plaintext
================
|
|
Array0 = array([1, 2, 3, 4])
|
|
Size = -1
|
|
EXCEPTION: "predicate `array.shrink\'/3: Unexpected: cannot shrink to a negative size"
|
|
================
|
|
Array0 = array([1, 2, 3, 4])
|
|
Size = 0
|
|
Array = array([])
|
|
================
|
|
Array0 = array([1, 2, 3, 4])
|
|
Size = 3
|
|
Array = array([1, 2, 3])
|
|
================
|
|
Array0 = array([1, 2, 3, 4])
|
|
Size = 4
|
|
Array = array([1, 2, 3, 4])
|
|
================
|
|
Array0 = array([1, 2, 3, 4])
|
|
Size = 5
|
|
EXCEPTION: "predicate `array.shrink\'/3: Unexpected: cannot shrink to a larger size"
|
|
================
|
|
Array0 = array([1i8, 2i8, 3i8, 4i8])
|
|
Size = 3
|
|
Array = array([1i8, 2i8, 3i8])
|
|
================
|
|
Array0 = array([1u8, 2u8, 3u8, 4u8])
|
|
Size = 3
|
|
Array = array([1u8, 2u8, 3u8])
|
|
================
|
|
Array0 = array([1i16, 2i16, 3i16, 4i16])
|
|
Size = 3
|
|
Array = array([1i16, 2i16, 3i16])
|
|
================
|
|
Array0 = array([1u16, 2u16, 3u16, 4u16])
|
|
Size = 3
|
|
Array = array([1u16, 2u16, 3u16])
|
|
================
|
|
Array0 = array([1i32, 2i32, 3i32, 4i32])
|
|
Size = 3
|
|
Array = array([1i32, 2i32, 3i32])
|
|
================
|
|
Array0 = array([1u32, 2u32, 3u32, 4u32])
|
|
Size = 3
|
|
Array = array([1u32, 2u32, 3u32])
|
|
================
|
|
Array0 = array([1i64, 2i64, 3i64, 4i64])
|
|
Size = 3
|
|
Array = array([1i64, 2i64, 3i64])
|
|
================
|
|
Array0 = array([1u64, 2u64, 3u64, 4u64])
|
|
Size = 3
|
|
Array = array([1u64, 2u64, 3u64])
|
|
================
|
|
Array0 = array([1.0, 2.0, 3.0, 4.0])
|
|
Size = 3
|
|
Array = array([1.0, 2.0, 3.0])
|
|
================
|
|
Array0 = array(["one", "two", "three", "four"])
|
|
Size = 3
|
|
Array = array(["one", "two", "three"])
|
|
================
|
|
Array0 = array(['a', 'b', 'c', 'd'])
|
|
Size = 3
|
|
Array = array(['a', 'b', 'c'])
|
|
================
|
|
Array0 = array([orange, lemon, apple, pear])
|
|
Size = 3
|
|
Array = array([orange, lemon, apple])
|
|
================
|
|
Array0 = array([color(1u8, 1u8, 1u8), color(2u8, 2u8, 2u8), color(3u8, 3u8, 3u8), color(4u8, 4u8, 4u8)])
|
|
Size = 3
|
|
Array = array([color(1u8, 1u8, 1u8), color(2u8, 2u8, 2u8), color(3u8, 3u8, 3u8)])
|
|
================
|
|
Array0 = array([[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]])
|
|
Size = 3
|
|
Array = array([[1], [2, 2], [3, 3, 3]])
|