gcompositetest.pp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. {$mode objfpc}
  2. unit gcompositetest;
  3. interface
  4. uses fpcunit, testregistry, gvector, gset;
  5. type vectorlli=specialize TVector<longint>;
  6. matrix = specialize TVector<vectorlli>;
  7. vectorcmp = class
  8. class function c(a,b:vectorlli):boolean;
  9. end;
  10. setvectorlli = specialize TSet<vectorlli, vectorcmp>;
  11. type TGCompositeTest = class(TTestCase)
  12. Published
  13. procedure MatrixTest;
  14. procedure SetVectorTest;
  15. public
  16. procedure Setup;override;
  17. private
  18. data:matrix;
  19. end;
  20. implementation
  21. class function vectorcmp.c(a,b:vectorlli):boolean;
  22. var i:SizeUInt;
  23. begin
  24. if (a.size < b.size) then exit(true);
  25. if (a.size > b.size) then exit(false);
  26. i:=0;
  27. while i < a.size do begin
  28. if (a[i] < b[i]) then exit(true);
  29. inc(i);
  30. end;
  31. exit(false);
  32. end;
  33. procedure TGCompositeTest.SetVectorTest;
  34. var sv:setvectorlli;
  35. v:vectorlli;
  36. begin
  37. sv:=setvectorlli.create;
  38. v:=vectorlli.create;
  39. v.pushback(5);
  40. v.pushback(7);
  41. sv.insert(v);
  42. if sv.find(v) = nil then
  43. Fail('stuff not found');
  44. v:=vectorlli.create;
  45. v.pushback(5);
  46. v.pushback(7);
  47. if sv.find(v) = nil then
  48. Fail('equal stuff not found');
  49. v.pushback(9);
  50. if sv.find(v) <> nil then
  51. Fail('not equal stuff found');
  52. end;
  53. procedure TGCompositeTest.MatrixTest;
  54. var i,j:longint;
  55. begin
  56. data.resize(1000);
  57. for i:=0 to 999 do begin
  58. data[i] := vectorlli.create;
  59. data[i].resize(1000);
  60. data[i][0] := 1;
  61. data[0][i] := 1;
  62. end;
  63. for i:=1 to 999 do begin
  64. for j:=1 to 999 do begin
  65. data[i][j] := (data[i-1][j]+data[i][j-1]) mod 1000000009;
  66. end;
  67. end;
  68. AssertEquals('bad val 5 1', 6, data[5][1]);
  69. AssertEquals('bad val 5 2', 21, data[5][2]);
  70. AssertEquals('bad val 5 5', 252, data[5][5]);
  71. AssertEquals('bad val 50 50', 933591892, data[50][50]);
  72. end;
  73. procedure TGCompositeTest.Setup;
  74. begin
  75. data:=matrix.create;
  76. end;
  77. initialization
  78. RegisterTest(TGCompositeTest);
  79. end.