about summary refs log tree commit diff stats
path: root/linux/branches.out
blob: 878a91e513fba4b27894e422d4a6485729c50e11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
== code
foo:
  # . prologue
  55/push-ebp
  89/<- %ebp 4/r32/esp
  {
$foo:0x00000001:loop:
    {
$foo:loop:
      {
        0f 85/jump-if-!= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 85/jump-if-!= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 84/jump-if-= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 84/jump-if-= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8f/jump-if-> break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8f/jump-if-> break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8c/jump-if-< break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8c/jump-if-< break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8d/jump-if->= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8d/jump-if->= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8e/jump-if-<= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 8e/jump-if-<= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 83/jump-if-addr>= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 83/jump-if-addr>= break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 81/jump-if-not-overflow break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 81/jump-if-not-overflow break/disp32
        e9/jump $foo:break/disp32
      }
      {
        0f 85/jump-if-!= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 85/jump-if-!= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 84/jump-if-= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 84/jump-if-= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8f/jump-if-> break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8f/jump-if-> break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8c/jump-if-< break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8c/jump-if-< break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8d/jump-if->= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8d/jump-if->= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8e/jump-if-<= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 8e/jump-if-<= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 83/jump-if-addr>= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 83/jump-if-addr>= break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 82/jump-if-addr< break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 82/jump-if-addr< break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 81/jump-if-not-overflow break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 81/jump-if-not-overflow break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 80/jump-if-overflow break/disp32
        e9/jump $foo:loop/disp32
      }
      {
        0f 80/jump-if-overflow break/disp32
        e9/jump $foo:loop/disp32
      }
    }
$foo:break:
  }
$foo:0x00000001:break:
  # . epilogue
  89/<- %esp 5/r32/ebp
  5d/pop-to-ebp
  c3/return
ccd792da ^
51530916 ^
ac0e9db5 ^
7d13531e ^



eb3a527a ^


fb4836dc ^
eb3a527a ^
51530916 ^

0f125d5f ^
37537bf3 ^


86acd630 ^

0f125d5f ^
eb3a527a ^
65ccad4c ^
6673e1fc ^
40be2522 ^
eb3a527a ^



37537bf3 ^









51530916 ^
f278a15d ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110








                                                                               








                                                       
                       
                                                                             




                      
                                                                                                    
                     
                                                                 




                        
                                                                                                                    

                                                                   
                                                                 

   


                     
                                   
                                            






                                                                                  
 
                                

                                   
                                                             
                          


                
               
                         


                                         

             
           
 
 
       
                         



                                            


                   
             
                          

 
                                  


                                                           

 
                                    
                   
                                                                    
                                                                 
                                                                       



                       









                                              
                        
                 
//: A simple test harness. To create new tests define functions starting with
//: 'test_'. To run all tests so defined, run:
//:   $ wart test
//:
//: So far it seems tasteful for layers to never ever reach back to modify
//: previously-defined tests. Every test is a contract once written, and should
//: pass as-is if it is included, regardless of how much later layers change
//: the program. Avoid writing 'temporary' tests that only work with some
//: subsets of the program.

:(before "End Types")
typedef void (*test_fn)(void);

:(before "End Globals")
const test_fn Tests[] = {
  #include "test_list"  // auto-generated; see makefile
};

bool Run_tests = false;
bool Passed = true;  // set this to false inside any test to indicate failure
long Num_failures = 0;

#define CHECK(X) \
  if (!(X)) { \
    ++Num_failures; \
    cerr << "\nF - " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ << "): " << #X << '\n'; \
    Passed = false; \
    return;  /* Currently we stop at the very first failure. */ \
  }

#define CHECK_EQ(X, Y) \
  if ((X) != (Y)) { \
    ++Num_failures; \
    cerr << "\nF - " << __FUNCTION__ << "(" << __FILE__ << ":" << __LINE__ << "): " << #X << " == " << #Y << '\n'; \
    cerr << "  got " << (X) << '\n';  /* BEWARE: multiple eval */ \
    Passed = false; \
    return;  /* Currently we stop at the very first failure. */ \
  }

:(before "End Setup")
Passed = true;

:(before "End Commandline Parsing")
if (argc > 1 && is_equal(argv[1], "test")) {
  Run_tests = true;  --argc;  ++argv;  // shift 'test' out of commandline args
}

:(before "End Main")
if (Run_tests) {
  // Test Runs
  // we run some tests and then exit; assume no state need be maintained afterward

  // End Test Run Initialization
  time_t t; time(&t);
  cerr << "C tests: " << ctime(&t);
  for (size_t i=0; i < sizeof(Tests)/sizeof(Tests[0]); ++i) {
//?     cerr << i << '\n';
    run_test(i);
  }
  // End Tests
  cerr << '\n';
  if (Num_failures > 0) {
    cerr << Num_failures << " failure"
         << (Num_failures > 1 ? "s" : "")
         << '\n';
    return 1;
  }
  return 0;
}

:(code)
void run_test(size_t i) {
  if (i >= sizeof(Tests)/sizeof(Tests[0])) {
    cerr << "no test " << i << '\n';
    return;
  }
  setup();
  // End Test Setup
  (*Tests[i])();
  teardown();
  if (Passed) cerr << ".";
}

bool is_integer(const string& s) {
  return s.find_first_not_of("0123456789-") == string::npos
      && s.find('-', 1) == string::npos
      && s.find_first_of("0123456789") != string::npos;
}

long long int to_integer(string n) {
  char* end = NULL;
  // safe because string.c_str() is guaranteed to be null-terminated
  long long int result = strtoll(n.c_str(), &end, /*any base*/0);
  if (*end != '\0') cerr << "tried to convert " << n << " to number\n";
  assert(*end == '\0');
  return result;
}

void test_is_integer() {
  CHECK(is_integer("1234"));
  CHECK(is_integer("-1"));
  CHECK(!is_integer("234.0"));
  CHECK(is_integer("-567"));
  CHECK(!is_integer("89-0"));
  CHECK(!is_integer("-"));
  CHECK(!is_integer("1e3"));  // not supported
}

:(before "End Includes")
#include<cstdlib>