View Javadoc

1   /**
2    * Copyright (c) 2008-2012, http://www.snakeyaml.org
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.yaml.snakeyaml.stress;
17  
18  import junit.framework.Test;
19  import junit.framework.TestCase;
20  import junit.framework.TestSuite;
21  
22  import org.yaml.snakeyaml.Invoice;
23  import org.yaml.snakeyaml.Util;
24  import org.yaml.snakeyaml.Yaml;
25  import org.yaml.snakeyaml.constructor.Constructor;
26  
27  public class StressTest extends TestCase {
28      String doc;
29  
30      public static void main(String args[]) {
31          junit.textui.TestRunner.run(suite());
32      }
33  
34      public static Test suite() {
35          return new TestSuite(StressTest.class);
36      }
37  
38      public void setUp() {
39          doc = Util.getLocalResource("specification/example2_27.yaml");
40      }
41  
42      public void testPerformance() {
43          long time1 = System.nanoTime();
44          new Yaml(new Constructor(Invoice.class));
45          long time2 = System.nanoTime();
46          float duration = (time2 - time1) / 1000000;
47          System.out.println("Init was " + duration + " ms.");
48  
49          Yaml loader = new Yaml();
50          time1 = System.nanoTime();
51          loader.loadAs(doc, Invoice.class);
52          time2 = System.nanoTime();
53          duration = (time2 - time1) / 1000000;
54          System.out.println("\nSingle load was " + duration + " ms.");
55  
56          loader = new Yaml();
57          int[] range = new int[] { 1000, 2000 /* , 4000, 8000 */};
58          System.out.println("\nOne instance.");
59          for (int number : range) {
60              time1 = System.nanoTime();
61              for (int i = 0; i < number; i++) {
62                  loader.loadAs(doc, Invoice.class);
63              }
64              time2 = System.nanoTime();
65              duration = ((time2 - time1) / 1000000) / (float) number;
66              System.out.println("Duration for r=" + number + " was " + duration + " ms/load.");
67              // cobertura may make it very slow
68              if (duration > 3) {
69                  System.err.println("!!!!!! Too long. Expected <1 but was " + duration);
70              }
71              // assertTrue("duration=" + duration, duration < 3);
72          }
73  
74          System.out.println("\nMany instances.");
75          for (int number : range) {
76              time1 = System.nanoTime();
77              for (int i = 0; i < number; i++) {
78                  loader = new Yaml();
79                  loader.loadAs(doc, Invoice.class);
80              }
81              time2 = System.nanoTime();
82              duration = ((time2 - time1) / 1000000) / (float) number;
83              System.out.println("Duration for r=" + number + " was " + duration + " ms/load.");
84              // cobertura may make it very slow
85              if (duration > 3) {
86                  System.err.println("!!!!!! Too long. Expected <1 but was " + duration);
87              }
88              // assertTrue("duration=" + duration, duration < 3);
89          }
90      }
91  }