function ut_main()
{
    // Array with data for testing
    $long_str = str_repeat('blah', 100);
    $attributes = array('POSITIVE_PREFIX' => array(NumberFormatter::POSITIVE_PREFIX, '_+_', 12345.1234), 'POSITIVE_SUFFIX' => array(NumberFormatter::POSITIVE_SUFFIX, '_+_', 12345.1234), 'NEGATIVE_PREFIX' => array(NumberFormatter::NEGATIVE_PREFIX, '_-_', -12345.1234), 'NEGATIVE_SUFFIX' => array(NumberFormatter::NEGATIVE_SUFFIX, '_-_', -12345.1234), 'PADDING_CHARACTER' => array(NumberFormatter::PADDING_CHARACTER, '^', 12345.1234), 'POSITIVE_PREFIX-2' => array(NumberFormatter::POSITIVE_PREFIX, $long_str, 12345.1234));
    $res_str = '';
    $fmt = ut_nfmt_create("en_US", NumberFormatter::DECIMAL);
    foreach ($attributes as $attr_name => $data) {
        list($attr, $new_val, $test_number) = $data;
        $res_str .= "\nAttribute {$attr_name}\n";
        if ($attr == NumberFormatter::PADDING_CHARACTER) {
            ut_nfmt_set_attribute($fmt, NumberFormatter::FORMAT_WIDTH, 21);
        }
        // Get default attribute's value
        $def_val = ut_nfmt_get_text_attribute($fmt, $attr);
        if ($def_val === false) {
            $res_str .= "get_text_attribute() error: " . ut_nfmt_get_error_message($fmt) . "\n";
        }
        $res_str .= "Default value: [{$def_val}]\n";
        $res_str .= "Formatting number with default value: " . ut_nfmt_format($fmt, $test_number) . "\n";
        // Set new attribute's value and see if it works out.
        $res_val = ut_nfmt_set_text_attribute($fmt, $attr, $new_val);
        if (!$res_val) {
            $res_str .= "set_text_attribute() error: " . ut_nfmt_get_error_message($fmt) . "\n";
        }
        // Get attribute value back.
        $new_val_check = ut_nfmt_get_text_attribute($fmt, $attr);
        $res_str .= "New value: [{$new_val_check}]\n";
        $res_str .= "Formatting number with new value: " . ut_nfmt_format($fmt, $test_number) . "\n";
        // Check if the new value has been set.
        if ($new_val !== $new_val_check) {
            $res_str .= "ERROR: New {$attr_name} symbol value has not been set correctly.\n";
        }
        // Restore attribute's value to default
        ut_nfmt_set_text_attribute($fmt, $attr, $def_val);
        if ($attr == NumberFormatter::PADDING_CHARACTER) {
            ut_nfmt_set_attribute($fmt, NumberFormatter::FORMAT_WIDTH, 0);
        }
    }
    //
    $fmt = ut_nfmt_create("uk_UA", NumberFormatter::CURRENCY);
    $res_str .= sprintf("\nCurrency ISO-code for locale 'uk_UA' is: %s\n", ut_nfmt_get_text_attribute($fmt, NumberFormatter::CURRENCY_CODE));
    return $res_str;
}
function ut_main()
{
    // attr_name => array( attr, value )
    $attributes = array('PARSE_INT_ONLY' => array(NumberFormatter::PARSE_INT_ONLY, 1, 12345.123456), 'GROUPING_USED' => array(NumberFormatter::GROUPING_USED, 0, 12345.123456), 'DECIMAL_ALWAYS_SHOWN' => array(NumberFormatter::DECIMAL_ALWAYS_SHOWN, 1, 12345), 'MAX_INTEGER_DIGITS' => array(NumberFormatter::MAX_INTEGER_DIGITS, 2, 12345.123456), 'MIN_INTEGER_DIGITS' => array(NumberFormatter::MIN_INTEGER_DIGITS, 20, 12345.123456), 'INTEGER_DIGITS' => array(NumberFormatter::INTEGER_DIGITS, 7, 12345.123456), 'MAX_FRACTION_DIGITS' => array(NumberFormatter::MAX_FRACTION_DIGITS, 2, 12345.123456), 'MIN_FRACTION_DIGITS' => array(NumberFormatter::MIN_FRACTION_DIGITS, 20, 12345.123456), 'FRACTION_DIGITS' => array(NumberFormatter::FRACTION_DIGITS, 5, 12345.123456), 'MULTIPLIER' => array(NumberFormatter::MULTIPLIER, 2, 12345.123456), 'GROUPING_SIZE' => array(NumberFormatter::GROUPING_SIZE, 2, 12345.123456), 'ROUNDING_MODE' => array(NumberFormatter::ROUNDING_MODE, 1, 12345.123456), 'ROUNDING_INCREMENT' => array(NumberFormatter::ROUNDING_INCREMENT, (double) 2, 12345.123456), 'FORMAT_WIDTH' => array(NumberFormatter::FORMAT_WIDTH, 27, 12345.123456), 'PADDING_POSITION' => array(NumberFormatter::PADDING_POSITION, 2, 12345.123456), 'SECONDARY_GROUPING_SIZE' => array(NumberFormatter::SECONDARY_GROUPING_SIZE, 2, 12345.123456), 'SIGNIFICANT_DIGITS_USED' => array(NumberFormatter::SIGNIFICANT_DIGITS_USED, 1, 12345.123456), 'MIN_SIGNIFICANT_DIGITS' => array(NumberFormatter::MIN_SIGNIFICANT_DIGITS, 3, 1), 'MAX_SIGNIFICANT_DIGITS' => array(NumberFormatter::MAX_SIGNIFICANT_DIGITS, 4, 12345.123456));
    $res_str = '';
    $fmt = ut_nfmt_create("en_US", NumberFormatter::DECIMAL);
    foreach ($attributes as $attr_name => $args) {
        list($attr, $new_val, $number) = $args;
        $res_str .= "\nAttribute {$attr_name}\n";
        // Get original value of the attribute.
        $orig_val = ut_nfmt_get_attribute($fmt, $attr);
        // Format the number using the original attribute value.
        $rc = ut_nfmt_format($fmt, $number);
        $ps = ut_nfmt_parse($fmt, $rc);
        $res_str .= sprintf("Old attribute value: %s ;  Format result: %s ; Parse result: %s\n", dump($orig_val), dump($rc), dump($ps));
        // Set new attribute value.
        $rc = ut_nfmt_set_attribute($fmt, $attr, $new_val);
        if ($rc) {
            $res_str .= "Setting attribute: ok\n";
        } else {
            $res_str .= sprintf("Setting attribute failed: %s\n", ut_nfmt_get_error_message($fmt));
        }
        // Format the number using the new value.
        $rc = ut_nfmt_format($fmt, $number);
        // Get current value of the attribute and check if it equals $new_val.
        $attr_val_check = ut_nfmt_get_attribute($fmt, $attr);
        if ($attr_val_check !== $new_val) {
            $res_str .= "ERROR: New {$attr_name} attribute value has not been set correctly.\n";
        }
        $ps = ut_nfmt_parse($fmt, $rc);
        $res_str .= sprintf("New attribute value: %s ;  Format result: %s ; Parse result: %s\n", dump($new_val), dump($rc), dump($ps));
        // Restore original attribute of the  value
        if ($attr != NumberFormatter::INTEGER_DIGITS && $attr != NumberFormatter::FRACTION_DIGITS && $attr != NumberFormatter::FORMAT_WIDTH && $attr != NumberFormatter::SIGNIFICANT_DIGITS_USED) {
            ut_nfmt_set_attribute($fmt, $attr, $orig_val);
        }
    }
    return $res_str;
}