strnumtest.cc revision 5583
12SN/A/* 21762SN/A * Copyright (c) 2002-2005 The Regents of The University of Michigan 32SN/A * All rights reserved. 42SN/A * 52SN/A * Redistribution and use in source and binary forms, with or without 62SN/A * modification, are permitted provided that the following conditions are 72SN/A * met: redistributions of source code must retain the above copyright 82SN/A * notice, this list of conditions and the following disclaimer; 92SN/A * redistributions in binary form must reproduce the above copyright 102SN/A * notice, this list of conditions and the following disclaimer in the 112SN/A * documentation and/or other materials provided with the distribution; 122SN/A * neither the name of the copyright holders nor the names of its 132SN/A * contributors may be used to endorse or promote products derived from 142SN/A * this software without specific prior written permission. 152SN/A * 162SN/A * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 172SN/A * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 182SN/A * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 192SN/A * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 202SN/A * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 212SN/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 222SN/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 232SN/A * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 242SN/A * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 252SN/A * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 262SN/A * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 272665Ssaidi@eecs.umich.edu * 282665Ssaidi@eecs.umich.edu * Authors: Nathan Binkert 292SN/A */ 302SN/A 315583Snate@binkert.org#include <iostream> 322SN/A#include <string> 332SN/A#include <vector> 342SN/A 3556SN/A#include "base/str.hh" 362SN/A 37239SN/Ausing namespace std; 38239SN/A 392SN/Aint 402SN/Amain(int argc, char *argv[]) 412SN/A{ 425583Snate@binkert.org if (argc != 2) { 435583Snate@binkert.org cout << "Usage: " << argv[0] << " <number>\n"; 445583Snate@binkert.org exit(1); 455583Snate@binkert.org } 462SN/A 475583Snate@binkert.org string s = argv[1]; 482SN/A 492SN/A#define OUTVAL(valtype, type) do { \ 505583Snate@binkert.org valtype value; \ 515583Snate@binkert.org cout << "TYPE = " #valtype "\n"; \ 525583Snate@binkert.org if (to_number(s, value)) { \ 535583Snate@binkert.org cout << "Number(" << s << ") = " << dec \ 545583Snate@binkert.org << (unsigned long long)(unsigned type)value << "\n" \ 555583Snate@binkert.org << "Number(" << s << ") = " << dec \ 565583Snate@binkert.org << (signed long long)(signed type)value << "\n" \ 575583Snate@binkert.org << "Number(" << s << ") = 0x" << hex \ 585583Snate@binkert.org << (unsigned long long)(unsigned type)value << "\n" \ 595583Snate@binkert.org << "Number(" << s << ") = 0" << oct \ 605583Snate@binkert.org << (unsigned long long)(unsigned type)value << "\n\n"; \ 615583Snate@binkert.org } else \ 625583Snate@binkert.org cout << "Number(" << s << ") is invalid\n\n"; \ 635583Snate@binkert.org } while (0) 642SN/A 655583Snate@binkert.org OUTVAL(signed long long, long long); 665583Snate@binkert.org OUTVAL(unsigned long long, long long); 675583Snate@binkert.org OUTVAL(signed long, long); 685583Snate@binkert.org OUTVAL(unsigned long, long); 695583Snate@binkert.org OUTVAL(signed int, int); 705583Snate@binkert.org OUTVAL(unsigned int, int); 715583Snate@binkert.org OUTVAL(signed short, short); 725583Snate@binkert.org OUTVAL(unsigned short, short); 735583Snate@binkert.org OUTVAL(signed char, char); 745583Snate@binkert.org OUTVAL(unsigned char, char); 752SN/A 765583Snate@binkert.org return 0; 772SN/A} 78