tisdigit3.pp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. program tgetnumericvalue3;
  2. {$ifdef FPC}
  3. {$mode objfpc}
  4. {$H+}
  5. {$PACKENUM 1}
  6. {$endif fpc}
  7. {$ifndef FPC}
  8. {$APPTYPE CONSOLE}
  9. {$endif}
  10. uses
  11. SysUtils,
  12. character;
  13. {$ifndef FPC}
  14. type UnicodeChar = WideChar;
  15. {$endif}
  16. function DumpStr(a : UnicodeString) : UnicodeString;
  17. var
  18. i : Integer;
  19. s : UnicodeString;
  20. begin
  21. s := '';
  22. for i := 1 to Length(a) do
  23. s := s + Format('#%x',[Word(a[i])]);
  24. Result := s;
  25. end;
  26. procedure DoError(ACode : Integer; ACodePoint : UnicodeString); overload;
  27. begin
  28. WriteLn('Error #',ACode,' ; String = ',DumpStr(ACodePoint));
  29. Halt(Acode);
  30. end;
  31. var
  32. e : Integer;
  33. s, s2, s3 : UnicodeString;
  34. d : Double;
  35. begin
  36. e := 1;
  37. s := UnicodeChar(Word($D801)) + UnicodeChar(Word($DCA1));
  38. d := 1;
  39. if (TCharacter.GetNumericValue(s,1) <> d) then begin
  40. WriteLn('s=',DumpStr(s),' ; TCharacter.GetNumericValue(s) = ',TCharacter.GetNumericValue(s,1));
  41. DoError(e,s);
  42. end;
  43. Inc(e);
  44. s := UnicodeChar(Word($D801)) + UnicodeChar(Word($DCA3));
  45. d := 3;
  46. if (TCharacter.GetNumericValue(s,1) <> d) then begin
  47. WriteLn('s=',DumpStr(s),' ; TCharacter.GetNumericValue(s) = ',TCharacter.GetNumericValue(s,1));
  48. DoError(e,s);
  49. end;
  50. WriteLn('ok');
  51. end.