Pārlūkot izejas kodu

poprawiony błąd w Collections:Stack#pop

poprawione (usunięte) dziwne błedy w testach Proactora
Ranides Atterwim 12 gadi atpakaļ
vecāks
revīzija
d4aced07e4

+ 1 - 1
src/main/java/net/ranides/assira/collection/Stack.java

@@ -87,7 +87,7 @@ public class Stack<T> extends AbstractList<T> implements RandomAccess, Serializa
      * @return
      */
     public final T peek() {
-        return (T)items[pointer];
+        return (T)items[pointer-1];
     }
 
     /**

+ 1 - 1
src/test/java/net/ranides/assira/events/EventJoinTest.java

@@ -82,7 +82,7 @@ public class EventJoinTest {
         main.stop();
 
         assertEquals(SetUtils.asHashSet("global", "io", "write", "read", "exit", "shutdown"), hits.keySet());
-        assertEquals(ArrayUtils.asList(0,3,6,7,10,12,14,15), hits.get("global"));
+        assertEquals(ArrayUtils.asList(0,3,6,7,10,12,14), hits.get("global"));
         assertEquals(ArrayUtils.asList(1,4, 8), hits.get("io"));
         assertEquals(ArrayUtils.asList(2), hits.get("write"));
         assertEquals(ArrayUtils.asList(5, 9), hits.get("read"));

+ 2 - 9
src/test/java/net/ranides/assira/events/EventProactorTest.java

@@ -67,16 +67,9 @@ public class EventProactorTest {
         main.addEventListener(FloodEvent.class, hits.new HitListener<FloodEvent>("flood") );
         main.addEventListener(CoreEvent.Shutdown.class, hits.new HitListener<CoreEvent.Shutdown>("shutdown") );
         main.addEventListener(CoreEvent.Stop.class, hits.new HitListener<CoreEvent.Stop>("exit") );
-        main.addEventListener(FloodEvent.class, new EventListener<FloodEvent>(){
 
-            @Override
-            public void handleEvent(FloodEvent event) {
-                throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
-            }
-
-        });
-                        // we consume thread, but not lock handler
-                TimeUtils.sleep(25);
+        // we consume thread, but not lock handler
+        TimeUtils.sleep(25);
 
 
         main.signalEvent(new WriteEvent());

+ 87 - 6
src/test/java/net/ranides/assira/math/PVNumberTest.java

@@ -6,11 +6,14 @@
  */
 package net.ranides.assira.math;
 
+import java.lang.reflect.Method;
 import java.util.SortedMap;
 import java.util.TreeMap;
 import net.ranides.assira.annotations.PMD;
 import net.ranides.assira.text.StringUtils;
+import net.ranides.assira.time.TimeStack;
 import static org.junit.Assert.*;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -37,12 +40,12 @@ import org.junit.Test;
 
             int im = parts[0].length();
             for(int i=0; i<im; i++) {
-                data.put(im-i-1, parts[0].charAt(i)-'0');
+                data.put(im-i-1, PVMath.c2i(parts[0].charAt(i)) );
             }
             if( parts.length > 1) {
                 int fm = parts[1].length();
                 for(int i=0; i<fm; i++) {
-                    data.put(-i-1, parts[1].charAt(i)-'0');
+                    data.put(-i-1, PVMath.c2i(parts[1].charAt(i)));
                 }
             }
         }
@@ -121,11 +124,16 @@ import org.junit.Test;
         assertEquals("1:1 0:7 -1:9 -2:2 -3:3", digitHash(ri("17.923")) );
     }
 
+    @Test
+    public void testRem() {
+        System.out.println(rem(ri("567.19"),ri("0.5")));
+    }
+
     @Test
     public void testRebase() {
-        System.out.println(" rebase = " + irebase(2, ri(0xA4)));
-        System.out.println(" rebase = " + irebase(16, ri(0xA4)) );
-        System.out.println(" rebase = " + irebase(16, ri(0xC8A4)) );
+//        assertEquals("10100100", irebase(2, ri(0xA4)).toString() );
+//        assertEquals("A4", irebase(16, ri(0xA4)).toString() );
+//        assertEquals("C8A4", irebase(16, ri(0xC8A4)).toString() );
     }
 
     private static PVNumber irebase(int base, PVNumber number) {
@@ -142,7 +150,17 @@ import org.junit.Test;
     }
 
     private static PVNumber rem(PVNumber n1, PVNumber n2) {
-        return new RINumber( String.valueOf(n1.longValue() % n2.longValue()) );
+        long v1 = 0;
+        for(PVNumber.Digit d : n1.digits()) {
+            v1 = v1*n1.base() + d.value();
+        }
+        System.out.println("v1 = " + v1);
+        long v2 = 0;
+        for(PVNumber.Digit d : n2.digits()) {
+            v2 = v2*n2.base() + d.value();
+        }
+        System.out.println("v2 = " + v2);
+        return new RINumber( String.valueOf(v1 % v2) );
     }
 
     private static PVNumber div(PVNumber n1, PVNumber n2) {
@@ -172,4 +190,67 @@ import org.junit.Test;
         return new RINumber(String.valueOf(value));
     }
 
+
+
+    @Ignore
+    @Test
+    public void testPerf() throws Exception {
+        Method mbi = ICounter.class.getMethod("increment");
+        for(int i=0; i<5; i++) {
+            runPerf(mbi);
+        }
+
+    }
+
+    private void runPerf(Method mbi) throws Exception {
+        Object[] ARGS = new Object[0];
+        int N = 1000000;
+        ICounter a = (ICounter)Class.forName("net.ranides.assira.math.PVNumberTest$TCounter").newInstance();
+        ICounter b = (ICounter)Class.forName("net.ranides.assira.math.PVNumberTest$TCounter").newInstance();
+
+
+        TimeStack t1 = new TimeStack();
+        for(int i=0; i<N; i++) {
+            a.increment();
+        }
+        System.out.printf("%d direct  = %4d ms\n", a.result(), t1.stop());
+
+        TimeStack t2 = new TimeStack();
+        for(int i=0; i<N; i++) {
+            mbi.invoke(b, ARGS);
+        }
+        System.out.printf("%d reflect = %4d ms\n", b.result(), t2.stop());
+
+        TimeStack t3 = new TimeStack();
+        int mr = 0;
+        for(int i=0; i<N; i++) {
+            mr += 10 * Math.random();
+        }
+        System.out.printf("%d random  = %4d ms\n", mr, t3.stop());
+    }
+
+    private interface ICounter {
+
+        void increment();
+
+        int result();
+
+    }
+
+    private static class TCounter implements ICounter {
+        private int mResult;
+
+        public TCounter() {
+            mResult = 0;
+        }
+
+        public void increment() {
+            mResult += 10 * Math.random();
+        }
+
+        public int result() {
+            return mResult;
+        }
+    }
+
 }