Issue #2916142 by beatrizrodrigues, Chi, yogeshmpawar, tobiberlin, quietone, borisson_: Decimal and Float item generates wrong sample values

merge-requests/1602/head
Alex Pott 2022-01-03 00:39:11 +00:00
parent 1e65e36e7e
commit b2901ce78c
No known key found for this signature in database
GPG Key ID: BDA67E7EE836E5CE
3 changed files with 24 additions and 5 deletions

View File

@ -136,8 +136,8 @@ class DecimalItem extends NumericItemBase {
// point.
// The maximum number you can get with 3 digits is 10^3 - 1 --> 999.
// The minimum number you can get with 3 digits is -1 * (10^3 - 1).
$max = is_numeric($settings['max']) ?: pow(10, ($precision - $scale)) - 1;
$min = is_numeric($settings['min']) ?: -pow(10, ($precision - $scale)) + 1;
$max = is_numeric($settings['max']) ? $settings['max'] : pow(10, ($precision - $scale)) - 1;
$min = is_numeric($settings['min']) ? $settings['min'] : -pow(10, ($precision - $scale)) + 1;
// Get the number of decimal digits for the $max
$decimal_digits = self::getDecimalDigits($max);

View File

@ -64,8 +64,8 @@ class FloatItem extends NumericItemBase {
$settings = $field_definition->getSettings();
$precision = rand(10, 32);
$scale = rand(0, 2);
$max = is_numeric($settings['max']) ?: pow(10, ($precision - $scale)) - 1;
$min = is_numeric($settings['min']) ?: -pow(10, ($precision - $scale)) + 1;
$max = is_numeric($settings['max']) ? $settings['max'] : pow(10, ($precision - $scale)) - 1;
$min = is_numeric($settings['min']) ? $settings['min'] : -pow(10, ($precision - $scale)) + 1;
// @see "Example #1 Calculate a random floating-point number" in
// http://php.net/manual/function.mt-getrandmax.php
$random_decimal = $min + mt_rand() / mt_getrandmax() * ($max - $min);

View File

@ -95,9 +95,28 @@ class NumberItemTest extends FieldKernelTestBase {
// Test sample item generation.
$entity = EntityTest::create();
// Make sure that field settings are respected by the generation.
$entity->field_decimal
->getFieldDefinition()
->setSetting('min', 99)
->setSetting('max', 100);
$entity->field_float
->getFieldDefinition()
->setSetting('min', 99)
->setSetting('max', 100);
$entity->field_integer
->getFieldDefinition()
->setSetting('min', 99)
->setSetting('max', 100);
$entity->field_decimal->generateSampleItems();
$entity->field_integer->generateSampleItems();
$entity->field_float->generateSampleItems();
$entity->field_decimal->generateSampleItems();
// Confirm that the generated sample values are within range.
$this->entityValidateAndSave($entity);
}