Im folgenden Ada-Code:merkwürdige Stringlänge Begrenzung (/ Trimmen) in Vector - Ada
package body TestMyApp is
use type Base_Types.Natural16;
use type Base_Types.Integer32;
use type C.Strings.Chars_Ptr;
use type C.Size_T;
-- Error Messages length should be limited by upper bound 'Err_Msg_Max_Len'
Err_Msg_Max_Length : constant C.Size_T := 100;
Glb_C_Err_Msg_String : aliased C.Char_Array := (1..(Err_Msg_Max_Length + 1) => C.nul);
function Fixed_String_To_Chr_Ptr (Source_String : String;
Trim_For_Whitespaces : Boolean) return C.Strings.Chars_Ptr is
Ptr : C.Strings.Chars_Ptr := C.Strings.Null_Ptr;
Elem_Copied_Count : C.Size_T := 0;
begin
-- Reset each character in Glb_C_Err_Msg_String array to nul
Glb_C_Err_Msg_String := (1..(Err_Msg_Max_Length + 1) => C.nul);
-- Check whether source string is of acceptable length
if Source_String'Length <= Natural(Err_Msg_Max_Length) then
if Trim_For_Whitespaces = True then
-- Copy fixed string elements into char_array with
-- source string's both side trimmed for whitespaces
C.To_C(Item => Ada.Strings.Fixed.Trim(Source => Source_String, Side => Ada.Strings.Both),
Target => Glb_C_Err_Msg_String,
Count => Elem_Copied_Count,
Append_Nul => True);
else
-- Copy fixed string elements into char_array
C.To_C(Item => Source_String,
Target => Glb_C_Err_Msg_String,
Count => Elem_Copied_Count,
Append_Nul => True);
end if;
-- Convert char_array into char_ptr
Ptr := C.Strings.To_Chars_Ptr(Item => Glb_C_Err_Msg_String'Access,
Nul_Check => True);
else
Ptr := C.Strings.Null_Ptr;
end if;
-- Return the char_ptr
return Ptr;
end Fixed_String_To_Chr_Ptr;
end TestMyApp;
Während Komponententests in Vector-Ada, wenn die Länge der Zeichenfolge (Source_String) wobei auf die Funktion Fixed_String_To_Chr_Ptr() übergeben kleiner oder gleich 100 (Err_Msg_Max_Length) bekam die Funktion richtig ausgeführt wird und die folgende, wenn die Bedingung:
if Source_String'Length <= Natural(Err_Msg_Max_Length) then
wurde richtig zu True ausgewertet. Aber seltsam, wenn die wenn die Länge der Zeichenfolge (Source_String) an der Funktion Fixed_String_To_Chr_Ptr übergeben wird() größer als 100 (Err_Msg_Max_Length), die Funktion noch TRUE ausgewertet, um die oben genannte Bedingung true die sollte überhaupt nicht passieren, da die Länge der Zeichenfolge größer ist als Err_Msg_Max_Length. Beim Debugging wurde beobachtet, dass die Länge der Zeichenfolge (Source_String), die an die Funktion Fixed_String_To_Chr_Ptr() übergeben wurde, größer als 100 war. Die Funktion beschränkte/kürzte ihre Länge intern auf 100 ** (Err_Msg_Max_Length) * * nur.
Irgendwelche Ideen, was hier falsch ist?
Was ist Vektorübertragung? – darkestkhan
https://www.vectorcast.com/software-testing-products/ada-unit-testing –
Meine Vermutung ist, dass Sie nicht genau die hier gezeigte Funktion testen. –