package upem.net.udp.selector;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.*;

public class ClientLongSumNIO {


    public static void usage() {
        System.out.println("ClientLongSumUDP dest port");
    }

    private static List<Long> randomLongList(int size){
        Random rng= new Random();
        List<Long> list= new ArrayList<>(size);
        for(int i=0;i<size;i++){
            list.add(rng.nextLong());
        }
        return list;
    }

    private static boolean checkSum(List<Long> list, long response) {
        long sum = 0;
        for(long l : list)
            sum += l;
        return sum==response;
    }

    private static int testNumber=0;

    private static void test(RequesterLongSumNIO requester,int size,int timeMilliSecond) throws IOException {
        testNumber++;
        List<Long> list;
        list=randomLongList(size);
        if (checkSum(list,requester.query(list,timeMilliSecond))) {
            System.out.println("Test "+ testNumber +" passed.");
        } else {
            System.out.println("Test "+testNumber +" failed.");
        }
    }

    public static void main(String[] args) throws InterruptedException, IOException {
        if (args.length != 2) {
            usage();
            return;
        }

        InetSocketAddress dest = new InetSocketAddress(args[0], Integer.parseInt(args[1]));

        RequesterLongSumNIO requester = new RequesterLongSumNIO(dest);
        test(requester,100,100);
        test(requester,100,50);
        test(requester,1000,50);
        test(requester,10000,100);
    }
 }
