com.intuit.tank.harness.functions.NumericFunctions.java Source code

Java tutorial

Introduction

Here is the source code for com.intuit.tank.harness.functions.NumericFunctions.java

Source

package com.intuit.tank.harness.functions;

/*
 * #%L
 * Intuit Tank Agent (apiharness)
 * %%
 * Copyright (C) 2011 - 2015 Intuit Inc.
 * %%
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * #L%
 */

import java.util.Random;

import org.apache.commons.lang.math.NumberUtils;

import com.intuit.tank.harness.test.data.Variables;

/**
 * 
 * NumericFunctions
 * 
 * @author dangleton
 * 
 */
class NumericFunctions {

    static Random rnd = new Random();

    /**
     * Is this a valid Numeric function request
     * 
     * @param values
     *            The command
     * @return TRUE if valid format; FALSE otherwise
     */
    static public boolean isValid(String[] values) {
        try {
            if (values[2].equalsIgnoreCase("randompositivewhole")
                    || values[2].equalsIgnoreCase("randomnegativewhole")) {
                if (NumberUtils.isDigits(values[3])) {
                    return true;
                }
            }
            if (values[2].equalsIgnoreCase("randompositivefloat")
                    || values[2].equalsIgnoreCase("randomnegativefloat") || values[2].equalsIgnoreCase("mod")) {
                if (NumberUtils.isDigits(values[3]) && NumberUtils.isDigits(values[4])) {
                    return true;
                }
            }
            if (values[2].equalsIgnoreCase("add") || values[2].equalsIgnoreCase("subtract")) {
                if (NumberUtils.isNumber(values[3]) && NumberUtils.isNumber(values[4])) {
                    for (int i = 5; i < values.length; i++) {
                        if (values[i] != null) {
                            if (!NumberUtils.isNumber(values[i])) {
                                return false;
                            }
                        } else {
                            return true;
                        }
                    }
                }
            }
            return false;
        } catch (Exception ex) {
            return false;
        }
    }

    /**
     * Process the numeric request
     * 
     * @param values
     *            The command line
     * @param variables
     * @return The requested value; "" if there was an error
     */
    static public String executeFunction(String[] values, Variables variables) {
        try {
            if (values[2].equalsIgnoreCase("mod")) {
                return NumericFunctions.mod(NumberUtils.toInt(values[3]), NumberUtils.toInt(values[4]));
            } else if (values[2].equalsIgnoreCase("randompositivewhole")) {
                return NumericFunctions.randomPositiveWhole(NumberUtils.toInt(values[3]));
            } else if (values[2].equalsIgnoreCase("randomnegativewhole")) {
                return NumericFunctions.randomNegativeWhole(NumberUtils.toInt(values[3]));
            } else if (values[2].equalsIgnoreCase("randompositivefloat")) {
                return NumericFunctions.randomPositiveFloat(NumberUtils.toInt(values[3]),
                        NumberUtils.toInt(values[4]));
            } else if (values[2].equalsIgnoreCase("randomnegativefloat")) {
                return NumericFunctions.randomNegativeFloat(NumberUtils.toInt(values[3]),
                        NumberUtils.toInt(values[4]));
            } else if (values[2].equalsIgnoreCase("add")) {
                return NumericFunctions.add(values, variables);
            } else if (values[2].equalsIgnoreCase("subtract")) {
                return NumericFunctions.subtract(values, variables);
            }
            return "";
        } catch (Exception ex) {
            return "";
        }
    }

    /**
     * @param valueOf
     * @return
     */
    private static String mod(int num, int mod) {
        return Integer.toString(num % mod);
    }

    private static String add(String[] values, Variables variables) {
        double result = 0;
        for (int i = 3; i < values.length; i++) {
            if (values[i] != null) {
                result += NumberUtils.toDouble(values[i]);
            } else {
                break;
            }
        }
        return Double.toString(result);
    }

    private static String subtract(String[] values, Variables variables) {
        Double result = null;
        for (int i = 3; i < values.length; i++) {
            if (values[i] != null) {
                if (result == null) {
                    result = NumberUtils.toDouble(values[i]);
                } else {
                    result -= NumberUtils.toDouble(values[i]);
                }
            } else {
                break;
            }
        }
        return Double.toString(result);
    }

    /**
     * Get a random, positive whole number
     * 
     * @param length
     *            The length of the full numbers
     * @return A random whole number
     */
    static public String randomPositiveWhole(int length) {
        if (length == 0) {
            return "";
        }
        StringBuilder output = new StringBuilder(length);
        output.append(rnd.nextInt(8) + 1);
        for (int i = 0; i < length - 1; i++) {
            output.append(rnd.nextInt(9));
        }
        return output.toString();
    }

    /**
     * Get a random, negative whole number
     * 
     * @param length
     *            The length of the full numbers
     * @return A random whole number
     */
    static public String randomNegativeWhole(int length) {
        return "-" + NumericFunctions.randomPositiveWhole(length);
    }

    /**
     * Get a random, positive float
     * 
     * @param whole
     *            The number of whole digits
     * @param decimal
     *            The number of decimal digits
     * @return A random float
     */
    static public String randomPositiveFloat(int whole, int decimal) {
        StringBuilder output = new StringBuilder();
        output.append(rnd.nextInt(8) + 1);
        for (int i = 0; i < whole - 1; i++) {
            output.append(rnd.nextInt(9));
        }
        output.append(".");
        for (int i = 0; i < decimal; i++) {
            output.append(rnd.nextInt(9));
        }
        return output.toString();
    }

    /**
     * Get a random, negative float
     * 
     * @param whole
     *            The number of whole digits
     * @param decimal
     *            The number of decimal digits
     * @return A random float
     */
    static public String randomNegativeFloat(int whole, int decimal) {
        return "-" + NumericFunctions.randomPositiveFloat(whole, decimal);
    }
}