Browse Source

* test for min/max intrinsics

git-svn-id: trunk@47697 -
florian 4 years ago
parent
commit
a16b34d951
2 changed files with 313 additions and 0 deletions
  1. 1 0
      .gitattributes
  2. 312 0
      tests/test/tminmax.pp

+ 1 - 0
.gitattributes

@@ -15356,6 +15356,7 @@ tests/test/tmacprocvar.pp svneol=native#text/plain
 tests/test/tmainnam.pp svneol=native#text/plain
 tests/test/tmainnam.pp svneol=native#text/plain
 tests/test/tmath1.pp svneol=native#text/plain
 tests/test/tmath1.pp svneol=native#text/plain
 tests/test/tmcbool2.pp svneol=native#text/plain
 tests/test/tmcbool2.pp svneol=native#text/plain
+tests/test/tminmax.pp svneol=native#text/pascal
 tests/test/tmmx1.pp svneol=native#text/plain
 tests/test/tmmx1.pp svneol=native#text/plain
 tests/test/tmoperator1.pp svneol=native#text/pascal
 tests/test/tmoperator1.pp svneol=native#text/pascal
 tests/test/tmoperator10.pp svneol=native#text/pascal
 tests/test/tmoperator10.pp svneol=native#text/pascal

+ 312 - 0
tests/test/tminmax.pp

@@ -0,0 +1,312 @@
+{$mode objfpc}
+procedure TestSingle;
+
+  function Min1(a, b: Single): Single; inline;
+    begin
+      if a < b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max1(a, b: Single): Single; inline;
+    begin
+      if a > b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  function Min2(a, b: Single): Single; inline;
+    begin
+      if a <= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max2(a, b: Single): Single; inline;
+    begin
+      if a >= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  var
+    v1,v3 : Single;
+
+  begin
+    v1:=1;
+    v3:=3;
+    if Min1(1,3)<>1 then
+      halt(1);
+    if Max1(1,3)<>3 then
+      halt(2);
+    if Min2(1,3)<>1 then
+      halt(3);
+    if Max2(1,3)<>3 then
+      halt(4);
+    if Min1(1,v3)<>1 then
+      halt(11);
+    if Max1(1,v3)<>3 then
+      halt(12);
+    if Min2(1,v3)<>1 then
+      halt(13);
+    if Max2(1,v3)<>3 then
+      halt(14);
+    if Min1(1,v3)<>1 then
+      halt(21);
+    if Max1(1,v3)<>v3 then
+      halt(22);
+    if Min2(1,v3)<>1 then
+      halt(23);
+    if Max2(1,v3)<>v3 then
+      halt(24);
+    if Min1(v1,v3)<>v1 then
+      halt(31);
+    if Max1(v1,v3)<>v3 then
+      halt(32);
+    if Min2(v1,v3)<>v1 then
+      halt(33);
+    if Max2(v1,v3)<>v3 then
+      halt(34);
+  end;
+
+procedure TestDouble;
+
+  function Min1(a, b: Double): Double; inline;
+    begin
+      if a < b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max1(a, b: Double): Double; inline;
+    begin
+      if a > b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  function Min2(a, b: Double): Double; inline;
+    begin
+      if a <= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max2(a, b: Double): Double; inline;
+    begin
+      if a >= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  var
+    v1,v3 : Double;
+
+  begin
+    v1:=1;
+    v3:=3;
+    if Min1(1,3)<>1 then
+      halt(1);
+    if Max1(1,3)<>3 then
+      halt(2);
+    if Min2(1,3)<>1 then
+      halt(3);
+    if Max2(1,3)<>3 then
+      halt(4);
+    if Min1(1,v3)<>1 then
+      halt(111);
+    if Max1(1,v3)<>3 then
+      halt(112);
+    if Min2(1,v3)<>1 then
+      halt(113);
+    if Max2(1,v3)<>3 then
+      halt(114);
+    if Min1(1,v3)<>1 then
+      halt(121);
+    if Max1(1,v3)<>v3 then
+      halt(122);
+    if Min2(1,v3)<>1 then
+      halt(123);
+    if Max2(1,v3)<>v3 then
+      halt(124);
+    if Min1(v1,v3)<>v1 then
+      halt(131);
+    if Max1(v1,v3)<>v3 then
+      halt(132);
+    if Min2(v1,v3)<>v1 then
+      halt(133);
+    if Max2(v1,v3)<>v3 then
+      halt(134);
+  end;
+
+
+procedure TestDWord;
+
+  function Min1(a, b: DWord): DWord; inline;
+    begin
+      if a < b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max1(a, b: DWord): DWord; inline;
+    begin
+      if a > b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  function Min2(a, b: DWord): DWord; inline;
+    begin
+      if a <= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max2(a, b: DWord): DWord; inline;
+    begin
+      if a >= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  var
+    v1,v3 : DWord;
+
+  begin
+    v1:=1;
+    v3:=3;
+    if Min1(1,3)<>1 then
+      halt(1);
+    if Max1(1,3)<>3 then
+      halt(2);
+    if Min2(1,3)<>1 then
+      halt(3);
+    if Max2(1,3)<>3 then
+      halt(4);
+    if Min1(1,v3)<>1 then
+      halt(211);
+    if Max1(1,v3)<>3 then
+      halt(212);
+    if Min2(1,v3)<>1 then
+      halt(213);
+    if Max2(1,v3)<>3 then
+      halt(214);
+    if Min1(1,v3)<>1 then
+      halt(221);
+    if Max1(1,v3)<>v3 then
+      halt(222);
+    if Min2(1,v3)<>1 then
+      halt(223);
+    if Max2(1,v3)<>v3 then
+      halt(224);
+    if Min1(v1,v3)<>v1 then
+      halt(231);
+    if Max1(v1,v3)<>v3 then
+      halt(232);
+    if Min2(v1,v3)<>v1 then
+      halt(233);
+    if Max2(v1,v3)<>v3 then
+      halt(234);
+  end;
+
+procedure TestLongint;
+
+  function Min1(a, b: Longint): Longint; inline;
+    begin
+      if a < b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max1(a, b: Longint): Longint; inline;
+    begin
+      if a > b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  function Min2(a, b: Longint): Longint; inline;
+    begin
+      if a <= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+
+  function Max2(a, b: Longint): Longint; inline;
+    begin
+      if a >= b then
+        Result := a
+      else
+        Result := b;
+    end;
+
+  var
+    v1,v3 : Longint;
+
+  begin
+    v1:=1;
+    v3:=3;
+    if Min1(1,3)<>1 then
+      halt(1);
+    if Max1(1,3)<>3 then
+      halt(2);
+    if Min2(1,3)<>1 then
+      halt(3);
+    if Max2(1,3)<>3 then
+      halt(4);
+    if Min1(1,v3)<>1 then
+      halt(311);
+    if Max1(1,v3)<>3 then
+      halt(312);
+    if Min2(1,v3)<>1 then
+      halt(313);
+    if Max2(1,v3)<>3 then
+      halt(314);
+    if Min1(1,v3)<>1 then
+      halt(321);
+    if Max1(1,v3)<>v3 then
+      halt(322);
+    if Min2(1,v3)<>1 then
+      halt(323);
+    if Max2(1,v3)<>v3 then
+      halt(324);
+    v1:=1;
+    if Min1(v1,v3)<>v1 then
+      halt(331);
+    if Max1(v1,v3)<>v3 then
+      halt(332);
+    if Min2(v1,v3)<>v1 then
+      halt(333);
+    if Max2(v1,v3)<>v3 then
+      halt(334);
+  end;
+
+begin
+  TestSingle;
+  TestDWord;
+  TestLongint;
+end.