1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.supercsv.benchmark;
17  
18  import java.io.File;
19  import java.io.FileReader;
20  import java.io.FileWriter;
21  import java.util.ArrayList;
22  import java.util.Arrays;
23  import java.util.HashMap;
24  import java.util.List;
25  import java.util.Map;
26  
27  import org.junit.BeforeClass;
28  import org.junit.FixMethodOrder;
29  import org.junit.Test;
30  import org.junit.runners.MethodSorters;
31  import org.supercsv.benchmark.cellprocessor.FormatIconColour;
32  import org.supercsv.benchmark.cellprocessor.FormatStopTypeAndName;
33  import org.supercsv.benchmark.model.TransportLocation;
34  import org.supercsv.cellprocessor.Optional;
35  import org.supercsv.cellprocessor.constraint.NotNull;
36  import org.supercsv.cellprocessor.ift.CellProcessor;
37  import org.supercsv.io.CsvBeanReader;
38  import org.supercsv.io.ICsvBeanReader;
39  import org.supercsv.prefs.CsvPreference;
40  import org.supercsv.util.Util;
41  
42  import com.carrotsearch.junitbenchmarks.annotation.BenchmarkMethodChart;
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  @BenchmarkMethodChart(filePrefix = "StandardCsvWritingBenchmark")
55  @FixMethodOrder(MethodSorters.NAME_ASCENDING)
56  public class StandardCsvWritingBenchmarkTest extends AbstractCsvWritingBenchmark {
57  
58  	
59  	private static final String CSV_FILE = "Britain's transport infrastructure.csv";
60  
61  	private static final String OUTPUT_DIR = "target" + File.separator;
62  
63  	private static final CsvPreference PREFS = CsvPreference.STANDARD_PREFERENCE;
64  
65  	private static String[] HEADER;
66  
67  	private static final CellProcessor[] PROCESSORS = { new NotNull(), 
68  			new NotNull(), 
69  			new NotNull(), 
70  			new NotNull(), 
71  			new NotNull(), 
72  			new NotNull(), 
73  			new Optional(), 
74  			new NotNull(), 
75  			new NotNull(), 
76  			new Optional(), 
77  			new NotNull(), 
78  			new Optional(), 
79  			new NotNull(), 
80  			new NotNull(new FormatStopTypeAndName()), 
81  			new NotNull(new FormatIconColour()), 
82  	};
83  
84  	
85  	private static final int ROWS = 50000;
86  
87  	private static List<Object> BEAN_DATA;
88  	private static List<List<Object>> LIST_DATA;
89  	private static List<Map<String, Object>> MAP_DATA;
90  
91  	
92  
93  
94  
95  	@BeforeClass
96  	public static void setUpData() throws Exception {
97  		BEAN_DATA = new ArrayList<Object>();
98  		LIST_DATA = new ArrayList<List<Object>>();
99  		MAP_DATA = new ArrayList<Map<String, Object>>();
100 
101 		ICsvBeanReader beanReader = null;
102 		try {
103 			beanReader = new CsvBeanReader(new FileReader(CSV_FILE),
104 					CsvPreference.STANDARD_PREFERENCE);
105 			HEADER = beanReader.getHeader(true);
106 
107 			for (int j = 0; j < ROWS; j++) {
108 				TransportLocation location = beanReader.read(
109 						TransportLocation.class, HEADER,
110 						StandardCsvReadingBenchmarkTest.PROCESSORS);
111 
112 				
113 				BEAN_DATA.add(location);
114 
115 				
116 				List<Object> list = Arrays.asList(location.toObjectArray());
117 				LIST_DATA.add(list);
118 
119 				
120 				Map<String, Object> map = new HashMap<String, Object>();
121 				Util.filterListToMap(map, HEADER, list);
122 				MAP_DATA.add(map);
123 			}
124 
125 		} finally {
126 			beanReader.close();
127 		}
128 
129 	}
130 
131 	
132 
133 
134 	@Test
135 	public void testCsvListWriter() throws Exception {
136 		timeCsvListWriter(new FileWriter(OUTPUT_DIR + "CsvListWriter" + ROWS
137 				+ ".csv"), PREFS, HEADER, LIST_DATA, ROWS);
138 	}
139 
140 	
141 
142 
143 	@Test
144 	public void testCsvListWriterUsingProcessors() throws Exception {
145 		timeCsvListWriterUsingProcessors(new FileWriter(OUTPUT_DIR
146 				+ "CsvListWriterUsingProcessors" + ROWS + ".csv"), PREFS,
147 				HEADER, LIST_DATA, PROCESSORS, ROWS);
148 
149 	}
150 
151 	
152 
153 
154 	@Test
155 	public void testCsvMapWriter() throws Exception {
156 		timeCsvMapWriter(new FileWriter(OUTPUT_DIR + "CsvMapWriter" + ROWS
157 				+ ".csv"), PREFS, HEADER, MAP_DATA, ROWS);
158 	}
159 
160 	
161 
162 
163 	@Test
164 	public void testCsvMapWriterUsingProcessors() throws Exception {
165 		timeCsvMapWriterUsingProcessors(new FileWriter(OUTPUT_DIR
166 				+ "CsvMapWriterUsingProcessors" + ROWS + ".csv"), PREFS,
167 				HEADER, MAP_DATA, PROCESSORS, ROWS);
168 	}
169 
170 	
171 
172 
173 	@Test
174 	public void testCsvBeanWriter() throws Exception {
175 		timeCsvBeanWriter(new FileWriter(OUTPUT_DIR + "CsvBeanWriter" + ROWS
176 				+ ".csv"), PREFS, HEADER, BEAN_DATA, ROWS);
177 	}
178 
179 	
180 
181 
182 	@Test
183 	public void testCsvBeanWriterUsingProcessors() throws Exception {
184 		timeCsvBeanWriterUsingProcessors(new FileWriter(OUTPUT_DIR
185 				+ "CsvBeanWriterUsingProcessors" + ROWS + ".csv"), PREFS,
186 				HEADER, BEAN_DATA, PROCESSORS, ROWS);
187 	}
188 
189 	
190 
191 
192 	@Test
193 	public void testCsvDozerBeanWriter() throws Exception {
194 		timeCsvDozerBeanWriter(new FileWriter(OUTPUT_DIR + "CsvDozerBeanWriter"
195 				+ ROWS + ".csv"), PREFS, HEADER, TransportLocation.class,
196 				BEAN_DATA, ROWS);
197 	}
198 
199 	
200 
201 
202 	@Test
203 	public void testCsvDozerBeanWriterUsingProcessors() throws Exception {
204 		timeCsvDozerBeanWriterUsingProcessors(new FileWriter(OUTPUT_DIR
205 				+ "CsvDozerBeanWriterUsingProcessors" + ROWS + ".csv"), PREFS,
206 				HEADER, TransportLocation.class, BEAN_DATA, PROCESSORS, ROWS);
207 	}
208 
209 }