View Raw SPL
/*****************************************************************************
*                                                                            *
*   ISEQUAL.SPL  Copyright (C) 2011-2019 DSP Development Corporation         *
*                               All Rights Reserved                          *
*                                                                            *
*   Author:      Randy Race                                                  *
*                                                                            *
*   Synopsis:    Compares two or more inputs                                 *
*                                                                            *
*   Revisions:    4 Mar 2011  RRR  Creation                                  *
*                                                                            *
*****************************************************************************/

#if @HELP_ISEQUAL

    ISEQUAL

    Purpose: Compares two or more inputs for equality.

    Syntax:  ISEQUAL(val1, val2, val3, ..., valN)

                valN - Anything, two or more inputs.

    Returns: An integer, 1 if all inputs equal, else 0.

    Example:
             a = {{1, 2, 3},
                  {4, 5, 6}};

             b = {{1, 2, 3},
                  {4, 5, 6}};

             c = {{4, 5, 6},
                  {1, 2, 3}};

             isequal(a, b)    == 1
             isequal(a, c)    == 0
             isequal(a, b, c) == 0

    Example:
             a = "test";

             b = "test";

             c = "Test";

             isequal(a, b)    == 1
             isequal(a, c)    == 0
             isequal(a, b, c) == 0

    Example:
             a = 100;

             b = 100.0;

             c = {100};

             isequal(a, b)    == 1
             isequal(a, c)    == 1
             isequal(a, b, c) == 1

    Example:
             a = "test";

             b = 100;

             c = "test";

             d = 100;

             isequal(a, b)       == 0
             isequal(a, c)       == 1
             isequal(a, b, c)    == 0
             isequal(a, b, c, d) == 0
             isequal(b, c)       == 0
             isequal(b, d)       == 1

    Remarks:
             ISEQUAL returns 0 for inputs of mixed strings and numerics.

             Strings are compared on a case sensitive basis.

             All scalars are converted to single point series for comparison.

    See Also:
             ==
             isempty
             strcmp
#endif



/* compare two or more inputs for equality */
isequal(argv)
{
        local j, arg1, arg, status = 1;

        if (argc < 2) error("isequal - at least two inputs required");

        arg1 = getargv(1);

        if (isnumeric(arg1))
        {
                /* compare numerics */
                arg1 = castseries(arg1);
                
                loop (j = 2..argc)
                {
                        arg = getargv(j);
                        
                        if (isnumeric(arg))
                        {
                                status &= all(all(arg1 == castseries(arg)));
                        }
                        else
                        {
                                status = 0;
                        }
                        
                        if (not(status)) break;
                }
        }
        else if (isstring(arg1))
        {
                /* compare strings */
                loop (j = 2..argc)
                {
                        arg = getargv(j);
                        
                        if (isstring(arg))
                        {
                                /* case sensitive comparison */
                                status &= (arg1 == arg);
                        }
                        else
                        {
                                status = 0;
                        }
                        
                        if (not(status)) break;
                }
        }
        else if (isobject(arg1))
        {
                arg1 = castobject(arg1);

                /* compare objects */
                loop (j = 2..argc)
                {
                        arg = getargv(j);
                        
                        if (isobject(arg))
                        {
                                /* object comparison */
                                status &= (arg1 == castobject(arg));
                        }
                        else
                        {
                                status = 0;
                        }
                        
                        if (not(status)) break;
                }
        }
        else
        {
                status = 0;
        }

        return(status == 1);
}