Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1054)

Side by Side Diff: runtime/vm/bigint_test.cc

Issue 2449013003: Don't allocate on the Dart heap during Bigint::ToCString(). (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/assert.h" 5 #include "platform/assert.h"
6 #include "vm/object.h" 6 #include "vm/object.h"
7 #include "vm/object_store.h" 7 #include "vm/object_store.h"
8 #include "vm/unit_test.h" 8 #include "vm/unit_test.h"
9 9
10 namespace dart { 10 namespace dart {
11 11
12 static uword ZoneAllocator(intptr_t size) {
13 Zone* zone = Thread::Current()->zone();
14 return zone->AllocUnsafe(size);
15 }
16
17
18 TEST_CASE(BigintSmi) { 12 TEST_CASE(BigintSmi) {
19 { 13 {
20 const Smi& smi = Smi::Handle(Smi::New(5)); 14 const Smi& smi = Smi::Handle(Smi::New(5));
21 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value())); 15 const Bigint& bigint = Bigint::Handle(Bigint::NewFromInt64(smi.Value()));
22 EXPECT_EQ(5, bigint.AsInt64Value()); 16 EXPECT_EQ(5, bigint.AsInt64Value());
23 EXPECT(bigint.FitsIntoSmi()); 17 EXPECT(bigint.FitsIntoSmi());
24 Smi& smi_back = Smi::Handle(); 18 Smi& smi_back = Smi::Handle();
25 smi_back ^= bigint.AsValidInteger(); 19 smi_back ^= bigint.AsValidInteger();
26 EXPECT_EQ(5, smi_back.Value()); 20 EXPECT_EQ(5, smi_back.Value());
27 } 21 }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 "1844674407370955161600000000000000000000000"); 222 "1844674407370955161600000000000000000000000");
229 EXPECT_EQ(1.844674407370955e+42, bigint.AsDoubleValue()); 223 EXPECT_EQ(1.844674407370955e+42, bigint.AsDoubleValue());
230 224
231 bigint = Bigint::NewFromCString( 225 bigint = Bigint::NewFromCString(
232 "1844674407370955161600000000000000000000001"); 226 "1844674407370955161600000000000000000000001");
233 EXPECT_EQ(1.8446744073709553e+42, bigint.AsDoubleValue()); 227 EXPECT_EQ(1.8446744073709553e+42, bigint.AsDoubleValue());
234 } 228 }
235 229
236 230
237 TEST_CASE(BigintHexStrings) { 231 TEST_CASE(BigintHexStrings) {
232 Zone* zone = Thread::Current()->zone();
238 { 233 {
239 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); 234 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0"));
240 EXPECT(bigint.FitsIntoSmi()); 235 EXPECT(bigint.FitsIntoSmi());
241 EXPECT_EQ(0, bigint.AsInt64Value()); 236 EXPECT_EQ(0, bigint.AsInt64Value());
242 } 237 }
243 238
244 { 239 {
245 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x1")); 240 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x1"));
246 EXPECT(bigint.FitsIntoSmi()); 241 EXPECT(bigint.FitsIntoSmi());
247 EXPECT_EQ(1, bigint.AsInt64Value()); 242 EXPECT_EQ(1, bigint.AsInt64Value());
248 } 243 }
249 244
250 { 245 {
251 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123")); 246 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
252 EXPECT(bigint.FitsIntoSmi()); 247 EXPECT(bigint.FitsIntoSmi());
253 EXPECT_EQ(0x123, bigint.AsInt64Value()); 248 EXPECT_EQ(0x123, bigint.AsInt64Value());
254 } 249 }
255 250
256 { 251 {
257 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123")); 252 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
258 const char* str = bigint.ToHexCString(&ZoneAllocator); 253 const char* str = bigint.ToHexCString(zone);
259 EXPECT_STREQ("0x123", str); 254 EXPECT_STREQ("0x123", str);
260 } 255 }
261 256
262 { 257 {
263 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf")); 258 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf"));
264 const char* str = bigint.ToHexCString(&ZoneAllocator); 259 const char* str = bigint.ToHexCString(zone);
265 EXPECT_STREQ("0xABCEF", str); 260 EXPECT_STREQ("0xABCEF", str);
266 } 261 }
267 262
268 { 263 {
269 const char* in = "0x123456789"; 264 const char* in = "0x123456789";
270 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 265 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
271 const char* str = bigint.ToHexCString(&ZoneAllocator); 266 const char* str = bigint.ToHexCString(zone);
272 EXPECT_STREQ(in, str); 267 EXPECT_STREQ(in, str);
273 } 268 }
274 269
275 { 270 {
276 const char* in = "0xFFFFFFF"; 271 const char* in = "0xFFFFFFF";
277 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 272 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
278 const char* str = bigint.ToHexCString(&ZoneAllocator); 273 const char* str = bigint.ToHexCString(zone);
279 EXPECT_STREQ(in, str); 274 EXPECT_STREQ(in, str);
280 } 275 }
281 276
282 { 277 {
283 const char* in = "0x10000000"; 278 const char* in = "0x10000000";
284 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 279 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
285 const char* str = bigint.ToHexCString(&ZoneAllocator); 280 const char* str = bigint.ToHexCString(zone);
286 EXPECT_STREQ(in, str); 281 EXPECT_STREQ(in, str);
287 } 282 }
288 283
289 { 284 {
290 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 285 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
291 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 286 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
292 const char* str = bigint.ToHexCString(&ZoneAllocator); 287 const char* str = bigint.ToHexCString(zone);
293 EXPECT_STREQ(in, str); 288 EXPECT_STREQ(in, str);
294 } 289 }
295 290
296 { 291 {
297 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123")); 292 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
298 EXPECT(bigint.FitsIntoSmi()); 293 EXPECT(bigint.FitsIntoSmi());
299 EXPECT_EQ(-0x123, bigint.AsInt64Value()); 294 EXPECT_EQ(-0x123, bigint.AsInt64Value());
300 } 295 }
301 296
302 { 297 {
303 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123")); 298 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
304 const char* str = bigint.ToHexCString(&ZoneAllocator); 299 const char* str = bigint.ToHexCString(zone);
305 EXPECT_STREQ("-0x123", str); 300 EXPECT_STREQ("-0x123", str);
306 } 301 }
307 302
308 { 303 {
309 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf")); 304 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf"));
310 const char* str = bigint.ToHexCString(&ZoneAllocator); 305 const char* str = bigint.ToHexCString(zone);
311 EXPECT_STREQ("-0xABCEF", str); 306 EXPECT_STREQ("-0xABCEF", str);
312 } 307 }
313 308
314 { 309 {
315 const char* in = "-0x123456789"; 310 const char* in = "-0x123456789";
316 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 311 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
317 const char* str = bigint.ToHexCString(&ZoneAllocator); 312 const char* str = bigint.ToHexCString(zone);
318 EXPECT_STREQ(in, str); 313 EXPECT_STREQ(in, str);
319 } 314 }
320 315
321 { 316 {
322 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 317 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
323 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 318 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
324 const char* str = bigint.ToHexCString(&ZoneAllocator); 319 const char* str = bigint.ToHexCString(zone);
325 EXPECT_STREQ(in, str); 320 EXPECT_STREQ(in, str);
326 } 321 }
327 322
328 { 323 {
329 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123")); 324 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123"));
330 EXPECT(bigint.FitsIntoSmi()); 325 EXPECT(bigint.FitsIntoSmi());
331 EXPECT_EQ(0x123, bigint.AsInt64Value()); 326 EXPECT_EQ(0x123, bigint.AsInt64Value());
332 } 327 }
333 328
334 { 329 {
335 const Bigint& bigint = Bigint::Handle( 330 const Bigint& bigint = Bigint::Handle(
336 Bigint::NewFromCString("0x000000123")); 331 Bigint::NewFromCString("0x000000123"));
337 const char* str = bigint.ToHexCString(&ZoneAllocator); 332 const char* str = bigint.ToHexCString(zone);
338 EXPECT_STREQ("0x123", str); 333 EXPECT_STREQ("0x123", str);
339 } 334 }
340 335
341 { 336 {
342 const Bigint& bigint = Bigint::Handle( 337 const Bigint& bigint = Bigint::Handle(
343 Bigint::NewFromCString("0x0000aBcEf")); 338 Bigint::NewFromCString("0x0000aBcEf"));
344 const char* str = bigint.ToHexCString(&ZoneAllocator); 339 const char* str = bigint.ToHexCString(zone);
345 EXPECT_STREQ("0xABCEF", str); 340 EXPECT_STREQ("0xABCEF", str);
346 } 341 }
347 342
348 { 343 {
349 const char* in = "0x00000000000000000000000000000000000000000000123456789"; 344 const char* in = "0x00000000000000000000000000000000000000000000123456789";
350 const char* out = "0x123456789"; 345 const char* out = "0x123456789";
351 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 346 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
352 const char* str = bigint.ToHexCString(&ZoneAllocator); 347 const char* str = bigint.ToHexCString(zone);
353 EXPECT_STREQ(out, str); 348 EXPECT_STREQ(out, str);
354 } 349 }
355 350
356 { 351 {
357 const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 352 const char* in = "0x00000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
358 const char* out = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 353 const char* out = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
359 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 354 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
360 const char* str = bigint.ToHexCString(&ZoneAllocator); 355 const char* str = bigint.ToHexCString(zone);
361 EXPECT_STREQ(out, str); 356 EXPECT_STREQ(out, str);
362 } 357 }
363 358
364 { 359 {
365 const Bigint& bigint = Bigint::Handle( 360 const Bigint& bigint = Bigint::Handle(
366 Bigint::NewFromCString("-0x00000123")); 361 Bigint::NewFromCString("-0x00000123"));
367 EXPECT(bigint.FitsIntoSmi()); 362 EXPECT(bigint.FitsIntoSmi());
368 EXPECT_EQ(-0x123, bigint.AsInt64Value()); 363 EXPECT_EQ(-0x123, bigint.AsInt64Value());
369 } 364 }
370 365
371 { 366 {
372 const Bigint& bigint = Bigint::Handle( 367 const Bigint& bigint = Bigint::Handle(
373 Bigint::NewFromCString("-0x00000123")); 368 Bigint::NewFromCString("-0x00000123"));
374 const char* str = bigint.ToHexCString(&ZoneAllocator); 369 const char* str = bigint.ToHexCString(zone);
375 EXPECT_STREQ("-0x123", str); 370 EXPECT_STREQ("-0x123", str);
376 } 371 }
377 372
378 { 373 {
379 const Bigint& bigint = Bigint::Handle( 374 const Bigint& bigint = Bigint::Handle(
380 Bigint::NewFromCString("-0x000aBcEf")); 375 Bigint::NewFromCString("-0x000aBcEf"));
381 const char* str = bigint.ToHexCString(&ZoneAllocator); 376 const char* str = bigint.ToHexCString(zone);
382 EXPECT_STREQ("-0xABCEF", str); 377 EXPECT_STREQ("-0xABCEF", str);
383 } 378 }
384 379
385 { 380 {
386 const char* in = "-0x00000000000000000000000000000000000000000000123456789"; 381 const char* in = "-0x00000000000000000000000000000000000000000000123456789";
387 const char* out = "-0x123456789"; 382 const char* out = "-0x123456789";
388 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 383 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
389 const char* str = bigint.ToHexCString(&ZoneAllocator); 384 const char* str = bigint.ToHexCString(zone);
390 EXPECT_STREQ(out, str); 385 EXPECT_STREQ(out, str);
391 } 386 }
392 387
393 { 388 {
394 const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 389 const char* in = "-0x0000123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
395 const char* out = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 390 const char* out = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
396 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 391 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
397 const char* str = bigint.ToHexCString(&ZoneAllocator); 392 const char* str = bigint.ToHexCString(zone);
398 EXPECT_STREQ(out, str); 393 EXPECT_STREQ(out, str);
399 } 394 }
400 { 395 {
401 const char* test = "12345678901234567890"; 396 const char* test = "12345678901234567890";
402 const char* out = "0xAB54A98CEB1F0AD2"; 397 const char* out = "0xAB54A98CEB1F0AD2";
403 const Bigint& bigint = Bigint::Handle( 398 const Bigint& bigint = Bigint::Handle(
404 Bigint::NewFromCString(test)); 399 Bigint::NewFromCString(test));
405 const char* str = bigint.ToHexCString(&ZoneAllocator); 400 const char* str = bigint.ToHexCString(zone);
406 EXPECT_STREQ(out, str); 401 EXPECT_STREQ(out, str);
407 } 402 }
408 { 403 {
409 const char* test = "-12345678901234567890"; 404 const char* test = "-12345678901234567890";
410 const char* out = "-0xAB54A98CEB1F0AD2"; 405 const char* out = "-0xAB54A98CEB1F0AD2";
411 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(test)); 406 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(test));
412 const char* str = bigint.ToHexCString(&ZoneAllocator); 407 const char* str = bigint.ToHexCString(zone);
413 EXPECT_STREQ(out, str); 408 EXPECT_STREQ(out, str);
414 } 409 }
415 } 410 }
416 411
417 412
418 TEST_CASE(BigintDecStrings) { 413 TEST_CASE(BigintDecStrings) {
414 Zone* zone = Thread::Current()->zone();
419 { 415 {
420 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0")); 416 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x0"));
421 const char* str = bigint.ToDecCString(&ZoneAllocator); 417 const char* str = bigint.ToDecCString(zone);
422 EXPECT_STREQ("0", str); 418 EXPECT_STREQ("0", str);
423 } 419 }
424 420
425 { 421 {
426 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123")); 422 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x123"));
427 const char* str = bigint.ToDecCString(&ZoneAllocator); 423 const char* str = bigint.ToDecCString(zone);
428 EXPECT_STREQ("291", str); 424 EXPECT_STREQ("291", str);
429 } 425 }
430 426
431 { 427 {
432 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf")); 428 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0xaBcEf"));
433 const char* str = bigint.ToDecCString(&ZoneAllocator); 429 const char* str = bigint.ToDecCString(zone);
434 EXPECT_STREQ("703727", str); 430 EXPECT_STREQ("703727", str);
435 } 431 }
436 432
437 { 433 {
438 const char* in = "0x123456789"; 434 const char* in = "0x123456789";
439 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 435 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
440 const char* str = bigint.ToDecCString(&ZoneAllocator); 436 const char* str = bigint.ToDecCString(zone);
441 EXPECT_STREQ("4886718345", str); 437 EXPECT_STREQ("4886718345", str);
442 } 438 }
443 439
444 { 440 {
445 const char* in = "0xFFFFFFF"; 441 const char* in = "0xFFFFFFF";
446 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 442 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
447 const char* str = bigint.ToDecCString(&ZoneAllocator); 443 const char* str = bigint.ToDecCString(zone);
448 EXPECT_STREQ("268435455", str); 444 EXPECT_STREQ("268435455", str);
449 } 445 }
450 446
451 { 447 {
452 const char* in = "0x10000000"; 448 const char* in = "0x10000000";
453 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 449 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
454 const char* str = bigint.ToDecCString(&ZoneAllocator); 450 const char* str = bigint.ToDecCString(zone);
455 EXPECT_STREQ("268435456", str); 451 EXPECT_STREQ("268435456", str);
456 } 452 }
457 453
458 { 454 {
459 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 455 const char* in = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
460 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 456 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
461 const char* str = bigint.ToDecCString(&ZoneAllocator); 457 const char* str = bigint.ToDecCString(zone);
462 EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960", 458 EXPECT_STREQ("7141946863373290020600059860922167424469804758405880798960",
463 str); 459 str);
464 } 460 }
465 461
466 { 462 {
467 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123")); 463 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
468 EXPECT(bigint.FitsIntoSmi()); 464 EXPECT(bigint.FitsIntoSmi());
469 EXPECT_EQ(-291, bigint.AsInt64Value()); 465 EXPECT_EQ(-291, bigint.AsInt64Value());
470 } 466 }
471 467
472 { 468 {
473 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123")); 469 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0x123"));
474 const char* str = bigint.ToDecCString(&ZoneAllocator); 470 const char* str = bigint.ToDecCString(zone);
475 EXPECT_STREQ("-291", str); 471 EXPECT_STREQ("-291", str);
476 } 472 }
477 473
478 { 474 {
479 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf")); 475 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0xaBcEf"));
480 const char* str = bigint.ToDecCString(&ZoneAllocator); 476 const char* str = bigint.ToDecCString(zone);
481 EXPECT_STREQ("-703727", str); 477 EXPECT_STREQ("-703727", str);
482 } 478 }
483 479
484 { 480 {
485 const char* in = "-0x123456789"; 481 const char* in = "-0x123456789";
486 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 482 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
487 const char* str = bigint.ToDecCString(&ZoneAllocator); 483 const char* str = bigint.ToDecCString(zone);
488 EXPECT_STREQ("-4886718345", str); 484 EXPECT_STREQ("-4886718345", str);
489 } 485 }
490 486
491 { 487 {
492 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0"; 488 const char* in = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
493 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in)); 489 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString(in));
494 const char* str = bigint.ToDecCString(&ZoneAllocator); 490 const char* str = bigint.ToDecCString(zone);
495 EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960", 491 EXPECT_STREQ("-7141946863373290020600059860922167424469804758405880798960",
496 str); 492 str);
497 } 493 }
498 494
499 { 495 {
500 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123")); 496 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0x00000123"));
501 EXPECT(bigint.FitsIntoSmi()); 497 EXPECT(bigint.FitsIntoSmi());
502 EXPECT_EQ(0x123, bigint.AsInt64Value()); 498 EXPECT_EQ(0x123, bigint.AsInt64Value());
503 } 499 }
504 500
505 { 501 {
506 const Bigint& bigint = Bigint::Handle( 502 const Bigint& bigint = Bigint::Handle(
507 Bigint::NewFromCString("0x000000123")); 503 Bigint::NewFromCString("0x000000123"));
508 const char* str = bigint.ToDecCString(&ZoneAllocator); 504 const char* str = bigint.ToDecCString(zone);
509 EXPECT_STREQ("291", str); 505 EXPECT_STREQ("291", str);
510 } 506 }
511 507
512 { 508 {
513 const Bigint& bigint = Bigint::Handle( 509 const Bigint& bigint = Bigint::Handle(
514 Bigint::NewFromCString("100000000000000000000000000000000")); 510 Bigint::NewFromCString("100000000000000000000000000000000"));
515 const char* str = bigint.ToDecCString(&ZoneAllocator); 511 const char* str = bigint.ToDecCString(zone);
516 EXPECT_STREQ("100000000000000000000000000000000", str); 512 EXPECT_STREQ("100000000000000000000000000000000", str);
517 } 513 }
518 } 514 }
519 515
520 516
521 static void TestBigintCompare(const char* a, const char* b, int compare) { 517 static void TestBigintCompare(const char* a, const char* b, int compare) {
522 const Bigint& bigint_a = Bigint::Handle(Bigint::NewFromCString(a)); 518 const Bigint& bigint_a = Bigint::Handle(Bigint::NewFromCString(a));
523 const Bigint& bigint_b = Bigint::Handle(Bigint::NewFromCString(b)); 519 const Bigint& bigint_b = Bigint::Handle(Bigint::NewFromCString(b));
524 const Integer& int_a = Integer::Handle(bigint_a.AsValidInteger()); 520 const Integer& int_a = Integer::Handle(bigint_a.AsValidInteger());
525 const Integer& int_b = Integer::Handle(bigint_b.AsValidInteger()); 521 const Integer& int_b = Integer::Handle(bigint_b.AsValidInteger());
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); 579 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
584 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1); 580 TestBigintCompare("-0x100000000", "0xFFFFFFFF", -1);
585 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); 581 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
586 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1); 582 TestBigintCompare("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", -1);
587 TestBigintCompare("-0x10000000000000000", "0x0", -1); 583 TestBigintCompare("-0x10000000000000000", "0x0", -1);
588 TestBigintCompare("-0x10000000000000000", "0x0", -1); 584 TestBigintCompare("-0x10000000000000000", "0x0", -1);
589 } 585 }
590 586
591 587
592 TEST_CASE(BigintDecimalStrings) { 588 TEST_CASE(BigintDecimalStrings) {
589 Zone* zone = Thread::Current()->zone();
593 { 590 {
594 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0")); 591 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("0"));
595 EXPECT(bigint.FitsIntoSmi()); 592 EXPECT(bigint.FitsIntoSmi());
596 EXPECT_EQ(0, bigint.AsInt64Value()); 593 EXPECT_EQ(0, bigint.AsInt64Value());
597 } 594 }
598 595
599 { 596 {
600 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("1")); 597 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("1"));
601 EXPECT(bigint.FitsIntoSmi()); 598 EXPECT(bigint.FitsIntoSmi());
602 EXPECT_EQ(1, bigint.AsInt64Value()); 599 EXPECT_EQ(1, bigint.AsInt64Value());
603 } 600 }
604 601
605 { 602 {
606 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("703710")); 603 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("703710"));
607 const char* str = bigint.ToHexCString(&ZoneAllocator); 604 const char* str = bigint.ToHexCString(zone);
608 EXPECT_STREQ("0xABCDE", str); 605 EXPECT_STREQ("0xABCDE", str);
609 } 606 }
610 607
611 { 608 {
612 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("11259375")); 609 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("11259375"));
613 const char* str = bigint.ToHexCString(&ZoneAllocator); 610 const char* str = bigint.ToHexCString(zone);
614 EXPECT_STREQ("0xABCDEF", str); 611 EXPECT_STREQ("0xABCDEF", str);
615 } 612 }
616 613
617 { 614 {
618 const Bigint& bigint = 615 const Bigint& bigint =
619 Bigint::Handle(Bigint::NewFromCString("1311768467463790320")); 616 Bigint::Handle(Bigint::NewFromCString("1311768467463790320"));
620 const char* str = bigint.ToHexCString(&ZoneAllocator); 617 const char* str = bigint.ToHexCString(zone);
621 EXPECT_STREQ("0x123456789ABCDEF0", str); 618 EXPECT_STREQ("0x123456789ABCDEF0", str);
622 } 619 }
623 620
624 { 621 {
625 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0")); 622 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-0"));
626 EXPECT(bigint.FitsIntoSmi()); 623 EXPECT(bigint.FitsIntoSmi());
627 EXPECT_EQ(0, bigint.AsInt64Value()); 624 EXPECT_EQ(0, bigint.AsInt64Value());
628 } 625 }
629 626
630 { 627 {
631 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-1")); 628 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-1"));
632 EXPECT(bigint.FitsIntoSmi()); 629 EXPECT(bigint.FitsIntoSmi());
633 EXPECT_EQ(-1, bigint.AsInt64Value()); 630 EXPECT_EQ(-1, bigint.AsInt64Value());
634 } 631 }
635 632
636 { 633 {
637 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-703710")); 634 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-703710"));
638 const char* str = bigint.ToHexCString(&ZoneAllocator); 635 const char* str = bigint.ToHexCString(zone);
639 EXPECT_STREQ("-0xABCDE", str); 636 EXPECT_STREQ("-0xABCDE", str);
640 } 637 }
641 638
642 { 639 {
643 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-11259375")); 640 const Bigint& bigint = Bigint::Handle(Bigint::NewFromCString("-11259375"));
644 const char* str = bigint.ToHexCString(&ZoneAllocator); 641 const char* str = bigint.ToHexCString(zone);
645 EXPECT_STREQ("-0xABCDEF", str); 642 EXPECT_STREQ("-0xABCDEF", str);
646 } 643 }
647 644
648 { 645 {
649 const Bigint& bigint = Bigint::Handle( 646 const Bigint& bigint = Bigint::Handle(
650 Bigint::NewFromCString("-1311768467463790320")); 647 Bigint::NewFromCString("-1311768467463790320"));
651 const char* str = bigint.ToHexCString(&ZoneAllocator); 648 const char* str = bigint.ToHexCString(zone);
652 EXPECT_STREQ("-0x123456789ABCDEF0", str); 649 EXPECT_STREQ("-0x123456789ABCDEF0", str);
653 } 650 }
654 } 651 }
655 652
656 } // namespace dart 653 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/dart_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698