1 /** 2 * Copyright (c) 2008, 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 main(String args[])30 public static void main(String args[]) { 31 junit.textui.TestRunner.run(suite()); 32 } 33 suite()34 public static Test suite() { 35 return new TestSuite(StressTest.class); 36 } 37 setUp()38 public void setUp() { 39 doc = Util.getLocalResource("specification/example2_27.yaml"); 40 } 41 testPerformance()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 }