blob: e131822a3a6bb1bd67c818d320ac65789644bd50 [file] [log] [blame]
// Licensed to the Apache Software Foundation(ASF) under one
// or more contributor license agreements.See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
unit DataFactory;
interface
uses
SysUtils,
Thrift.Collections,
Thrift.Test;
type
TestDataFactory = class
strict protected
class function CreateSetField(const count : Integer) : IHashSet< IInsanity>; static;
class function CreateInsanity(const count : Integer) : IInsanity; static;
class function CreateBytesArray(const count : Integer) : TBytes; static;
class function CreateXtructs(const count : Integer) : IThriftList< IXtruct>; static;
class function CreateXtruct(const count : Integer) : IXtruct; static;
class function CreateListField(const count : Integer) : IThriftList< IThriftDictionary< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>>; static;
class function CreateUserMap(const count : Integer) : IThriftDictionary< TNumberz, Int64>; static;
class function CreateListFieldData(const count : Integer) : IThriftDictionary< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>; static;
class function CreateIntHashSet(const count : Integer) : IHashSet< Integer>; static;
class function CreateListFieldDataDict(const count : Integer) : IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>; static;
class function CreateListFieldDataDictValue(const count : Integer) : IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>; static;
class function CreateListFieldDataDictValueList(const count : Integer) : IThriftList< IThriftDictionary< IInsanity, string>>; static;
class function CreateListFieldDataDictValueListDict(const count : Integer) : IThriftDictionary< IInsanity, string>; static;
public
class function CreateCrazyNesting(const count : Integer = 10) : ICrazyNesting; static;
end;
implementation
class function TestDataFactory.CreateCrazyNesting(const count : Integer = 10) : ICrazyNesting;
begin
if (count <= 0)
then Exit(nil);
result := TCrazyNestingImpl.Create;
result.Binary_field := CreateBytesArray(count);
result.List_field := CreateListField(count);
result.Set_field := CreateSetField(count);
result.String_field := Format('data level %d', [count]);
end;
class function TestDataFactory.CreateSetField(const count : Integer) : IHashSet< IInsanity>;
var i : Integer;
begin
result := THashSetImpl< IInsanity>.Create;
for i := 0 to count-1 do begin
result.Add(CreateInsanity(count));
end;
end;
class function TestDataFactory.CreateInsanity(const count : Integer) : IInsanity;
begin
result := TInsanityImpl.Create;
result.UserMap := CreateUserMap(count);
result.Xtructs := CreateXtructs(count);
end;
class function TestDataFactory.CreateXtructs(const count : Integer) : IThriftList< IXtruct>;
var i : Integer;
begin
result := TThriftListImpl< IXtruct>.Create;
for i := 0 to count-1 do begin
result.Add(CreateXtruct(count));
end;
end;
class function TestDataFactory.CreateXtruct(const count : Integer) : IXtruct;
begin
result := TXtructImpl.Create;
result.Byte_thing := SmallInt(count mod 128);
result.I32_thing := count;
result.I64_thing := count;
result.String_thing := Format('data level %d', [count]);
end;
class function TestDataFactory.CreateUserMap(const count : Integer) : IThriftDictionary< TNumberz, Int64>;
begin
result := TThriftDictionaryImpl< TNumberz, Int64>.Create;
result.Add(TNumberz.ONE, count);
result.Add(TNumberz.TWO, count);
result.Add(TNumberz.THREE, count);
result.Add(TNumberz.FIVE, count);
result.Add(TNumberz.SIX, count);
result.Add(TNumberz.EIGHT, count);
end;
class function TestDataFactory.CreateListField(const count : Integer) : IThriftList< IThriftDictionary< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>>;
var i : Integer;
begin
result := TThriftListImpl< IThriftDictionary< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>>.Create;
for i := 0 to count-1 do begin
result.Add(CreateListFieldData(count));
end;
end;
class function TestDataFactory.CreateListFieldData(const count : Integer) : IThriftDictionary< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>;
var i : Integer;
begin
result := TThriftDictionaryImpl< IHashSet< Integer>, IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>>.Create;
for i := 0 to count-1 do begin
result.Add( CreateIntHashSet(count), CreateListFieldDataDict(count));
end;
end;
class function TestDataFactory.CreateIntHashSet(const count : Integer) : IHashSet< Integer>;
var i : Integer;
begin
result := THashSetImpl< Integer>.Create;
for i := 0 to count-1 do begin
result.Add(i);
end;
end;
class function TestDataFactory.CreateListFieldDataDict(const count : Integer) : IThriftDictionary< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>;
var i : Integer;
begin
result := TThriftDictionaryImpl< Integer, IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>>.Create;
for i := 0 to count-1 do begin
result.Add(i, CreateListFieldDataDictValue(count));
end;
end;
class function TestDataFactory.CreateListFieldDataDictValue(const count : Integer) : IHashSet< IThriftList< IThriftDictionary< IInsanity, string>>>;
var i : Integer;
begin
result := THashSetImpl< IThriftList< IThriftDictionary< IInsanity, string>>>.Create;
for i := 0 to count-1 do begin
result.Add( CreateListFieldDataDictValueList(count));
end;
end;
class function TestDataFactory.CreateListFieldDataDictValueList(const count : Integer) : IThriftList< IThriftDictionary< IInsanity, string>>;
var i : Integer;
begin
result := TThriftListImpl< IThriftDictionary< IInsanity, string>>.Create;
for i := 0 to count-1 do begin
result.Add(CreateListFieldDataDictValueListDict(count));
end;
end;
class function TestDataFactory.CreateListFieldDataDictValueListDict(const count : Integer) : IThriftDictionary< IInsanity, string>;
begin
result := TThriftDictionaryImpl< IInsanity, string>.Create;
result.Add(CreateInsanity(count), Format('data level %d', [count]));
end;
class function TestDataFactory.CreateBytesArray(const count : Integer) : TBytes;
var i : Integer;
begin
SetLength( result, count);
for i := 0 to count-1 do begin
result[i] := i mod $FF;
end;
end;
end.