1 // Licensed to the Apache Software Foundation(ASF) under one
2 // or more contributor license agreements.See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership.The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing,
12 // software distributed under the License is distributed on an
13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 // KIND, either express or implied. See the License for the
15 // specific language governing permissions and limitations
16 // under the License.
17 
18 using System;
19 using System.Collections.Generic;
20 using System.Text;
21 using ThriftTest;
22 using Thrift.Collections;
23 
24 namespace Client.Tests
25 {
26 
27     static class TestDataFactory
28     {
CreateCrazyNesting(int count = 10)29         public static CrazyNesting CreateCrazyNesting(int count = 10)
30         {
31             if (count <= 0)
32                 return null;
33 
34             return new CrazyNesting()
35             {
36                 Binary_field = CreateBytesArray(count),
37                 List_field = CreateListField(count),
38                 Set_field = CreateSetField(count),
39                 String_field = string.Format("data level {0}", count)
40             };
41         }
42 
CreateSetField(int count)43         private static THashSet<Insanity> CreateSetField(int count)
44         {
45             var retval = new THashSet<Insanity>();
46             for (var i = 0; i < count; ++i)
47                 retval.Add(CreateInsanity(count));
48             return retval;
49         }
50 
CreateInsanity(int count)51         private static Insanity CreateInsanity(int count)
52         {
53             return new Insanity()
54             {
55                 UserMap = CreateUserMap(count),
56                 Xtructs = CreateXtructs(count)
57             };
58         }
59 
CreateXtructs(int count)60         private static List<Xtruct> CreateXtructs(int count)
61         {
62             var retval = new List<Xtruct>();
63             for (var i = 0; i < count; ++i)
64                 retval.Add(CreateXtruct(count));
65             return retval;
66         }
67 
CreateXtruct(int count)68         private static Xtruct CreateXtruct(int count)
69         {
70             return new Xtruct()
71             {
72                 Byte_thing = (sbyte)(count % 128),
73                 I32_thing = count,
74                 I64_thing = count,
75                 String_thing = string.Format("data level {0}", count)
76             };
77         }
78 
CreateUserMap(int count)79         private static Dictionary<Numberz, long> CreateUserMap(int count)
80         {
81             var retval = new Dictionary<Numberz, long>();
82             retval.Add(Numberz.ONE, count);
83             retval.Add(Numberz.TWO, count);
84             retval.Add(Numberz.THREE, count);
85             retval.Add(Numberz.FIVE, count);
86             retval.Add(Numberz.SIX, count);
87             retval.Add(Numberz.EIGHT, count);
88             return retval;
89         }
90 
CreateListField(int count)91         private static List<Dictionary<THashSet<int>, Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>>>> CreateListField(int count)
92         {
93             var retval = new List<Dictionary<THashSet<int>, Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>>>>();
94             for (var i = 0; i < count; ++i)
95                 retval.Add(CreateListFieldData(count));
96             return retval;
97         }
98 
CreateListFieldData(int count)99         private static Dictionary<THashSet<int>, Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>>> CreateListFieldData(int count)
100         {
101             var retval = new Dictionary<THashSet<int>, Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>>>();
102             for (var i = 0; i < count; ++i)
103                 retval.Add( CreateIntHashSet(count), CreateListFieldDataDict(count));
104             return retval;
105         }
106 
CreateIntHashSet(int count)107         private static THashSet<int> CreateIntHashSet(int count)
108         {
109             var retval = new THashSet<int>();
110             for (var i = 0; i < count; ++i)
111                 retval.Add(i);
112             return retval;
113         }
114 
CreateListFieldDataDict(int count)115         private static Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>> CreateListFieldDataDict(int count)
116         {
117             var retval = new Dictionary<int, THashSet<List<Dictionary<Insanity, string>>>>();
118             for (var i = 0; i < count; ++i)
119                 retval.Add(i, CreateListFieldDataDictValue(count));
120             return retval;
121         }
122 
CreateListFieldDataDictValue(int count)123         private static THashSet<List<Dictionary<Insanity, string>>> CreateListFieldDataDictValue(int count)
124         {
125             var retval = new THashSet<List<Dictionary<Insanity, string>>>();
126             for (var i = 0; i < count; ++i)
127                 retval.Add( CreateListFieldDataDictValueList(count));
128             return retval;
129         }
130 
CreateListFieldDataDictValueList(int count)131         private static List<Dictionary<Insanity, string>> CreateListFieldDataDictValueList(int count)
132         {
133             var retval = new List<Dictionary<Insanity, string>>();
134             for (var i = 0; i < count; ++i)
135                 retval.Add(CreateListFieldDataDictValueListDict(count));
136             return retval;
137         }
138 
CreateListFieldDataDictValueListDict(int count)139         private static Dictionary<Insanity, string> CreateListFieldDataDictValueListDict(int count)
140         {
141             var retval = new Dictionary<Insanity, string>();
142             retval.Add(CreateInsanity(count), string.Format("data level {0}", count));
143             return retval;
144         }
145 
CreateBytesArray(int count)146         private static byte[] CreateBytesArray(int count)
147         {
148             var retval = new byte[count];
149             for (var i = 0; i < count; ++i)
150                 retval[i] = (byte)(i % 0xFF);
151             return retval;
152         }
153     }
154 }
155