blob: 14a53219c8d208cdbe563a65ebf5fa4d38c2290b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.drill.exec.expr;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import org.apache.drill.exec.ExecTest;
public final class EscapeTest1 extends ExecTest{
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(EscapeTest1.class);
public static class Timer{
long n1;
String name;
public Timer(String name){
this.n1 = System.nanoTime();
this.name = name;
}
public void print(long sum){
logger.info("Completed {} in {} ms. Output was {}", name, (System.nanoTime() - n1)/1000/1000, sum);
}
}
public static Timer time(String name){
return new Timer(name);
}
public static void main(String args[]){
EscapeTest1 et = new EscapeTest1();
Monkey m = new Monkey();
for(int i =0; i < 10; i++){
time("noalloc").print(et.noAlloc());
time("alloc").print(et.alloc());
time("set noalloc").print(et.setNoAlloc(m));
time("set alloc").print(et.setAlloc(m));
time("get noalloc").print(et.getNoAlloc(m));
time("get alloc").print(et.getAlloc(m));
time("get return alloc").print(et.getReturnAlloc(m));
}
}
public long noAlloc(){
long sum = 0;
for(int i =0; i < 1000000000; i++){
sum+= add(i+1, i+2);
}
return sum;
}
public long alloc(){
long sum = 0;
for(int i =0; i < 1000000000; i++){
Ad ad = new Ad(i+1, i+2);
sum+= add(ad.x, ad.y);
}
return sum;
}
public long setAlloc(Monkey m){
long sum = 0;
for(int i =0; i < 490000000; i++){
EH h = new EH(i+1, i+2);
m.set(h);
sum += i;
}
return sum;
}
public long setNoAlloc(Monkey m){
long sum = 0;
for(int i =0; i < 490000000; i++){
m.set(i+1, i+2);
sum += i;
}
return sum;
}
public long getAlloc(Monkey m){
long sum = 0;
for(int i =0; i < 490000000; i++){
RR r = new RR();
m.get(i, i+1, r);
sum += r.v1 + r.v2;
}
return sum;
}
public long getNoAlloc(Monkey m){
long sum = 0;
for(int i =0; i < 490000000; i++){
int i1 = m.getV1(i);
int i2 = m.getV2(i+1);
sum += i1 + i2;
}
return sum;
}
public long getReturnAlloc(Monkey m){
long sum = 0;
for(int i =0; i < 490000000; i++){
RR r = m.get(i, i+1);
sum += r.v1 + r.v2;
}
return sum;
}
public class Ad{
long x;
long y;
public Ad(long x, long y) {
super();
this.x = x;
this.y = y;
}
}
public static final class EH{
int index;
int value;
public EH(int index, int value) {
super();
this.index = index;
this.value = value;
}
}
public static final class RR{
int v1;
int v2;
public RR(){
}
public RR(int v1, int v2) {
super();
this.v1 = v1;
this.v2 = v2;
}
}
public long add(long a, long b){
return a + b;
}
public final static class Monkey{
final IntBuffer buf;
public Monkey(){
ByteBuffer bb = ByteBuffer.allocateDirect(Integer.MAX_VALUE);
buf = bb.asIntBuffer();
}
public final void set(int index, int value){
buf.put(index, value);
}
public final void set(EH a){
buf.put(a.index, a.value);
}
public final int getV1(int index){
return buf.get(index);
}
public final int getV2(int index){
return buf.get(index);
}
public final RR get(int index1, int index2){
return new RR(buf.get(index1), buf.get(index2));
}
public final void get(int index1, int index2, RR rr){
rr.v1 = buf.get(index1);
rr.v2 = buf.get(index2);
}
}
}