ARedisSortedSetTest.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. require_once("common.php");
  3. /**
  4. * Tests for the {@link ARedisSortedSet} class
  5. * @author Charles Pick
  6. * @package packages.redis.tests
  7. */
  8. class ARedisSortedSetTest extends CTestCase {
  9. /**
  10. * Holds the redis connection
  11. * @var ARedisConnection
  12. */
  13. protected $_connection;
  14. /**
  15. * Tests the basic functionality
  16. */
  17. public function testBasics() {
  18. $redis = $this->getConnection();
  19. $set = new ARedisSortedSet("TestSet:".uniqid(),$redis);
  20. $this->assertTrue($set->add("oranges", 2.40));
  21. $this->assertTrue($set->add("apples", 1.40));
  22. $this->assertTrue($set->add("strawberries", 3));
  23. $this->assertEquals(3, $set->getCount());
  24. $this->assertTrue($set->add("carrots",0.4));
  25. $this->assertEquals(4, $set->getCount());
  26. $this->assertTrue($set->remove("carrots"));
  27. $this->assertFalse($set->remove("carrots"));
  28. $this->assertEquals(3, $set->getCount());
  29. $set->clear();
  30. $this->assertEquals(0, $set->getCount());
  31. }
  32. public function testInterfaces() {
  33. $redis = $this->getConnection();
  34. $set = new ARedisSortedSet("TestSet:".uniqid(),$redis);
  35. $this->assertEquals(0,count($set));
  36. $set["test"] = 24;
  37. $set["test2"] = 12;
  38. $this->assertEquals(2,count($set));
  39. $previous = 0;
  40. foreach($set as $item => $value) {
  41. $this->assertTrue($item == "test" || $item == "test2");
  42. $this->assertGreaterThan($previous, $value);
  43. $previous = $value;
  44. }
  45. unset($set["test"]);
  46. $this->assertEquals(1, count($set));
  47. $set->clear();
  48. }
  49. public function testInterStore() {
  50. $redis = $this->getConnection();
  51. $set1 = new ARedisSortedSet("TestSet1:".uniqid(),$redis);
  52. $set2 = new ARedisSortedSet("TestSet2:".uniqid(),$redis);
  53. $this->assertTrue($set1->add("test 1", 1));
  54. $this->assertTrue($set2->add("test 1", 1));
  55. $this->assertTrue($set1->add("test 2", 2));
  56. $this->assertTrue($set2->add("test 3", 3));
  57. $this->assertTrue($set1->add("test 4", 4));
  58. $this->assertTrue($set2->add("test 4", 5));
  59. $newSet = $set1->interStore("TestSet3:".uniqid(),$set2);
  60. $this->assertEquals(array("test 1" => 2, "test 4" => 9),$newSet->getData());
  61. $newSet->clear();
  62. $set1->clear();
  63. $set2->clear();
  64. }
  65. public function testUnionStore() {
  66. $redis = $this->getConnection();
  67. $set1 = new ARedisSortedSet("TestSet1:".uniqid(),$redis);
  68. $set2 = new ARedisSortedSet("TestSet2:".uniqid(),$redis);
  69. $this->assertTrue($set1->add("test 1", 1));
  70. $this->assertTrue($set2->add("test 1", 1));
  71. $this->assertTrue($set1->add("test 2", 2));
  72. $this->assertTrue($set2->add("test 3", 3));
  73. $this->assertTrue($set1->add("test 4", 4));
  74. $this->assertTrue($set2->add("test 4", 5));
  75. $newSet = $set1->unionStore("TestSet3:".uniqid(),$set2);
  76. $this->assertEquals(array(
  77. "test 1" => 2,
  78. "test 2" => 2,
  79. "test 3" => 3,
  80. "test 4" => 9),$newSet->getData());
  81. $newSet->clear();
  82. $set1->clear();
  83. $set2->clear();
  84. }
  85. /**
  86. * Sets the redis connection to use with this test
  87. * @param ARedisConnection $connection the connection
  88. */
  89. public function setConnection($connection)
  90. {
  91. $this->_connection = $connection;
  92. }
  93. /**
  94. * Gets the redis connection to use with this test
  95. * @return ARedisConnection the redis connection
  96. */
  97. public function getConnection()
  98. {
  99. if ($this->_connection === null) {
  100. $this->_connection = Yii::createComponent(
  101. array(
  102. "class" => "packages.redis.ARedisConnection",
  103. "hostname" => REDIS_HOSTNAME,
  104. "port" => REDIS_PORT,
  105. "database" => REDIS_DATABASE,
  106. "password" => REDIS_PASSWORD
  107. ));
  108. }
  109. return $this->_connection;
  110. }
  111. }