annotate tests/xttest_scalar.cpp @ 267:41fe82c7ff80

Add more F0 tests
author Jamie Bullock <jamie@jamiebullock.com>
date Tue, 11 Nov 2014 16:15:28 +0000
parents ecd6f2cf1346
children b371ffcecb74
rev   line source
jamie@264 1
jamie@264 2 #include "xttest_util.hpp"
jamie@264 3
jamie@264 4 #include "xtract/xtract_scalar.h"
jamie@267 5 #include "xtract/libxtract.h"
jamie@264 6
jamie@264 7 #include "catch.hpp"
jamie@264 8
jamie@264 9
jamie@267 10 SCENARIO( "F0 is correctly detected for a sine wave", "[xtract_f0]" )
jamie@264 11 {
jamie@267 12 uint16_t expected = 0;
jamie@267 13 uint16_t actual = 0;
jamie@267 14
jamie@267 15 GIVEN( "a 512 sample block with a sample rate of 44100" )
jamie@267 16 {
jamie@267 17 uint32_t blocksize = 512;
jamie@267 18 double samplerate = 44100;
jamie@267 19 double result = -1.0;
jamie@267 20 double amplitude = 1.0;
jamie@267 21 double table[blocksize];
jamie@267 22
jamie@267 23 WHEN( "the frequency is 86.1328125 Hz" ) // period of exactly 512 samples: 1 cycles in the block
jamie@267 24 {
jamie@267 25 double frequency = 86.1328125;
jamie@267 26
jamie@267 27 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 28 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 29
jamie@267 30 THEN( "frequency detection fails correctly (XTRACT_NO_RESULT is returned, result set to 0.0)" )
jamie@267 31 {
jamie@267 32 REQUIRE(rv == XTRACT_NO_RESULT);
jamie@267 33 REQUIRE(result == 0.0);
jamie@267 34 }
jamie@267 35 }
jamie@267 36
jamie@267 37 WHEN( "the frequency is 172.265625 Hz" ) // period of exactly 256 samples: 2 cycles in the block
jamie@267 38 {
jamie@267 39 double frequency = 172.265625;
jamie@267 40
jamie@267 41 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 42 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 43
jamie@267 44 THEN( "frequency detection fails correctly (XTRACT_NO_RESULT is returned, result set to 0.0)" )
jamie@267 45 {
jamie@267 46 REQUIRE(rv == XTRACT_NO_RESULT);
jamie@267 47 REQUIRE(result == 0.0);
jamie@267 48 }
jamie@267 49 }
jamie@267 50
jamie@267 51 WHEN( "the frequency is 344.53125 Hz" ) // period of exactly 128 samples: 4 cycles in the block
jamie@267 52 {
jamie@267 53 double frequency = 344.53125;
jamie@267 54
jamie@267 55 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 56 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 57
jamie@267 58 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 59 {
jamie@267 60 actual = xttest_ftom(result);
jamie@267 61 expected = xttest_ftom(frequency);
jamie@267 62 CAPTURE( actual );
jamie@267 63 CAPTURE( expected );
jamie@267 64 REQUIRE(actual == expected);
jamie@267 65 }
jamie@267 66
jamie@267 67
jamie@267 68 WHEN( "the amplitude is 0.01" ) // Only test a different amplitude for one case
jamie@267 69 {
jamie@267 70 double amplitude = 0.01;
jamie@267 71
jamie@267 72 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 73 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 74
jamie@267 75 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 76 {
jamie@267 77 actual = xttest_ftom(result);
jamie@267 78 expected = xttest_ftom(frequency);
jamie@267 79 CAPTURE( actual );
jamie@267 80 CAPTURE( expected );
jamie@267 81 REQUIRE(actual == expected);
jamie@267 82 }
jamie@267 83 }
jamie@267 84 }
jamie@267 85 }
jamie@267 86
jamie@264 87 GIVEN( "a 1024 sample block with a sample rate of 44100" )
jamie@264 88 {
jamie@264 89 uint32_t blocksize = 1024;
jamie@264 90 double samplerate = 44100;
jamie@267 91 double result = -1.0;
jamie@264 92 double table[blocksize];
jamie@264 93
jamie@267 94 WHEN( "the frequency is 86.1328125 Hz" ) // period of exactly 512 samples: 2 cycles in the block
jamie@267 95 {
jamie@267 96 double frequency = 86.1328125;
jamie@267 97 double amplitude = 1.0;
jamie@267 98
jamie@267 99 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 100 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 101
jamie@267 102 THEN( "frequency detection fails correctly (XTRACT_NO_RESULT is returned, result set to 0.0)" )
jamie@267 103 {
jamie@267 104 REQUIRE(rv == XTRACT_NO_RESULT);
jamie@267 105 REQUIRE(result == 0.0);
jamie@267 106 }
jamie@267 107 }
jamie@267 108
jamie@267 109 WHEN( "the frequency is 172.265625 Hz" ) // period of exactly 256 samples: 4 cycles in the block
jamie@267 110 {
jamie@267 111 double frequency = 172.265625;
jamie@267 112 double amplitude = 1.0;
jamie@267 113
jamie@267 114 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 115 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 116
jamie@267 117 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 118 {
jamie@267 119 actual = xttest_ftom(result);
jamie@267 120 expected = xttest_ftom(frequency);
jamie@267 121 CAPTURE( actual );
jamie@267 122 CAPTURE( expected );
jamie@267 123 REQUIRE(actual == expected);
jamie@267 124 }
jamie@267 125 }
jamie@267 126
jamie@267 127 WHEN( "the frequency is 344.53125 Hz" ) // period of exactly 128 samples: 8 cycles in the block
jamie@264 128 {
jamie@264 129 double frequency = 344.53125;
jamie@267 130 expected = xttest_ftom(frequency);
jamie@267 131 CAPTURE( expected );
jamie@264 132
jamie@264 133 WHEN( "the amplitude is 1.0" )
jamie@264 134 {
jamie@264 135 double amplitude = 1.0;
jamie@264 136
jamie@264 137 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@264 138 xtract_f0(table, blocksize, &samplerate, &result);
jamie@264 139
jamie@267 140 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@264 141 {
jamie@267 142 actual = xttest_ftom(result);
jamie@267 143 CAPTURE( actual );
jamie@267 144 REQUIRE(actual == expected);
jamie@264 145 }
jamie@264 146 }
jamie@267 147
jamie@267 148 WHEN( "the amplitude is 0.01" ) // Only test a different amplitude for one case
jamie@264 149 {
jamie@267 150 double amplitude = 0.01;
jamie@264 151
jamie@264 152 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@264 153 xtract_f0(table, blocksize, &samplerate, &result);
jamie@264 154
jamie@267 155 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@264 156 {
jamie@267 157 actual = xttest_ftom(result);
jamie@267 158 CAPTURE( actual );
jamie@267 159 REQUIRE(actual == expected);
jamie@267 160 }
jamie@267 161 }
jamie@267 162
jamie@267 163 WHEN( "white noise is added at 10%" ) // Only test noise for one case
jamie@267 164 {
jamie@267 165 double amplitude = 0.1;
jamie@267 166 double noise[blocksize];
jamie@267 167
jamie@267 168 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 169 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 170 xttest_add(table, noise, blocksize);
jamie@267 171 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 172
jamie@267 173 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 174 {
jamie@267 175 actual = xttest_ftom(result);
jamie@267 176 CAPTURE( actual );
jamie@267 177 REQUIRE(actual == expected);
jamie@267 178 }
jamie@267 179 }
jamie@267 180
jamie@267 181 WHEN( "white noise is added at 20%" )
jamie@267 182 {
jamie@267 183 double amplitude = 0.2;
jamie@267 184 double noise[blocksize];
jamie@267 185
jamie@267 186 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 187 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 188 xttest_add(table, noise, blocksize);
jamie@267 189 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 190
jamie@267 191 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 192 {
jamie@267 193 actual = xttest_ftom(result);
jamie@267 194 CAPTURE( actual );
jamie@267 195 REQUIRE(actual == expected);
jamie@267 196 }
jamie@267 197 }
jamie@267 198
jamie@267 199 WHEN( "white noise is added at 25%" )
jamie@267 200 {
jamie@267 201 double amplitude = 0.25;
jamie@267 202 double noise[blocksize];
jamie@267 203
jamie@267 204 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 205 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 206 xttest_add(table, noise, blocksize);
jamie@267 207 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 208
jamie@267 209 THEN( "the detected F0 is accurate to the nearest semitone" )
jamie@267 210 {
jamie@267 211 actual = xttest_ftom(result);
jamie@267 212 uint16_t min = expected - 100;
jamie@267 213 uint16_t max = expected + 100;
jamie@267 214 CAPTURE( actual );
jamie@267 215 REQUIRE( actual > min );
jamie@267 216 REQUIRE( actual < max );
jamie@267 217 }
jamie@267 218 }
jamie@267 219
jamie@267 220 WHEN( "white noise is added at 30%" )
jamie@267 221 {
jamie@267 222 double amplitude = 0.25;
jamie@267 223 double noise[blocksize];
jamie@267 224
jamie@267 225 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 226 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 227 xttest_add(table, noise, blocksize);
jamie@267 228 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 229
jamie@267 230 THEN( "the detected F0 is accurate to the nearest quarter-tone" )
jamie@267 231 {
jamie@267 232 actual = xttest_ftom(result);
jamie@267 233 uint16_t min = expected - 50;
jamie@267 234 uint16_t max = expected + 50;
jamie@267 235 CAPTURE( actual );
jamie@267 236 REQUIRE( actual > min );
jamie@267 237 REQUIRE( actual < max );
jamie@267 238 }
jamie@267 239 }
jamie@267 240
jamie@267 241 WHEN( "white noise is added at 35%" )
jamie@267 242 {
jamie@267 243 double amplitude = 0.35;
jamie@267 244 double noise[blocksize];
jamie@267 245
jamie@267 246 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 247 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 248 xttest_add(table, noise, blocksize);
jamie@267 249 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 250
jamie@267 251 THEN( "the detected F0 is inaccurate by more than one semitone" )
jamie@267 252 {
jamie@267 253 actual = xttest_ftom(result);
jamie@267 254 uint16_t difference = abs(expected - actual);
jamie@267 255 CAPTURE( actual );
jamie@267 256 REQUIRE( difference > 100 );
jamie@264 257 }
jamie@264 258 }
jamie@264 259 }
jamie@264 260 }
jamie@267 261
jamie@267 262 GIVEN( "a 1024 sample block with a sample rate of 11025" )
jamie@267 263 {
jamie@267 264 uint32_t blocksize = 1024;
jamie@267 265 double samplerate = 11025;
jamie@267 266 double result = -1.0;
jamie@267 267 double table[blocksize];
jamie@267 268
jamie@267 269 WHEN( "the frequency is 86.1328125 Hz" ) // period of exactly 512 samples: 2 cycles in the block
jamie@267 270 {
jamie@267 271 double frequency = 86.1328125;
jamie@267 272 double amplitude = 1.0;
jamie@267 273
jamie@267 274 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 275 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 276
jamie@267 277 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 278 {
jamie@267 279 actual = xttest_ftom(result);
jamie@267 280 expected = xttest_ftom(frequency);
jamie@267 281 CAPTURE( actual );
jamie@267 282 CAPTURE( expected );
jamie@267 283 REQUIRE(actual == expected);
jamie@267 284 }
jamie@267 285 }
jamie@267 286
jamie@267 287 WHEN( "the frequency is 172.265625 Hz" ) // period of exactly 256 samples: 4 cycles in the block
jamie@267 288 {
jamie@267 289 double frequency = 172.265625;
jamie@267 290 double amplitude = 1.0;
jamie@267 291
jamie@267 292 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 293 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 294
jamie@267 295 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 296 {
jamie@267 297 actual = xttest_ftom(result);
jamie@267 298 expected = xttest_ftom(frequency);
jamie@267 299 CAPTURE( actual );
jamie@267 300 CAPTURE( expected );
jamie@267 301 REQUIRE(actual == expected);
jamie@267 302 }
jamie@267 303 }
jamie@267 304
jamie@267 305 WHEN( "the frequency is 344.53125 Hz" ) // period of exactly 128 samples: 8 cycles in the block
jamie@267 306 {
jamie@267 307 double frequency = 344.53125;
jamie@267 308 expected = xttest_ftom(frequency);
jamie@267 309 CAPTURE( expected );
jamie@267 310
jamie@267 311 WHEN( "the amplitude is 1.0" )
jamie@267 312 {
jamie@267 313 double amplitude = 1.0;
jamie@267 314
jamie@267 315 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 316 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 317
jamie@267 318 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 319 {
jamie@267 320 actual = xttest_ftom(result);
jamie@267 321 CAPTURE( actual );
jamie@267 322 REQUIRE(actual == expected);
jamie@267 323 }
jamie@267 324 }
jamie@267 325
jamie@267 326 WHEN( "the amplitude is 0.01" ) // Only test a different amplitude for one case
jamie@267 327 {
jamie@267 328 double amplitude = 0.01;
jamie@267 329
jamie@267 330 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 331 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 332
jamie@267 333 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 334 {
jamie@267 335 actual = xttest_ftom(result);
jamie@267 336 CAPTURE( actual );
jamie@267 337 REQUIRE(actual == expected);
jamie@267 338 }
jamie@267 339 }
jamie@267 340
jamie@267 341 WHEN( "white noise is added at 20%" )
jamie@267 342 {
jamie@267 343 double amplitude = 0.2;
jamie@267 344 double noise[blocksize];
jamie@267 345
jamie@267 346 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 347 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 348 xttest_add(table, noise, blocksize);
jamie@267 349 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 350
jamie@267 351 THEN( "the detected F0 is accurate to the nearest quarter-tone" )
jamie@267 352 {
jamie@267 353 actual = xttest_ftom(result);
jamie@267 354 uint16_t min = expected - 50;
jamie@267 355 uint16_t max = expected + 50;
jamie@267 356 CAPTURE( actual );
jamie@267 357 REQUIRE( actual > min );
jamie@267 358 REQUIRE( actual < max );
jamie@267 359 }
jamie@267 360 }
jamie@267 361
jamie@267 362 WHEN( "white noise is added at 40%" )
jamie@267 363 {
jamie@267 364 double amplitude = 0.4;
jamie@267 365 double noise[blocksize];
jamie@267 366
jamie@267 367 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 368 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 369 xttest_add(table, noise, blocksize);
jamie@267 370 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 371
jamie@267 372 THEN( "the detected F0 is accurate to the nearest semi-tone" )
jamie@267 373 {
jamie@267 374 actual = xttest_ftom(result);
jamie@267 375 uint16_t min = expected - 100;
jamie@267 376 uint16_t max = expected + 100;
jamie@267 377 CAPTURE( actual );
jamie@267 378 REQUIRE( actual > min );
jamie@267 379 REQUIRE( actual < max );
jamie@267 380 }
jamie@267 381 }
jamie@267 382
jamie@267 383 WHEN( "white noise is added at 60%" )
jamie@267 384 {
jamie@267 385 double amplitude = 0.6;
jamie@267 386 double noise[blocksize];
jamie@267 387
jamie@267 388 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 389 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 390 xttest_add(table, noise, blocksize);
jamie@267 391 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 392
jamie@267 393 THEN( "the detected F0 is accurate to the nearest semi-tone" )
jamie@267 394 {
jamie@267 395 actual = xttest_ftom(result);
jamie@267 396 uint16_t min = expected - 100;
jamie@267 397 uint16_t max = expected + 100;
jamie@267 398 CAPTURE( actual );
jamie@267 399 REQUIRE( actual > min );
jamie@267 400 REQUIRE( actual < max );
jamie@267 401 }
jamie@267 402 }
jamie@267 403
jamie@267 404 WHEN( "white noise is added at 80%" )
jamie@267 405 {
jamie@267 406 double amplitude = 0.8;
jamie@267 407 double noise[blocksize];
jamie@267 408
jamie@267 409 xttest_gen_sine(table, blocksize, samplerate, frequency, 1.0 - amplitude);
jamie@267 410 xttest_gen_noise(noise, blocksize, amplitude);
jamie@267 411 xttest_add(table, noise, blocksize);
jamie@267 412 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 413
jamie@267 414 THEN( "the detected F0 is inaccurate by more than one semitone" )
jamie@267 415 {
jamie@267 416 actual = xttest_ftom(result);
jamie@267 417 uint16_t difference = abs(expected - actual);
jamie@267 418 CAPTURE( actual );
jamie@267 419 REQUIRE( difference > 100 );
jamie@267 420 }
jamie@267 421 }
jamie@267 422 }
jamie@267 423 }
jamie@267 424
jamie@267 425 GIVEN( "a 2048 sample block with a sample rate of 44100" )
jamie@267 426 {
jamie@267 427 uint32_t blocksize = 2048;
jamie@267 428 double samplerate = 44100;
jamie@267 429 double result = -1.0;
jamie@267 430 double table[blocksize];
jamie@267 431
jamie@267 432 WHEN( "the frequency is 43.06640625 Hz" ) // period of exactly 256 samples: 2 cycles in the block
jamie@267 433 {
jamie@267 434 double frequency = 43.06640625;
jamie@267 435 double amplitude = 1.0;
jamie@267 436
jamie@267 437 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 438 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 439
jamie@267 440 THEN( "frequency detection fails correctly (XTRACT_NO_RESULT is returned, result set to 0.0)" )
jamie@267 441 {
jamie@267 442 REQUIRE(rv == XTRACT_NO_RESULT);
jamie@267 443 REQUIRE(result == 0.0);
jamie@267 444 }
jamie@267 445 }
jamie@267 446
jamie@267 447 WHEN( "the frequency is 86.1328125 Hz" ) // period of exactly 512 samples: 4 cycles in the block
jamie@267 448 {
jamie@267 449 double frequency = 86.1328125;
jamie@267 450 double amplitude = 1.0;
jamie@267 451
jamie@267 452 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 453 int rv = xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 454
jamie@267 455 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 456 {
jamie@267 457 actual = xttest_ftom(result);
jamie@267 458 expected = xttest_ftom(frequency);
jamie@267 459 CAPTURE( actual );
jamie@267 460 CAPTURE( expected );
jamie@267 461 REQUIRE(actual == expected);
jamie@267 462 }
jamie@267 463 }
jamie@267 464
jamie@267 465 WHEN( "the frequency is 172.265625 Hz" ) // period of exactly 256 samples: 8 cycles in the block
jamie@267 466 {
jamie@267 467 double frequency = 172.265625;
jamie@267 468 double amplitude = 1.0;
jamie@267 469
jamie@267 470 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 471 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 472
jamie@267 473 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 474 {
jamie@267 475 actual = xttest_ftom(result);
jamie@267 476 expected = xttest_ftom(frequency);
jamie@267 477 CAPTURE( actual );
jamie@267 478 CAPTURE( expected );
jamie@267 479 REQUIRE(actual == expected);
jamie@267 480 }
jamie@267 481 }
jamie@267 482
jamie@267 483 WHEN( "the frequency is 344.53125 Hz" ) // period of exactly 128 samples: 16 cycles in the block
jamie@267 484 {
jamie@267 485 double frequency = 344.53125;
jamie@267 486
jamie@267 487 WHEN( "the amplitude is 1.0" )
jamie@267 488 {
jamie@267 489 double amplitude = 1.0;
jamie@267 490
jamie@267 491 xttest_gen_sine(table, blocksize, samplerate, frequency, amplitude);
jamie@267 492 xtract_f0(table, blocksize, &samplerate, &result);
jamie@267 493
jamie@267 494 THEN( "the detected F0 is accurate to the nearest MIDI cent" )
jamie@267 495 {
jamie@267 496 actual = xttest_ftom(result);
jamie@267 497 expected = xttest_ftom(frequency);
jamie@267 498 CAPTURE( actual );
jamie@267 499 CAPTURE( expected );
jamie@267 500 REQUIRE(actual == expected);
jamie@267 501 }
jamie@267 502 }
jamie@267 503 }
jamie@267 504 }
jamie@264 505 }