bar_codes_5.0.0_c211b27c/test/bar_codes_test.adb

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
with Ada.Characters.Handling,
     Ada.Numerics.Float_Random,
     Ada.Streams.Stream_IO;

with Bar_Codes, Bar_Codes_Media;

procedure Bar_Codes_Test is

  procedure Spit (kind : Bar_Codes.Kind_Of_Code; file_name_part, text : String) is
    use Bar_Codes, Bar_Codes_Media;
    use Ada.Characters.Handling, Ada.Streams.Stream_IO;
    png : File_Type;
    prefix : constant String := "test " & To_Lower (kind'Image) & ' ';
  begin
    if file_name_part = "" then
      Create (png, Out_File, prefix & text & ".png");
    else
      Create (png, Out_File, prefix & file_name_part & ".png");
    end if;
    if Code_2D_Square (kind) then
      --  Square 2D codes need square modules.
      PNG_Bar_Code (kind, 2, 2, text, Stream (png).all);
    else
      case kind is
        when Code_1D =>
          --  1D modules are as high as you wish.
          PNG_Bar_Code (kind, 2, 30, text, Stream (png).all);
        when Code_DM_Rectangular =>
          PNG_Bar_Code (kind, 2, 2, text, Stream (png).all);
        when others =>
          pragma Assert (Code_2D_Square (kind));
      end case;
    end if;
    Close (png);
  end Spit;

  procedure Test_128 is
    use Bar_Codes;
    use Ada.Numerics.Float_Random;
    chunks : constant := 2;
    c : Character := ASCII.DEL;
    msg : String (1 .. 128 / chunks);
    rnd : String (1 .. 50);
    gen : Generator;
    n : Positive;
  begin
    for chunk in 1 .. chunks loop
      for i in msg'Range loop
        msg (i) := c;
        if c > ASCII.NUL then
          c := Character'Pred (c);
        end if;
      end loop;
      Spit (Code_128, chunk'Image, msg);
    end loop;
    Spit (Code_128, "vn1", "0520");
    Spit (Code_128, "vn2", "993512176004535560");
    Spit (Code_128,    "", "12345abc1234abc1234567a123bcdef12345");
    Reset (gen, 1);
    for iter in 1 .. 9 loop
      for i in rnd'Range loop
        rnd (i) := Character'Val (32 + Integer (Random (gen) * 95.0));
      end loop;
      --  Put a few non-printable characters...
      for i in rnd'Range loop
        if Random (gen) < 0.1 then
          rnd (i) := ASCII.ESC;
        end if;
      end loop;
      --  Put a few sequences of digits...
      for i in rnd'Range loop
        if Random (gen) < 0.08 then
          n := 1 + Integer (Random (gen) * 6.0);
          for j in i .. Integer'Min (rnd'Last, i + n) loop
            rnd (j) := Character'Val (Character'Pos ('0') + Integer (Random (gen) * 9.0));
          end loop;
        end if;
      end loop;
      Spit (Code_128, "rnd" & iter'Image, rnd);
      --  Digits only (must be all with subcode C):
      for i in rnd'Range loop
        rnd (i) := Character'Val (Character'Pos ('0') + Integer (Random (gen) * 9.0));
      end loop;
      Spit (Code_128, "rnd digits" & iter'Image, rnd);
    end loop;
  end Test_128;

  procedure Test_MSI is
  begin
    Spit (Bar_Codes.Code_MSI, "", "1234567890");
    Spit (Bar_Codes.Code_MSI, "", "1234576890");
    Spit (Bar_Codes.Code_MSI, "", "12345678901");
    Spit (Bar_Codes.Code_MSI, "", "998877665544332211");
    Spit (Bar_Codes.Code_MSI, "", "97531");
    Spit (Bar_Codes.Code_MSI, "", "24680");
  end Test_MSI;

  procedure Test_EAN13 is
  begin
    for initial_digit in Character range '0' .. '9' loop
      Spit (Bar_Codes.Code_EAN13, (1 => initial_digit), initial_digit & "12345678901");
    end loop;
  end Test_EAN13;

  procedure Test_UPCA is
  begin
    Spit (Bar_Codes.Code_UPCA, "", "12345678901");
  end Test_UPCA;

  procedure Test_2D is
    blabla : constant String :=
      "The Corporate Bullshit Generator " &
      " *** " &
      "Short URL (for bookmark and sharing): http://cbsg.sf.net " &
      " *** " &
      "A pre-integrated, non-deterministic and high-performance intellect " &
      "deepens mobility spaces. " &
      "Offshorings expediently generate our world-class and fast-paced brand image. " &
      "A segmentation influences the decision makers, while multi-divisional, " &
      "service-oriented, pipelines quickly streamline evolutions. " &
      "Above-average next steps incentivise the initiator; nevertheless " &
      "the enablers orchestrate the adjustments. A continual increase in " &
      "margins goes hand-in-hand with a measured gain in task efficiency." &
      " *** " &
      "The project Ada Bar Codes provides a package for generating " &
      "various types of bar codes on different output formats," &
      "such as PDF, SVG or bitmaps." &
      " *** " &
      "Zip-Ada is a programming library for dealing with the Zip compressed " &
      "archive file format. The full sources of Zip-Ada are in Ada, " &
      "compilable on every compiler and for every system. For more details, " &
      "read the files zipada.txt and zip.ads from the archive below." &
      " *** " &
      "GLOBE_3D stands for GL Object Based Engine for 3D." &
      "GL stands for Graphics Library, created by SGI. " &
      "SGI stands for Silicon Graphics, Inc. " &
      "Short description: GLOBE_3D is a free, open-source," &
      "real-time 3D Engine written in Ada, based on OpenGL.";
  begin
    for c in Bar_Codes.Code_2D loop
      Spit (c, "blabla 0001", blabla (1 .. 0001));
      Spit (c, "blabla 0010", blabla (1 .. 0010));
      Spit (c, "blabla 0035", blabla (1 .. 0035));
      Spit (c, "blabla 0100", blabla (1 .. 0100));
      Spit (c, "blabla 0250", blabla (1 .. 0250));
      Spit (c, "blabla 0500", blabla (1 .. 0500));
      Spit (c, "blabla full", blabla);
    end loop;
  end Test_2D;
begin
  Test_128;
  Test_MSI;
  Test_EAN13;
  Test_UPCA;
  Test_2D;
end Bar_Codes_Test;